【问题标题】:How to convert numbers in a string into actual numbers如何将字符串中的数字转换为实际数字
【发布时间】:2013-10-13 18:23:41
【问题描述】:

我被赋予了一串数字,并被要求仅重现字符串中的数字,该函数在函数内打印,我可以使用以下功能进行操作。

# 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) 类型错误:%d 格式:需要一个数字,而不是 str。关于如何将字符串视为数字的任何想法?

预期输出 =

1 25 999
123.40 56.79 13.57
1 23.45 6 7.80

【问题讨论】:

  • 不能使用任何类型的转换方法。这家伙强调如果'。在某种程度上,我猜这就是技巧的一部分
  • print "3%d" % (float(values)) 和类似的int() 用于第二种情况
  • 如果字符串包含. 使用float() 将其转换为float 如果不是,使用int()
  • 这是一种糟糕的输入格式
  • @ZachSantiago:no sort of conversion methods can be used 是什么意思?

标签: python


【解决方案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

【讨论】:

  • 任意用户输入是否安全?
  • @livskiy 是的,请参阅help(ast.literal_eval) --> 安全地计算表达式节点或包含 Python 表达式的字符串...
【解决方案2】:

使用float() 转换为浮点数,使用int() 转换为整数1。

if '.' in values :
   print "%.2f" % float(values)
else:
   print "%d" % int(values)

【讨论】:

    【解决方案3】:

    你可以替换

    print values,
    

    if '.' in values:
       print '%.2f' % float(values),
    else:
       print values,
    

    【讨论】:

      【解决方案4】:

      你可以这样做:

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

      【讨论】:

        猜你喜欢
        • 2014-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        • 2015-07-13
        • 2018-06-08
        • 1970-01-01
        • 2017-02-04
        相关资源
        最近更新 更多