[英]How do I stop redefining a variable after every loop of a function?
我對 Python 比較陌生,但我嘗試制作隨機數生成器猜謎游戲,您只需猜出數字,如果正確,您就贏了,如果您輸了,嘗試計數器會減少,如下所示:
import random
a = random.randint (1, 20)
c = input('Select difficulty (1, 2, 3, 4) : ')
d = int(c)
def main():
if d == 1:
tries = e = 15
elif d == 2:
tries = e = 10
elif d == 3:
tries = e = 5
elif d == 4:
tries = e = 3
else:
tries = e = 1
for tries in range(tries, -1, -1):
tries -= 1
b = int(input('Pick a number from 1-20 : '))
if a == b:
print('Congratulations!')
print('# of tries : ', e - tries)
exit()
elif tries == 0:
print('No more attempts left, game over')
exit()
else:
print('Incorrect')
print('Attempts left : ', tries)
restart = input("Play again? (y/n)")
if restart == "y":
main()
else:
exit()
main()
所以這個程序沒有意義,除非你在第一次嘗試時猜對了,因為嘗試計數器總是保持不變。 我認為這是因為每次返回 main() 時,它都會將“嘗試”重新定義為 15、10 等。問題是如果我將“if d == 1”部分放在 def main() 之前,那么它會說在分配之前引用了“嘗試”。 可能有一個我在這里看不到的簡單解決方案,而且它讓我無法理解,所以希望我的要求是有道理的。 對與問題無關的代碼的反饋也表示贊賞。
謝謝。
其他答案可以正常工作,但作為旁注,您在main()
main()
,它會創建一個遞歸 function。 除非你有特殊的理由這樣做,否則應該避免。 之前的每一次游戲嘗試都將在 memory 中進行,直到用戶選擇不重試,如果您選擇 go 足夠遠,您將遇到RecursionError
。 嘗試將整個程序包裝在一個while
循環中,如下所示:
import random
def main():
retry = True
while retry:
answer = random.randint(1, 20)
tries = 5 # Insert your own logic for num of tries
while tries > 0:
guess = int(input('Pick a number between 1 and 20: '))
if guess == answer:
print('Correct!')
break
else:
print('Incorrect')
tries -= 1
retry = input("Play again? (y/n)") == 'y'
main()
為什么你要這樣做讓我有點困惑tries = e = num
一種更簡潔的方法是在嘗試次數尚未用完時運行一個 while 循環。 您可以根據所選難度將該嘗試次數設置為變量
一種方法可能是這樣的:
import random
# set number of tries based on difficulty chosen first, then all this
number = random.randint(1,50)
number_of_guesses = 0
while number_of_guesses < tries:
guess = input("Take a guess ")
guess = int(guess)
number_of_guesses = number_of_guesses + 1;
guesses_left = tries - number_of_guesses;
if guess < number:
print("Your guess is too low! You have " + str(guesses_left) + " guesses left")
if guess > number:
print("Your guess is too high! You have " + str(guesses_left) + " guesses left")
if guess == number:
break
if guess == number:
print("Good job! You guessed the number in " + str(number_of_guesses) + " tries :)")
if guess != number:
print("Sorry. The number I was thinking of was " + str(number) + " :)")
我將 for 循環更改為 while 循環,刪除了“tries = e = 15”並移動了“tries -= 1”
import random
a = random.randint (1, 20)
c = input('Select difficulty (1, 2, 3, 4) : ')
d = int(c)
def main():
if d == 1:
tries = 15
elif d == 2:
tries = 10
elif d == 3:
tries = 5
elif d == 4:
tries = 3
else:
tries = 1
while tries > 0:
b = int(input('Pick a number from 1-20 : '))
if a == b:
print('Congratulations!')
print('# of tries : ', tries)
exit()
else:
print('Incorrect')
tries -= 1
print('Attempts left : ', tries)
restart = input("Play again? (y/n)")
if restart == "y":
main()
else:
exit()
main()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.