【问题标题】:Why does Python tell me "input(' ') ValueError: could not convert string to float" when converting user input?为什么 Python 在转换用户输入时告诉我“input('') ValueError: could not convert string to float”?
【发布时间】:2019-05-22 23:59:12
【问题描述】:
print('Input a list of numbers to do statistics on them. Type stop to end the list.')

while True:
    number_list = []
    stop_input = False

    while stop_input == False:
        user_input = input('-> ')

        if float(user_input):
            number_list.append(user_input)                    

        elif user_input == 'stop':
            stop_input = True

    print('Sum:', sum(number_list))

错误如下:

如果浮动(用户输入):

ValueError: 无法将字符串转换为浮点数:'stop'(第 10 行)。

我正在输入 as

1.0

2.0

3.0

停止

【问题讨论】:

  • 有几件事:您不需要与布尔值进行比较,这就是重点。只需使用if not stop_input 而不是if stop_input == False。此外,您的错误来自您的输入:如果您尝试输入字母,则将您的输入转换为浮点数(十进制数)的函数将失败。所以你要么捕获异常,要么改变你的逻辑。
  • float("Not a float literal") 将引发异常,而不是返回 False。你必须抓住它。

标签: python python-3.x


【解决方案1】:

float('stop') 将引发一个异常,您必须使用try: ... except ...: ... 块来catch

此外,当user_input0.0(或0)时,float(user_input) 的计算结果为False,因此该数字永远不会添加到列表中。

你可以改变:

if float(user_input):
    number_list.append(user_input)

elif user_input == 'stop':
    stop_input = True

到:

try:
    number_list.append(float(user_input))
except ValueError:
    if user_input == 'stop':
        stop_input = True

修复你的程序。

【讨论】:

  • 只想补充一点,布尔类型是int类(since Python 2.3)的子类。这就是为什么 float(user_input) 在 if 语句中的值为 0 时计算为 False
猜你喜欢
  • 2020-12-11
  • 2021-11-19
  • 1970-01-01
  • 2021-07-21
  • 2019-12-18
  • 2018-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多