Уведомления

Группа в Telegram: @pythonsu

#1 Май 21, 2023 14:22:25

dmitry1959
Зарегистрирован: 2023-05-01
Сообщения: 12
Репутация: +  0  -
Профиль   Отправить e-mail  

числовая угадайка

Вот код , где нужно угадать рандомное число от 1 до 100:

 from random import*
n = randint(1, 100)
print(n)
print('Добро пожаловать в числовую угадайку')
def is_valid(num):
    return num.isdigit() and 1 <= int(num) <= 100
m = input('Введите число от 1 до 100:')
while is_valid(m)==False:
    if is_valid(m)==False:
        m = input('А может быть все-таки введем целое число от 1 до 100:')
    else:
        m = int(m)
if m < n:
    print('Ваше число меньше загаданного, попробуйте еще разок')
elif m > n:
    print('Ваше число больше загаданного, попробуйте еще разок')
else:
    print('Вы угадали, поздравляем!')
Не могу понять, почему в цикле while после else - m = int(m), m остается строкой.
Если это выражение вывести из-под цикла , то ошибки не возникает.
Помогите , пожалуйста, разобраться.

Офлайн

#2 Май 21, 2023 23:55:34

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

числовая угадайка

dmitry1959
Не могу понять, почему в цикле while после else - m = int(m), m остается строкой.
Если ты сразу правильно ввёл, то как она зайдёт в цикл?
Ты должен не заходить в цикл или зайти и выйти из цикла, если она правильная, и после цикла привести её к целочисленному типу.



Отредактировано py.user.next (Май 21, 2023 23:56:18)

Офлайн

#3 Май 23, 2023 01:31:57

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1348
Репутация: +  118  -
Профиль   Отправить e-mail  

числовая угадайка

  
import random
 
# получаем случайное число
def get_random_num(num_range):
    return random.randint(*num_range)
 
# получаем число от пользователя
def get_user_num(num_range):
    while True:
        data = input('>')
        if input_is_valid(data, num_range):
            return int(data)
 
# проверяем корректность данных
def input_is_valid(input_data, num_range):
    if not input_data.isdigit():
        display_error_not_digit()
    elif int(input_data) > num_range[1] or int(input_data) < num_range[0]:
        display_error_out_of_range()
    else:
        return True
 
# сравниваем два числа
def compare(user_num, rand_num):
    if user_num > rand_num:
        return 1
    elif user_num < rand_num:
        return -1
    else:
        return 0
 
# выводим сообщение на экран
def dispalay_message(result):
    messages = {
        1: 'ваше число больше',
        -1: 'ваше число меньше',
        0: 'правильно'
    }
    print(messages[result])
 
def display_error_not_digit():
    print('в строке должны быть только цифры')
 
def display_error_out_of_range():
    print('число вне диапазона')
 
def display_start_message(num_range):
    print(f'загадано число от {num_range[0]} до {num_range[1]} включительно, как думаете какое')
 
def game_continue():
    while True:
        data = input('чтобы сыграть еще раз нажимте enter\nдля выхода "quit"\n>')
        if data == '':
            return True
        elif data == 'quit':
            return False
 
def game(num_range):
    rand_num = get_random_num(num_range)
    display_start_message(num_range)
    while True:
        user_num = get_user_num(num_range)
        result = compare(user_num, rand_num)
        dispalay_message(result)
        if user_num == rand_num:
            break
 
def main():
    for i in range(1, 21):
        game((0, i))
        if not game_continue():
            return 
 
if __name__ == '__main__':
    main()

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version