Утверждение Python не работает: ограничение ввода пользователем только указанных чисел, но утверждение не работает

#python #python-3.x

#python #python-3.x

Вопрос:

Новичок здесь. Я пытаюсь создать лотерейную игру с помощью ввода 6 чисел. Приведенный ниже код пытается проверить, вводит ли пользователь числа: во-первых, является ли оно целым числом; во-вторых, находится ли оно в указанном диапазоне. Однако проверка int с помощью ValueError работала, но не проверка диапазона чисел с помощью assert.

 def buy_lottery_ticket():
    global credit
    credit -= 5
    while True:
        try:
            entered_numbers = input('Enter your 6 favorites numbers!(1 ~ 20): ')
            entered_numbers_list = entered_numbers.split(',')
            ticket_numbers = {int(n) for n in entered_numbers_list}
            print(ticket_numbers)
            return ticket_numbers
            assert 0 < entered_numbers_list < 21
        except ValueError:
            print("Not an integer! Please enter an integer.")
        except AssertionError:
            print("Please enter an integer between 1 and 20")
        else:
            break
 

Ценю ваш вклад и помощь. Заранее спасибо.

Ответ №1:

Вы пытаетесь проверить наличие 6 чисел и значений диапазона после оператора return. Вот способ сделать то же самое.

Кроме того, в вашем коде у вас есть credit -= 5 . Не уверен, где вы сначала устанавливаете значение. Возможно, вы захотите разобраться в этом. Я закомментировал эту строку кода.

 def buy_lottery_ticket():
    global credit
    #credit -= 5
    while True:
        entered_numbers = input('Enter your 6 favorites numbers!(1 ~ 20): ')
        try:    
            entered_numbers_list = entered_numbers.split(',')
            ticket_numbers = {int(n) for n in entered_numbers_list}
            if len(ticket_numbers) > 6:
                print ('You must enter only 6 unique numbers')
                continue
            elif len(ticket_numbers) < 6:
                print ('You must enter at least 6 unique numbers')
                continue
            if min(ticket_numbers) < 1 or max(ticket_numbers) > 20:
                print ("Please enter an integer between 1 and 20")
                continue
            print(ticket_numbers)
            return ticket_numbers
        except ValueError:
            print("Not an integer! Please enter an integer.")

print (buy_lottery_ticket())
 

Результатом этого будет:

 Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3,8,9
You must enter only 6 unique numbers
Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3
You must enter at least 6 unique numbers
Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3,15
You must enter at least 6 unique numbers
Enter your 6 favorites numbers!(1 ~ 20): 5,7,15,17,3,8
{3, 5, 7, 8, 15, 17}
{3, 5, 7, 8, 15, 17}
 

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

1. Если это решило проблему, не забудьте проголосовать. Спасибо

Ответ №2:

Что-либо после возврата не будет выполнено (если оператор return не выдает ошибку). Кроме того, чтобы получить длину объекта, такого как список, используйте len функцию.

 assert 0 < entered_numbers_list < 21
return ticket_numbers
 

Надеюсь, это помогло.

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

1. Я думаю, что @sybrg случайно забыл вызвать функцию len, на которую он / она ссылался. 🙂

2. Полезно узнать больше о «после возврата не будет выполняться». Однако ошибка «TypeError: ‘<‘ не поддерживается между экземплярами ‘int’ и ‘list'» после обновления кода, возможно, потребуется некоторая модификация.