#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'» после обновления кода, возможно, потребуется некоторая модификация.