如何将字符串中的数字转换为实际数字

时间:2013-10-13 18:23:42

标签: python

我已经获得了一串数字,并且我们的任务是仅使用函数来重现字符串中的数字,该函数在我能够执行以下操作的函数内打印。

# 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

4 个答案:

答案 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