0

我得到了一串数字,并被要求仅使用在函数中打印的函数来重现字符串中的数字,我可以使用以下函数来执行此操作。

# 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)

但这没有用,我收到一条错误消息,说 print "3%d" % (values) TypeError: %d format: a number is required, not str. 关于如何将字符串视为数字的任何想法?

预期输出 =

1 25 999
123.40 56.79 13.57
1 23.45 6 7.80
4

4 回答 4

1

用于ast.literal_eval将这些字符串转换为整数和浮点数的元组,然后用于isinstance检查它是否是一个intfloat

>>> 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
于 2013-10-13T18:30:43.583 回答
0

用于float()转换为浮点数并int()转换为整数一。

if '.' in values :
   print "%.2f" % float(values)
else:
   print "%d" % int(values)
于 2013-10-13T18:27:47.210 回答
0

你可以更换

print values,

if '.' in values:
   print '%.2f' % float(values),
else:
   print values,
于 2013-10-13T18:27:51.617 回答
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
于 2013-10-13T18:46:10.900 回答