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
Другие вопросы по тегам