-9

我得到一个值错误,即使我尝试使用代码,它也不起作用!

我怎样才能正确?- 我正在使用 Python 3.3.2!

这是代码:代码

如您所见,该程序会询问您可以步行多少英里,并根据您输入的内容给您回复。

这是文本格式的代码:

print("Welcome to Healthometer, powered by Python...")
miles = input("How many miles can you walk?: ")
if float(miles) <= 0:
    print("Who do you think you are?!! Go and walk 1000 miles now!")
elif float(miles) >= 10:
    print("You are very healthy! Keep it up!")
elif float(miles) > 0 and miles < 10:
    print("Good. Try doing 10 miles")
else:
    print("Please type in a number!")
    miles = float(input("How many miles can you walk?: "))
    if miles <= 0:
        print("Who do you think you are?!! Go and walk 1000 miles now!")
    elif miles >= 10:
        print("You are very healthy! Keep it up!")
    elif miles > 0 and miles < 10:
        print("Good. Try doing 10 miles")
4

4 回答 4

9

您需要考虑到用户可能没有填写正确的值:

try:
    miles = float(input("How many miles can you walk? "))
except ValueError:
    print("That is not a valid number of miles")

Atry/except处理尝试将输入转换为浮点数ValueError时可能发生的情况。float

于 2013-11-01T22:47:31.180 回答
3

问题正是 Traceback 日志所说的:Could not convert string to float

  • 如果你有一个只有数字的字符串,python 足够聪明,可以做你正在尝试的事情并将字符串转换为浮点数。
  • 如果您有一个包含非数字字符的字符串,则转换将失败并给出您遇到的错误。

大多数人解决这个问题的方法是使用 a try/except(参见此处)或使用isdigit()函数(参见此处)。

尝试/排除

try:
    miles = float(input("How many miles can you walk?: "))
except:
    print("Please type in a number!")

是数字()

miles = input("How many miles can you walk?: ")
if not miles.isdigit():
    print("Please type a number!")

请注意,如果字符串中有小数点,后者仍然会返回 false

编辑

好的,我暂时无法回复您,所以我会发布答案以防万一。

while True:
    try:
        miles = float(input("How many miles can you walk?: "))
        break
    except:
        print("Please type in a number!")

#All of the ifs and stuff

代码非常简单:

  • 它将继续尝试将输入转换为浮点数,如果失败则循环回到开头。
  • 当它最终成功时,它会从循环中中断并转到你放在下面的代码。
于 2013-11-01T23:11:17.693 回答
1

追溯意味着它在锡上所说的。

>>> float('22')
22.0
>>> float('a lot')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: could not convert string to float: 'a lot'

float可以将看起来像有效小数的字符串转换为floats。它不能转换任意字母数字字符串,特别是包括'How am I supposed to know?'.

如果要处理任意用户输入,则必须使用try/except块捕获此异常。

于 2013-11-01T22:47:46.013 回答
1

这里的要点是它不能转换字母数字字符串,在某些情况下,如果你正在抓取数据或类似 $400 的东西,$ 符号是字母数字然后它考虑一个字符串,如果你尝试转换为浮动它会显示一个错误,我给你这个例子显示它只将数字转换为浮点数,在这种情况下,我解决了这样的问题 data ='$400', price = data[1:], then if , if (float(price) < 300): 并且它有效。

于 2020-02-10T01:24:48.233 回答