Python Guessing Game Правильный ответ печатается, даже когда игрок получает правильный ответ
Поэтому я недавно начал программировать на Python, и у меня есть одна проблема с этим кодом. Когда игрок получает неправильный ответ после использования всех своих жизней, он должен напечатать ответ, который он делает, но только при первом воспроизведении слоя, если они играют снова, ему не сообщают правильный ответ, если он получился неправильным. Это также происходит, когда игрок получает правильный ответ. Кроме того, номер, который выбирает компьютер, остается неизменным при использовании функции воспроизведения снова. Пожалуйста, попытайтесь помочь мне, но имейте в виду, что мое понимание может быть очень ограничено в некоторых аспектах Python. Я включил много комментариев, чтобы помочь другим понять, что происходит. Я включил свой код и то, что я получаю в оболочке.
Код:
#imports required modules
import random
from time import sleep
#correct number variable created
num = 0
#generates number at random
comp_num = random.randint(1,10)
print('I\'m thinking of a number guess what it is...\n')
#main game code
def main():
#lives created
lives = 3
#correct number variable reset
num = 0
while lives >= 1:
#player guesses
guess = int(input('Guess: '))
if comp_num == guess:
#if correct says well done
input('\nWell Done! You guessed Correctly!\n')
#player doesn't get told what the number is if there right
num = num +1
break
elif comp_num >= guess:
#if guess is too low tells player
#one live taken for incorrect guess
lives = lives -1
print('\nToo low!\n')
#player is told how many lives they have left
print('You guessed incorrectly. You have',lives,'live(s) remaining.\n')
elif comp_num <= guess:
#if guess is too high tells player
#one live taken for incorrect guess
lives = lives -1
print('\nToo high!\n')
#player is told how many lives they have left
print('You guessed incorrectly. You have',lives,'live(s) remaining.\n')
def end():
#asks player if they want to play again
play_again = input('Would you like to play again?[Y/N] ')
while play_again.lower() == 'y':
#if they do game resets and plays again
if play_again.lower() == 'y':
comp_num = random.randint(1,10)
print('\nI\'m thinking of a number guess what it is...\n')
main()
play_again = input('Would you like to play again?[Y/N] ')
if play_again.lower() == 'n':
break
if play_again.lower() == 'n':
#if they don't game ends
input('\nOk, Press enter to exit')
exit()
main()
if num != 1:
#if player guesses incorrectly they get told the correct awnser
print('The number I was thinking of was...',comp_num,'!\n')
end()
РАКУШКА:
I'm thinking of a number guess what it is...
Guess: 5
Well Done! You guessed Correctly!
The number I was thinking of was... 5 !
Would you like to play again?[Y/N] y
I'm thinking of a number guess what it is...
Guess: 5
Well Done! You guessed Correctly!
Would you like to play again?[Y/N] y
I'm thinking of a number guess what it is...
Guess: 5
Well Done! You guessed Correctly!
Would you like to play again?[Y/N] y
I'm thinking of a number guess what it is...
Guess: 5
Well Done! You guessed Correctly!
3 ответа
Проблема с вашей функцией в том, что у вас есть глобальная переменная с именем num
, но твой main
Функция также имеет локальную переменную с именем num
, num += 1
линия внутри main
изменяет только локальную переменную. Но if num != 1
в конце проверяет глобальную переменную.
Чтобы это исправить, добавьте глобальный оператор:
def main():
global num
# the rest of your code
Почему это работает?
В Python каждый раз, когда вы пишете оператор присваивания (например, num = 0
или же num += 1
) в функции, которая создает локальную переменную - если вы явно не сказали, с global
заявление.* Итак, добавив, что global num
означает, что сейчас нет локальной переменной num
, так num += 1
вместо этого влияет на глобальный.
Это объясняется более подробно в разделе учебника по определению функций.
* Или nonlocal
заявление, но вы не хотите узнать об этом еще.
Тем не менее, есть лучший способ исправить это. Вместо использования глобальной переменной вы можете return
значение в локальной переменной. Как это:
def main():
# your existing code
return num
# your other functions
score = main()
if score != 1:
#if player guesses incorrectly they get told the correct awnser
print('The number I was thinking of was...',comp_num,'!\n')
Итак, мой друг посмотрел на мой код, и мы решили его вместе. Таким образом, мы зафиксировали число, которое осталось прежним, и получили правильный ответ.
#imports required modules
import random
#correct number variable created
num = 0
#generates number at random
comp_num = random.randint(1,10)
print('I\'m thinking of a number guess what it is...\n')
#main game code
def main():
#generates number at random
comp_num = random.randint(1,10)
#set num as a global variable
global num
#lives created
lives = 3
while lives >= 1:
#player guesses
guess = int(input('Guess: '))
if comp_num == guess:
#if correct says well done
print('\nWell Done! You guessed Correctly!\n')
break
elif comp_num >= guess:
#if guess is too low tells player
#one live taken for incorrect guess
lives = lives -1
print('\nToo low!\n')
#player is told how many lives they have left
print('You guessed incorrectly. You have',lives,'live(s) remaining.\n')
if lives == 0:
#if player guesses incorrectly they get told the correct awnser
print('The number I was thinking of was...',comp_num,'!\n')
elif comp_num <= guess:
#if guess is too high tells player
#one live taken for incorrect guess
lives = lives -1
print('\nToo high!\n')
#player is told how many lives they have left
print('You guessed incorrectly. You have',lives,'live(s) remaining.\n')
if lives == 0:
#if player guesses incorrectly they get told the correct awnser
print('The number I was thinking of was...',comp_num,'!\n')
def end():
#asks player if they want to play again
play_again = input('Would you like to play again?[Y/N] ')
while play_again.lower() == 'y':
#if they do game resets and plays again
if play_again.lower() == 'y':
comp_num = random.randint(1,10)
print('\nI\'m thinking of a number guess what it is...\n')
main()
play_again = input('Would you like to play again?[Y/N] ')
if play_again.lower() == 'n':
break
if play_again.lower() == 'n':
#if they don't game ends
input('Ok, Press enter to exit')
exit()
#calls main section of game
main()
#calls end of game to give option of playing again and reseting game
end()
Я хотел бы поблагодарить всех, кто выручил, так как с этим я все еще не смог бы видеть проблему в своем коде, не говоря уже о том, чтобы исправить это. По этой причине я буду отмечать ответ @abarnert как принятый ответ, поскольку он нашел ошибку.
Вы можете попробовать этот код. Я сделал это как школьное задание
import random
print "Welcome to guess my number!"
number = random.randint(1,100)
count = 1
while count <= 5:
guess = int(raw_input("Guess an integer between 1 and 100 (inclusive): "))
if guess == number:
print "Correct! You won in",count,"guesses!"
break
if guess > number:
print "Lower!"
else:
print "Higher!"
count += 1
if count == 6:
print "Man, you really suck at this game. The number was", number