我已经获得了一串数字,并且我们的任务是仅使用函数来重现字符串中的数字,该函数在我能够执行以下操作的函数内打印。
# function that prints, no return the values in list
def reprint (f) :
for numbers in (f):
tokens = numbers.split(',')
for values in tokens :
print values,
print
#Main
stringlist =["1,25,999",
"123.4,56.7890,13.571",
"1,23.45,6,7.8"]
reprint (stringlist)
返回
1 25 999
123.4 56.7890 13.571
1 23.45 6 7.8
然而,技巧是用浮点数打印2位小数,这就是我卡住的地方。我试图添加像
这样的东西if '.' in values :
print "%.2f" % (values)
else print "%d" % (values)
但是没有用,我得到一个错误,说打印“3%d”%(值) TypeError:%d format:需要一个数字,而不是str。关于如何将字符串视为数字的任何想法?
预期输出=
1 25 999
123.40 56.79 13.57
1 23.45 6 7.80
答案 0 :(得分:1)
使用ast.literal_eval
将这些字符串转换为整数和浮点数的元组,然后使用isinstance
检查它是int
还是float
:
>>> from ast import literal_eval
for item in stringlist:
tup = literal_eval(item)
for x in tup:
if isinstance(x, float):
print format(x, '.2f'),
elif isinstance(x, int):
print format(x, 'd'),
print
...
1 25 999
123.40 56.79 13.57
1 23.45 6 7.80
答案 1 :(得分:0)
使用float()
转换为浮点数,int()
转换为整数。
if '.' in values :
print "%.2f" % float(values)
else:
print "%d" % int(values)
答案 2 :(得分:0)
你可以替换
print values,
与
if '.' in values:
print '%.2f' % float(values),
else:
print values,
答案 3 :(得分:0)
你可以这样做:
>>> stringlist
['1,25,999', '123.4,56.7890,13.571', '1,23.45,6,7.8']
>>> for line in stringlist:
... for s in line.split(','):
... if '.' in s:
... try:
... f=float(s)
... except ValueError:
... print '{} is not a float'
... else:
... print '{:.2f}'.format(f),
... else:
... try:
... i=int(s)
... except ValueError:
... print '{} is not an int'.format(s)
... else:
... print i,
... print