Как я могу сделать предельные числа на входе и сделать их только цифры, я не хочу символы - PullRequest
1 голос
/ 26 апреля 2020

У меня есть небольшая игра, в которой вы можете выбрать случайную игру, но у меня есть 2 проблемы:

1 - я хочу подтвердить, что вводимые пользователем значения находятся в диапазоне от 0 до 20.

2- Я хочу разрешить пользователю играть снова (это может быть, задав его или напрямую)

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

Вот код:

import random
rn = int(random.randint(0, 20))
gn = int(input("write a number from 0-20: "))


while True:
  if rn < gn:
    print("You were too close, try again")
    break
  elif rn == gn:
    print("Oh, I lost, you win, good game (GG)")
    break
  if rn > gn:
    print("You are not close, try again")
    break

while False:
  rn = int(random.randint(0, 20))
gn = int(input("write a number from 0-20: "))

Ответы [ 3 ]

1 голос
/ 26 апреля 2020

Чтобы проверить входное значение, попробуйте это:

def ask_for_guess():
    # the function will ask infinitely for input number unless it's valid number in between 0-20 
    while True:
        guess_input = input("write a number from 0-20: ")
        try:
            gn = int(guess_input) 
            assert 0 <= gn <= 20, "Number must be between 0-20"
            return gn
        except ValueError as ex:
            # ValueError will be thrown if the conversion to int will fail
            print(f"{guess_input} is not a number, please try again")
        except AssertionError as ex:
            # AssertionError will be thrown by the test in the try block if the number is not in range
            print(str(ex))

Чтобы проверить, хочет ли пользователь снова играть, попробуйте это:

play_again = True
while play_again: 
    rn = int(random.randint(0, 20))
    gn = ask_for_guess()
    if rn < gn:
        print("You were too close, try again")
    elif rn == gn:
        print("Oh, I lost, you win, good game (GG)")
    else:
        print("You are not close, try again")
    # if the user doesn't want to play again, the play_again variable will be False and the code won't enter for another iteration inside the while loop
    play_again = input("Do you want to play again? [y/n]") == "y"
0 голосов
/ 26 апреля 2020

Я действительно ценю это, вы решаете это, я не знаю, как вас поблагодарить, большое спасибо

0 голосов
/ 26 апреля 2020

Я сделал код максимально модульным и очень простым.

def checkInput(inp):
    try:
        n = int(inp)
    except:
        return (False,"Please enter an integer between 0 to 20 and nothing else")
    if n >=0 and n<=20:
        return (True,n)
    else:
        return (False, "Your number is not in the expected range of 0 to 20")

def gameInput():
    import random
    rn = int(random.randint(0, 20))
    gn = input("write a number from 0-20: ")

    while(not checkInput(gn)[0]):
        print(checkInput(gn)[1])
        gn = input("write a number from 0-20: ")
    gn = checkInput(gn)[1]
    return gn,rn

def gameCheck():
    gn,rn = gameInput()
    # print(gn,rn)
    if rn < gn:
        print("You were too close, try again")
    elif rn == gn:
        print("Oh, I lost, you win, good game (GG)")
    elif rn > gn:
        print("You are not close, try again")


def game():
    gameCheck()
    playAgain = input("Do you want to play again? Enter Y for yes and anything else for no")
    while playAgain.lower() =="y":
        gameCheck()
        playAgain = input("Do you want to play again? Enter Y for yes and anything else for no")

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