簡體   English   中英

如何在 function 的每個循環之后停止重新定義變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM