#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
свое . Просто добавьте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, поставив галочку на левой стороне поста.