【问题标题】:Python: String will not convert to float [duplicate]Python:字符串不会转换为浮点数[重复]
【发布时间】:2013-05-14 03:11:11
【问题描述】:

我几个小时前写了这个程序:

while True:
    print 'What would you like me to double?'
    line = raw_input('> ')
    if line == 'done':
        break
    else:
        float(line)              #doesn't seem to work. Why?
        result = line*2
        print type(line)         #prints as string?
        print type(result)       #prints as string?
        print " Entered value times two is ", result

print 'Done! Enter to close'

据我所知,它应该可以正常工作。问题是当我输入一个值(例如 6)时,我收到的是 66 而不是 12。这部分代码看起来像:

float(line)

不工作,将 line 视为字符串而不是浮点数。我只做了一天python,所以它可能是一个菜鸟错误。感谢您的帮助!

【问题讨论】:

    标签: python string


    【解决方案1】:

    float() 返回一个浮点数,而不是转换它。试试:

    line = float(line)
    

    【讨论】:

    • 谢谢!我知道这只是一个菜鸟的错误。感谢您的快速回复,因为我在解决问题之前拒绝入睡。
    • 事实上,“就地”转换值是不可能的——语言不能那样工作。在 Python 中,变量没有类型,但值有,并且这些类型不会改变。您只需创建代表“转换”结果的新值。
    【解决方案2】:

    float(line) 不会就地转换。它返回 float 值。您需要将其分配回浮点变量。

    float_line = float(line)
    

    更新:实际上更好的方法是首先检查输入是否为数字。如果不是数字,float(line) 会崩溃。所以这样更好 -

    float_line = None
    if line.isdigit():
        float_line = float(line)
    else:
        print 'ERROR: Input needs to be a DIGIT or FLOAT.'
    

    请注意,您也可以通过首先强制转换line 并在except 中处理它来捕获ValueError 异常。

    try:
        float_line = float(line)
    except ValueError:
        float_line = None
    

    以上 2 种方法中的任何一种都会导致程序更健壮。

    【讨论】:

    • 这是最好的解决方案。名称 line 不适用于结果值。更好的是value = float(line),然后继续。
    • 感谢您的建议!
    【解决方案3】:

    float(line) 根本不会改变line,所以它仍然是一个字符串。您需要改用line = float(line)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-06
      • 1970-01-01
      • 2011-11-25
      • 2018-12-28
      • 1970-01-01
      • 2019-07-10
      • 2017-05-09
      相关资源
      最近更新 更多