Я пытаюсь создать функцию, которая оценивает ввод пользователя по случайно сгенерированной последовательности «победитель». Код будет работать нормально до тех пор, пока не будет введен пользовательский ввод, где он остановится. Редактор, который я использую, тоже немного странный, поэтому отступы здесь будут отключены, однако я обещаю, что это НЕ проблема. Извини за это. Спасибо
from __future__ import print_function
import random
import sys
minimum, maximum = 1,69
def playPowerBall():
instruction = "Please pick your {} number, between 1 and 69:"
tickets = []
for s in ('1st', '2nd', '3rd', '4th', '5th', '6th'):
ticket = int(input(instruction.format(s)))
tickets.append(ticket)
range = (1,69)
if any(ticket < minimum or ticket > maximum for ticket in tickets):
print('One or more of the inputted numbers is not between 1-69. Please restart the function and try again.')
sys.exit()
winners = []
for s in ('1st', '2nd', '3rd', '4th', '5th', '6th'):
winner = random.sample(range(0,69), 6)
winners.append(winner)
def matches(tickets, winners):
score = 0
for number in tickets:
if number in winners:
score += 1
else:
score += 0
return score
if 3 <= score:
print('You picked at least three winning numbers, please claim your cash prize.')
else:
print('You do not have a winning combination. Would you like to play Powerball again? (Y/N)')
response = str(input('Y/N:'))
if response == 'Y':
sys.restart()
else:
sys.exit()
Во-первых, range = (1,69) - это плохо, потому что вы создаете новую переменную, которая перезаписывает функцию диапазона Pythons. Если я вызываю ваш playPowerBall (), он вылетает из-за этого. Во-вторых, как только пользователь вводит свои числа, вы генерируете своих победителей, но ничего не делаете с ними. Вы их не распечатываете и не возвращаете, поэтому не видите результатов.
После ввода 6 чисел в части билета я получаю файл «main.py», строка 20 в playPowerBall, в нем что-то говорится о том, что кортеж должен быть целым числом или должен быть разрезан.
Как я уже сказал, вы перезаписываете функцию диапазона Pythons. Я не знаю, зачем вы создаете эту переменную, поскольку вы, похоже, ее не используете. Просто удалите строку с диапазоном = (1,69)






Вы перезаписываете встроенную функцию range с помощью оператора range = (1, 69), а затем выполняете winner = random.sample(range(0,69), 6), поэтому вы пытаетесь вызвать кортеж (1, 69). Если убрать такую инструкцию range = (0, 69), ошибка исчезнет. В вашем коде есть другие проблемы, вы должны вызвать matches в конце playPowerBall, вам нужно удалить оператор return из метода matches, а sys не имеет функции restart, но вы можете рекурсивно вызывать playPowerBall:
from __future__ import print_function
import random
import sys
minimum, maximum = 1,69
def playPowerBall():
instruction = "Please pick your {} number, between 1 and 69:"
tickets = []
for s in ('1st', '2nd', '3rd', '4th', '5th', '6th'):
ticket = int(input(instruction.format(s)))
tickets.append(ticket)
if any(ticket < minimum or ticket > maximum for ticket in tickets):
print('One or more of the inputted numbers is not between 1-69. Please restart the function and try again.')
sys.exit()
winners = []
for s in ('1st', '2nd', '3rd', '4th', '5th', '6th'):
winner = random.sample(range(0,69), 6)
winners.append(winner)
matches(tickets, winners)
def matches(tickets, winners):
score = 0
for number in tickets:
if number in winners:
score += 1
else:
score += 0
if 3 <= score:
print('You picked at least three winning numbers, please claim your cash prize.')
else:
print('You do not have a winning combination. Would you like to play Powerball again? (Y/N)')
response = str(input('Y/N:'))
if response == 'Y':
playPowerBall()
else:
sys.exit()
playPowerBall()
Похоже, что с диапазоном все еще есть проблема. В нем говорится, что объект типа «тип» не подлежит подписке.
победитель = random.sample (диапазон (0,69), 6)
Он говорит, что объект "кортеж" не вызывается.
Это была первая проблема, просто удалите инструкцию range = (1, 69).
Да, но затем снова возвращается первоначальная проблема, когда функция просто останавливается. Я пытаюсь понять, есть ли выигрышная комбинация.
@yiekeycalzone Я разместил свой код, дайте мне знать, работает ли это для вас
@yiekeycalzone, в таком случае отметьте мой ответ как принятый (зеленая галочка) и проголосуйте за него заранее, спасибо!
В чем проблема? Что такое точка входа?