Могу ли я вызвать свою функцию в цикле while? - PullRequest
0 голосов
/ 14 мая 2019

Генерация случайного числа от 1 до 9 (включая 1 и 9).Попросите пользователя угадать число, а затем скажите ему, угадали ли они слишком низко, слишком высоко или совершенно верно.(_Совет: не забывайте использовать уроки пользовательского ввода из самого первого упражнения

Дополнительно:

Продолжайте игру до тех пор, пока пользователь не наберет «выход». Следите за тем, сколько угадывалось пользователеми когда игра закончится, распечатайте это.

Я на самом деле не могу понять, почему моя программа не печатает распечатки в предложениях if. Я неправильно назвал первые функции в цикле while?

import random

def cpu_guess():
    cpu_number=random.randint(1,9)
    return cpu_number
print(cpu_guess())

def player_guess():
    player_number=input('Digit a number between 1 and 9\n')
    return player_number

def game():
    r_guesses=0
    w_guesses=0
    while player_guess()!='exit':
        if int(player_guess())>int(cpu_guess()):
            print('Higher value than generated')
            w_guesses+=1
        elif int(player_guess())<int(cpu_guess()):
            print('Lower value than generated')
        else:
            print('You have entered the right value')
            r_guesses+=1
    return r_guesses,w_guesses
print(game())

Я не уверен, что смогу сделать это, пока player_guess ()! = 'Exit': нужно ли мне создавать переменную, подобную этому предположению = player_guess (), и писать при предположении! = 'Выход'

Ответы [ 2 ]

2 голосов
/ 14 мая 2019

Вы продолжаете изменять значения в середине цикла;это хаос, а не логическая игра.

# Get a player guess and see whether it's "exit"
while player_guess()!='exit':

    # Get a new guess; also make a new target number.
    if int(player_guess())>int(cpu_guess()):
        print('Higher value than generated')
        w_guesses+=1

    # Get a new guess; also make a new target number.
    elif int(player_guess())<int(cpu_guess()):
        print('Lower value than generated')
    else:
        print('You have entered the right value')
        r_guesses+=1

Вместо этого вам нужно сделать одно целевое число, которое пытается угадать игрок. не меняйте его во время игры.В рамках цикла попросите игрока угадать один раз : делайте , а не , запрашивайте дополнительную информацию, пока вы правильно не оценили это предположение и не ответили.

# Get a player guess and see whether it's "exit"
target = int(cpu_guess())
player_input = player_guess()
while player_input != 'exit':

    guessed_num = int(player_input)
    if guessed_num > target:
        print('Higher value than generated')
        w_guesses+=1

    elif ...

Посмотрите, какэто работает?Не возвращайтесь к своей процедуре ввода, пока не закончите с текущей догадкой.Не возвращайтесь к процедуре генерации цели, пока игрок не угадает предыдущий номер.

2 голосов
/ 14 мая 2019

Вы звоните player_guess снова и снова, и каждый раз, когда вы звоните, он останавливается и ждет ввода.Он застревает в ожидании ввода, возможно, три раза за цикл.Вызовите функцию один раз и сохраните результат в переменной:

def game():
    r_guesses = 0
    w_guesses = 0
    guess = None # Save it here

    while guess != 'exit':
        guess = player_guess()
        if guess > int(cpu_guess()):
            print('Higher value than generated')
            w_guesses+=1
        elif guess < int(cpu_guess()):
            print('Lower value than generated')
        else:
            print('You have entered the right value')
            r_guesses += 1
    return r_guesses, w_guesses
print(game())

А затем, как отмечено в комментариях, сделайте что-то подобное для догадки компьютера.Очередь компьютеров постоянно меняется, поэтому вы можете пройти все проверки и получить неожиданные результаты по этой причине.Подумайте о том, что происходит при вызове этих функций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...