Запуск функции лотереи Python

Я пытаюсь создать функцию, которая оценивает ввод пользователя по случайно сгенерированной последовательности «победитель». Код будет работать нормально до тех пор, пока не будет введен пользовательский ввод, где он остановится. Редактор, который я использую, тоже немного странный, поэтому отступы здесь будут отключены, однако я обещаю, что это НЕ проблема. Извини за это. Спасибо

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()

В чем проблема? Что такое точка входа?

JoshuaCS 07.01.2019 14:18

Во-первых, range = (1,69) - это плохо, потому что вы создаете новую переменную, которая перезаписывает функцию диапазона Pythons. Если я вызываю ваш playPowerBall (), он вылетает из-за этого. Во-вторых, как только пользователь вводит свои числа, вы генерируете своих победителей, но ничего не делаете с ними. Вы их не распечатываете и не возвращаете, поэтому не видите результатов.

FChris 07.01.2019 14:23

После ввода 6 чисел в части билета я получаю файл «main.py», строка 20 в playPowerBall, в нем что-то говорится о том, что кортеж должен быть целым числом или должен быть разрезан.

yiekey calzone 07.01.2019 14:24

Как я уже сказал, вы перезаписываете функцию диапазона Pythons. Я не знаю, зачем вы создаете эту переменную, поскольку вы, похоже, ее не используете. Просто удалите строку с диапазоном = (1,69)

FChris 07.01.2019 14:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
4
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы перезаписываете встроенную функцию 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()

Похоже, что с диапазоном все еще есть проблема. В нем говорится, что объект типа «тип» не подлежит подписке.

yiekey calzone 07.01.2019 14:47

победитель = random.sample (диапазон (0,69), 6)

yiekey calzone 07.01.2019 14:51

Он говорит, что объект "кортеж" не вызывается.

yiekey calzone 07.01.2019 14:52

Это была первая проблема, просто удалите инструкцию range = (1, 69).

JoshuaCS 07.01.2019 14:53

Да, но затем снова возвращается первоначальная проблема, когда функция просто останавливается. Я пытаюсь понять, есть ли выигрышная комбинация.

yiekey calzone 07.01.2019 14:55

@yiekeycalzone Я разместил свой код, дайте мне знать, работает ли это для вас

JoshuaCS 07.01.2019 15:04

@yiekeycalzone, в таком случае отметьте мой ответ как принятый (зеленая галочка) и проголосуйте за него заранее, спасибо!

JoshuaCS 08.01.2019 02:16

Другие вопросы по теме