【题目描述】:
给定一个浮点数,要求得到该浮点数的个位数。
【输入描述】:
一行,包括一个浮点数。
【输出描述】:
一行,包含一个整数,为输入浮点数对应的个位数。
输入 13.141
输出 3
一、取输入的字符串小数点位置的索引,取字符串的索引
【执行通过的代码】:15ms
a = input()
idx = inp.index(".")-1
print(a[idx])
或
a= input()
print(a[a.index(".")-1])
注意:print(input()[input().index(".")-1]) 执行报错。
代码解释:
a= input() 将输入的字符串赋值为a
a.index("."):用字符串的index方法获得指定字符串.的索引值。
idx = a.index(".")-1 获得个位数的索引值。
print(a[idx]) 按照字符串a的个位数位置的索引输出对应的值。
二、用%d格式化整数+取模,直接输出:
【执行通过的代码】:
a = float(input())
print('%d' % (a%10))
或
print('%d' % (float(input())% 10))
代码解释:%d格式化整数
print('%d' % (1029.234%10)) # 输出为4。
print('%d' %(1029.234)) # 输出为1029
三、将字符串转为浮点型,转为整型,取模
【执行通过的代码】:
print(int(float(input()))%10)
四、将字符串转为浮点型,用整除1获取整数部分,取模获得个位数后转为整型
【执行通过的代码】:
print(int((float(input())//1)%10))
代码解释:n=float(input()) #一定要设置输入的数据类型:浮点型
n=n//1 # //整除取整:去除小数点
n=n%10 # 用%来取模,获得个位数:通过十位数除法取个位数
n=123.120123//10 # //整除取整:去除小数点
print(n) 输出为12.0
五、将字符串转为浮点型,用整除1获取整数部分,通过减10获得个位数。
【执行通过的代码】:
a = float(input("")) # 或 a = float(input()) 或a = eval(input())
print(int(a-(a//10)*10))
代码解释: a//10获得浮点数的整十倍数,a-(a//10)*10获取个位数和小数点后的值。
【执行通过的代码】:
n = float(input())
n = n // 1
while n >= 10:
n -= 10
print(int(n))
代码解释:n=n//1 # //整除取整:去除小数点,但n=123.12//10 输出为12.0,带一个小数点和0.
后用while循环对n不断减10,减到n小于10,剩余个位数.0。 用int(n)去掉小数点和0。
六、将字符串转为浮点型,转为整型,转为字符串,取字符串的索引:
【执行通过的代码】:
a= str(int((float(input()))))
print(a[-1])
或
print(str(int((float(input())))) [-1])
七、将字符串通过eval或float转为表达式,转为整型,对整型求模
eval(str) 用来计算 字符串中的有效Python表达式,并返回一个对象(表达式的值)。对于大多数的类型,eval(repr(obj)) == obj,obj=type对象例外。
eval就是执行的意思,相当于你在命令行下敲的命令。不管是不是数值型,只要python能执行的,他都给你执行了。
input() 和 input("") 含义相同。
input进去的是字符串,eval把字符串直接转成python的命令
在这个题目中,eval(input(""))相当于float(input("")),把输入内容转换成浮点数
【执行通过的代码】:先保留整数部分,后取模
print(int(eval(input())) % 10)
或
print(int(eval(input()))%10)
代码解释:
eval(input()) 表示把输入的字符串转为对应的数字表达式。
int(eval(input()) 是将上面的这个float型数值转为 int型,即去掉小数部分。
int(eval(input())) % 10 表示对这个整数型数字,用求余数的方式,获得个位数。
【执行通过的代码】:先取模,后保留整数部分
print(int(eval(input())%10))
代码解释:
eval(input()) 表示把输入的字符串转为对应的数字表达式。
eval(input())%10 获得表达式取模的个位数和小数点后面的数字
int(eval(input())%10): 取整删除小数点后面的位数。
print(eval('123456.7890123')%10) 输出:6.789012299996102
【执行通过的代码】:用float替代eval来获得浮点数
print(int(float(input()))%10)
或
a = float(input())
print(int(a%10))
或
a = int(float(input()))
print(a%10)
代码解释:float(input())将输入的字符型转为数字型,这里和上一个代码中的eval(input())等价。
八、分割字符串后赋值给2个变量,对整型变量求模:
【执行通过的代码】:
a, b =map(int, input().split("."))
print(a%10)
代码解释:将输出的字符串分别赋值
九、分割字符串后赋值给2个变量,对整数部分的字符串取索引:
【执行通过的代码】:取正数索引
a,b= input().split('.')
l=len(a)
print(a[l-1])
代码解释:一般用 input().split() 作为输入。
string.split(str="", num) 分割字符串,以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 '\r', '\t', '\n' 和空格
a,b= input().split('.')表示将输入的实数按照整数部分、小数部分分别复制为a和b两个变量。
l=len(a) 表示求整数部分的字符串长度。
a[l-1]表示,求a这个字符串的最后一位。索引从0开始,最后一位索引是字符串的长度减一。
【执行通过的代码】:取负数索引
a , b = input().split('.')
print(a[-1])
或
a , b = input().strip().split('.')
print(a[-1])
代码解释:a[l-1]表示,求a这个字符串的最后一位。用负切片的方式,从后往前取第一位。
十、分割字符串后赋值给1个变量和_变量,后取模或取整
【执行通过的代码】:
a,_=input().split('.')
print(a[-1])
【执行通过的代码】:
str,_ = map(int,input().split('.'))
print(str%10)
代码解释:
a,_=input().split('.')
a,_ 表示只关心输入串里的第一个分隔符前面的那个字符串
a是字符串,_也是一个变量,_是包含了后面所有的项了,所以是列表。print(_) 提示<class 'list'>。
十一、分割字符串赋值给一个列表,对列表的整数部分求模:
【执行通过的代码】:
a = input().split(".")
print(int(a[0])%10)
或print(int(input().split(".") [0])%10)
代码解释:a = input().split(".") 表示将输入的实数按照整数部分、小数部分分别存入一个list列表。
例如:
a = '10.49345'.split(".")
print(a) # 返回为list ['10', '49345']
十二、分割字符串赋值给一个列表,对列表的整数部分字符串取索引
【执行通过的代码】:取-1索引
a = input().split('.')[0]
print(a[-1])
或
b = input().split('.')
print(b[0][-1])
或print(input().split('.')[0][-1])
代码解释:同上,inputStr.split('.') 这个list数组的第一个元组赋值为a,求a这个字符串的最后一个字符。
【执行通过的代码】:取-1: 索引
print(input().split(".")[0][-1:])
代码解释:[-1:]和[-1]含义相同。
- 分割字符串赋值给一个列表,将列表的整数部分字符串转为list列表,按列表长度减1取索引
【执行通过的代码】:取len(a)-1索引
a = list(input().split('.') [0])
print(a[len(a)-1])
十三、分割字符串赋值给一个列表,将列表的整数部分字符串转为list列表,对列表取索引:
【执行通过的代码】:
print(list(str(input()).split(".")[0])[-1])
或
print(list(input().split(".")[0])[-1])
代码解释:
str(input()).split(".") # 使用分割字符串,产生一个列表,共有2个元素,1是整数部分,2是小数部分。
str(input()).split(".")[0] #取出整数部分字符串
list(input().split(".")[0]) # 将整数部分的字符串转为一个列表
list(str(input()).split(".")[0])[-1] # 取这个列表的最后一个元素
十四、用for循环遍历输入的字符串,定位小数点的索引位置,取个位数的索引:
【执行通过的代码】:
a = input()
for i in reversed(range(len(a))): #逆序for 同 for i in range(len(a)-1, -1, -1):
# for i in range(len(a)-1): 为正序查找
if a[i]=='.':
break
print(a[i-1])
代码解释:
range是个迭代器,不是列表,它是取一个算一个。
for循环 因为reversed函数(逆序处理),是按照从最后往前找,找到小数点.之后,就退出了。
for循环从n到1查找 和for循环从1到n查找,都可以,只要找到小数点的位置即可。
中间for循环,并没有改变a的顺序。
测试用的代码-1:for循环从n到1查找
可以使用range(len(a)-1, -1, -1)来替代reversed(range(len(a)))。都是从最后一位往前找小数点
a = '123456.7890123'
for i in reversed(range(len(a))): # for i in range(len(a)-1, -1, -1):
print(i)
if a[i]=='.':
break
print(a[i-1:len(a)]) # a[i-1:len(a))], 这个本来就是按照a的原来的序列
要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数:
>>> for i in reversed(range(1, 6, 2)):
>>> print(i)
5
3
1
测试用的代码-2:for循环从1到n查找
可以用for i in range(len(a)-1) 实现正序的查找。
a = '123456.7890123'
for i in range(len(a)-1): # for i in list(range(len(a))):
print(i)
if a[i]=='.':
break
print(a[i-1:len(a)])
其他说明:
如果要输出一个逆排序的列表,需要for循环里重新赋值一个新的列表b
十五、异常的写法
【执行通过的代码】:
while True:
try:
print(input().split('.')[0][-1]) # 或 print(int(float(input()))%10)
except:
break