在另一个定义中调用定义时不会运行



我有一款游戏,要求用户猜1-100之间的一个数字,游戏会一直进行下去,当猜到最后时,它会询问用户是否想再玩一次。但是,当用户说"是"时,游戏不会再运行。

我已经按照这个顺序定义了游戏和结局,但是当用户说"是"时,游戏将不会再次播放,即使我已经这样做了,所以游戏正在被调用。

代码:

import random
import time
# Generate a random number between 1 and 100
secret_number = random.randint(1, 100)
# Set the maximum number of guesses
max_guesses = 5
# Initialize the number of guesses the player has made
guesses_made = 0


# Start the game loop
def game():

global secret_number
global max_guesses
global guesses_made

while guesses_made < max_guesses:
# Get the player's guess
guess = int(input("Enter your guess: "))
# Increment the number of guesses the player has made
guesses_made += 1
# Check if the player's guess is correct
if guess == secret_number:
print("You guessed the correct number! You win!")
break
# Check if the player's guess is too high
elif guess > secret_number:
print("Your guess is too high. Try again.")
# The player's guess must be too low
elif guess < secret_number:
print("Your guess is too low. Try again.")
# The player has run out of guesses
if guess != secret_number and guesses_made == max_guesses:
print("You have run out of guesses. The secret number was", secret_number)


def end():

print("Play again?")

user = input()

if user.casefold() == "yes":
print("okay!")
game()

elif user.casefold() == "no":
print("okay, goodbye!")

else:
print("That's not an option. Please say yes or no.")
time.sleep(1)
print ("Do you want to play again?")
user = input()

if user == "yes":
print("okay!")

print()
game()
elif user == "no":
print("okay, goodbye!")



# Explain the game to player
print ("Hello player, let's play a guessing game.")
time.sleep(1.5)
print ("I will pick a number between 1-100 and you have to try to guess it.")
time.sleep(1.5)
print()
print ("I will give you five chances to guess the number. If you guess correctly I will give you a treat. If at the end you still cannot guess the number then I will tell you and we will play again.")
time.sleep(2)
print()
print ("I hope you are ready!")
time.sleep(.5)
print ("Ready...")
time.sleep(.25)
print ("Set...")
time.sleep(.25)
print ("GUESS!!!")
print()
game()
end()

我试着重新定义游戏,但它只是玩游戏没有运行的开始。我也试过使其全局,但随后由于()的错误。

不是它不起作用,而是你已经猜不出来了。您需要在每次调用game()时重新初始化猜测次数和随机数。

。与其使用全局变量,不如将它们设置为game()函数的局部变量,并在其中初始化它们。它们不应该是全局的,因为它们在game()函数之外没有用处。

问题出在全局变量guesses_made

有两种情况可以让你有一个更清晰的画面:

场景1:用户用完了所有的猜测。

变量guesses_made已经是5,并且一旦您再次运行函数game(),它将转到语句if guess != secret_number and guesses_made == max_guesses。因此游戏将自动停止。

场景2:用户永远不会用完所有的猜测。

让变量guesses_made = 2。(只是一个随机数字,幸运的玩家!)然后当你选择"是"时;再玩一次,你将能够再玩一次,但有3次机会。因为您没有将变量重置为0

还有一个边注:

因为你没有循环,它最多只能让玩家玩两次。

最新更新