[英]Number guessing game: How can I accept input that says “guess =” before the number?
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的新功能:)謝謝。
我將您的代碼復制並粘貼到Python 3.5中,..除了需要在while語句后縮進所有內容外,它還可以正常工作。
您是否僅輸入數字:30
...或“猜測= 30”? 因為那不是數字,所以確實會引起問題。 您只需要輸入號碼。 :)
如果要接受“猜測= 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?")
這兩行將使用正則表達式在處理之前去除任何非數字字符的輸入。
這取決於您在該課程中學到的知識,但是添加以下行應可以接受30
和guess = 30
(甚至foo=bar=30
):
...
while guess != answer:
guess = guess.split('=')[-1] # Add this line
try:
guess = float(guess)
...
它僅使用=
作為分隔符來分割輸入,並且僅使用最后一部分( [-1]
)。
所以我重新排序了您的代碼:
我將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:
查找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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.