Игра в угадывание чисел, в которую играет компьютер

#python-3.x

Вопрос:

Я создал эту игру. Пользователь дает число от 1 до 100. Компьютер пытается угадать это. Пользователь дает подсказку компьютеру, чтобы он опустился ниже или поднялся выше. Я открыт для любых отзывов.

Заранее спасибо.

 import os
import random
os.system('clear')

user = int(input("Please enter a number between 1-100: "))
print("Your Number is: "   str(user))

comp_list = list(range(1,101))
comp_selection = random.choice(comp_list)
count = 0
def game(num, a = 1, b = 100):
    global count
    print("I have chosen "   str(num)   "nShould I go Higher or Lower or Correct? ")
    user = input("Your Selection: ")
    if user == "L":
        count = count   1
        low_game(a, num)
    elif user == "H":
        count = count   1
        high_game(num, b)
    else:
        print("I have guessed correctly in "   str(count)   " tries")


def low_game(old_low, new_High):
   
    x = new_High
    new_comp_list = list(range(old_low, x))
    new_comp_selection = random.choice(new_comp_list)   
    game(new_comp_selection, old_low, x)

def high_game(new_low, old_high):

    x = new_low   1
    new_comp_list = list(range(x, old_high))
    new_comp_selection = random.choice(new_comp_list)   
    game(new_comp_selection,x, old_high)

game(comp_selection)
 

Комментарии:

1. Ты никогда не меняешь game_list свое . Просто добавьте print game и посмотрите. Кроме того, вызов функций, как если бы они были «готовыми», которые никогда не вернутся обратно в точку вызова, — это не способ кодирования этого. Просто отследите значения высокого и низкого диапазона и используйте random.randint для выбора и использования цикл while, пока не будет выбрано правильное значение. user_answer.upper() также не имеет никакого эффекта. Он возвращает значение в верхнем регистре, но не изменяет user_answer его . Научитесь использовать отладчик для пошагового просмотра кода и наблюдения за потоком кода и данных.

Ответ №1:

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

 
import sys, random

wins = 0
loss = 0

while 1:
    user = input('Please enter a number between 1-100: (return or x = quit) > ' )
    if user in [ '', 'x' ]:
        break
    elif user.isnumeric():
        user = int( user )
        if user < 1 or user > 100:
            sys.stdout.write( 'Number must be between 1 and 100!!n' )
        else:
            low, high, count = 1, 100, 0
            while 1:
                p = random.randint( low, high )
                count  = 1
                while 1:
                    answer = input( f'Is your number {p}? Y/N > ').upper()
                    if answer in [ 'Y','N' ]:
                        break
                    else:
                        sys.stderr.write( 'Answer must be Y or Nn' )
                if answer == 'N':
                    if p != user:
                        if input( f'Is my number (H)igher or (L)ower? > ').upper() == 'H':
                            if user < p:
                                high = p - 1
                            else:
                                sys.stderr.write( f'Wrong!! Your number was lower. You lossn' )
                                loss =  1
                                break
                        else:
                            if user > p:
                                low = p   1
                            else:
                                sys.stderr.write( f'Wrong!! Your number higher. You lossn' )
                                loss =  1
                                break
                    else:
                        sys.stderr.write( f'Cheat!! Your number is {user}!! You lossn')
                        loss =  1
                        break
                else:
                    if user == p:
                        sys.stdout.write( f'I guessed Correctly in {count} guessesn' )
                        wins  = 1
                    else:
                        sys.stderr.write( f'Cheat!! This is not your number. You lossn' )
                        loss =  1
                    break

print( f'Computer won = {wins}  :  You lost = {loss}' )
 

Счастливого кодирования.

Ответ №2:

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

 from random import randint  

# Function to request input and verify input type is valid
def getInput(prompt, respType= None):
    while True:
        resp = input(prompt)
        if respType == str or respType == None:
            break
        else:
            try:
                resp = respType(resp)
                break
            except ValueError:
                print('Invalid input, please try again')
    return resp  

def GuessingGame():
    MAX_GUESSES = 10  # Arbritray Fixed Number of Guesses
    # The Game Preamble
    print('Welcome to the GamenIn this game you will be asked to provide a number between 1 and 100 inclusive')
    print('The Computer will attempt to guess your number in ten or fewer guesses, for each guess you will respond by telling the computer: ')
    print('either:n  High - indicating the computer should guess highern  Low - indicating the computer should guess lower, or')
    print('  Yes - indicating the computer guessed correctly.')
    
    # The Game
    resp = getInput('Would You Like To Play?, Respond Yes/No ')
    while True: 
        secret_number = None
        if resp.lower()[0] == 'n':
            return   
        guess_count = 0
        guess_range = [0, 100]
        secret_number = getInput('Enter an Integer between 1 and 100 inclusive', respType= int)
        print(f'Your secret number is {secret_number}')
        while guess_count <= MAX_GUESSES:
            guess = randint(guess_range[0], guess_range[1] 1)
            guess_count  = 1
            resp =getInput(f'The computer Guesses {guess} is this correct? (High?Low/Yes) ')
            if resp.lower()[0] == 'y':
                break
            else:
                if resp.lower()[0] == 'l':
                    guess_range[1] = guess - 1
                else:
                    guess_range[0] = guess   1
                    
        if  guess == secret_number:
            print (f'The Computer has Won by Guessing your secret number {secret_number}')
        else:
            print(f'The Computer failed to guess your secret number {secret_number}')
        resp = getInput('Would You Like To Play Again?, Respond Yes/No ')
            
 

Комментарии:

1. Пожалуйста, будьте любезны признать работу, представленную мной или @Derek, поставив галочку на левой стороне поста.