import random
guess = input("What is your guess?")
answer = random.randint(0,100)
while guess != answer:
try:
guess = float(guess)
if guess > answer:
print ("Your guess is too high!")
elif guess < answer:
print ("Your guess is too low!")
elif guess == answer:
print ("Congratulations!")
break
guess = input("What is your guess?")
continue
except ValueError:
print ("Bad input. Try again!")
guess = input("What is your guess?")
所以我的代码工作,但是当我输入例如:guess = 30时,输入似乎无效...我怎么能这样做才能接受它作为正确的猜测?
这里的python新手:) 感谢。
答案 0 :(得分:0)
我将你的代码复制并粘贴到Python 3.5中,除了需要在while语句之后缩进所有内容之外,它还能正常工作。
您是否仅输入数字:30
......还是“猜= 30”?因为它确实会引起问题,因为它不是数字。 您只需输入数字。 :)
如果你想接受“guess = 30”,那么:
import random
import re ###<-Add this
guess = input("What is your guess?")
answer = random.randint(0,100)
while guess != answer:
try:
guess = re.sub("[^0-9]", "", guess) ###<- Add this
guess = float(guess)
if guess > answer:
print ("Your guess is too high!")
elif guess < answer:
print ("Your guess is too low!")
elif guess == answer:
print ("Congratulations!")
break
guess = input("What is your guess?")
continue
except ValueError:
print ("Bad input. Try again!")
guess = input("What is your guess?")
这两行将使用正则表达式在处理之前去除任何非数字字符的输入。
答案 1 :(得分:0)
这取决于您在该课程中学到了多少,但添加以下行应该允许您同时接受30
和guess = 30
(或甚至foo=bar=30
):
...
while guess != answer:
guess = guess.split('=')[-1] # Add this line
try:
guess = float(guess)
...
它只是使用=
作为分隔符拆分输入,并仅使用最后一部分([-1]
)。
答案 2 :(得分:0)
所以我重新排序了你的代码:
我将try/except
缩小到可能导致ValueError的行,因为这清楚地说明了这个except
块试图处理的特定错误 - 将错误处理放在错误的来源。这也是continue
的一个很好的理由,因为它现在跳过了“太高/太低”的代码,而不是在代码中它什么也没做。
我更改了while
循环条件,因此它显示while True:
使其成为无限循环。在您的代码中,while guess != answer
意味着它会在猜测正确时中断,您实际上使用break
来退出循环,这样会产生误导。使用while guess != answer
并且break
没有任何地方是明智的,但如果你必须使用break
作为任务的一部分,那么我的代码有一些'理由'来使用它(打破)无限循环)。
我只将guess = input(...)
代码移到循环中,因为它不需要在错误处理的顶部或内部复制。 (想象一下,如果你不得不改变文字,3个地方比1个地方更烦人。)
有很多方法可以处理guess = 30
输入。您可以通过查找if "guess = " in guess:
来实现这一点,只有这样,然后如果该文本匹配,请使用guess = guess.replace("guess = ", "")
将其替换掉,只留下数字。或者使用正则表达式,因为另一个答案用于删除文本和留下数字,或使用字符串split()
,这是另一个答案。我在这里的答案有filter()
,它使用测试过滤一些东西 - 在这种情况下,它测试某些东西是否为数字,并且只允许数字通过,因此它会丢弃所有文本。与正则表达式相同,实际上只是一种不同的方法。
代码:
import random
answer = random.randint(0,100)
while True:
guess = input("What is your guess?")
# filters out only the numbers
# and makes them into a string, e.g.
# 1) "guess = 30"
# 2) [3,0]
# 3) "30"
guess = ''.join(filter(str.isdigit, guess))
try:
guess = float(guess)
except ValueError:
print ("Bad input. Try again!")
continue
if guess > answer:
print ("Your guess is too high!")
elif guess < answer:
print ("Your guess is too low!")
else:
print ("Congratulations!")
break