Python Руководство по игре в кости - PullRequest
0 голосов
/ 03 апреля 2020

В моем классе Python мы сейчас занимаемся удаленными проектами, и последний из них меня озадачил. Мы должны создать игру в кости, которая функционирует следующим образом: 1. Введите сумму ставки. 2. Затем игральные кости бросаются, и результат устанавливается как «точка». 3. Игральные кости снова бросаются, с результатом 7 или 11. в случае выигрыша, 2, 3 или 12, приводящих к проигрышу, и любого другого результата, приводящего к перебросу.

Я мог бы написать этот код, но нам дали скелетный сценарий, и мы должны соответствовать нашему решение этого. Я борюсь с этим из-за моего ограниченного опыта работы с функциями. Я пытался научить себя, но этот скелетный сценарий действительно сбивает меня с толку. Буду признателен за любую помощь, и я прошу прощения, если этот вопрос не подходит здесь. Я не ищу кого-то, чтобы написать мое решение для меня, просто некоторые рекомендации. Заранее спасибо.

Вот скелетный скрипт:

import random

def enterBet(): # returns amount bet (1-1000)

def rollTheDice():  # returns die1, die2

def setPoint(bet):  # returns the outome of the game and the point

def playDice(bet, point):  # returns the outcome

OUTCOME_WIN = 1
OUTCOME_LOSE = 2
OUTCOME_REROLL = 3

def main():

    bet = enterBet()
    outcome, point = setPoint(bet)

    while outcome == OUTCOME_REROLL:
        outcome = playDice(bet,point)

if __name__ == "__main__":
    main()

Вот моя лучшая попытка:

import random

def enterBet(): # returns amount bet (1-1000)
    int(input("Please Enter Your Bet: "))

def rollTheDice():  # returns die1, die2
    die1 = random.randint(1, 6)
    die2 = random.randint(1, 6)
    return die1, die2

def setPoint(bet):  # returns the outome of the game and the point
    rollTheDice()
    point = die1 + die2
    print('You rolled a ' + point + '.')
    print('This is the new point.')
    return point, outcome

def playDice(bet, point):  # returns the outcome
    print('Point is: ' + point )
    if point == 7 or point == 11:
        outcome = OUTCOME_WIN

    elif point == 2 or point == 3 or roll == 12:
        outcome = OUTCOME_LOSE
    else:
        outcome = OUTCOME_REROLL
    return outcome

OUTCOME_WIN = 1
OUTCOME_LOSE = 2
OUTCOME_REROLL = 3

def main():

    bet = enterBet()
    outcome, point = setPoint(bet)

    while outcome == OUTCOME_REROLL:
        outcome = playDice(bet, point)

if __name__ == "__main__":
    main()

И вот ошибка, которую я получаю:

Please Enter Your Bet: 1
Traceback (most recent call last):
  File "D:/School/CSCI 256/Project 2/p1_2.py", line 43, in <module>
    main()
  File "D:/School/CSCI 256/Project 2/p1_2.py", line 37, in main
    outcome, point = setPoint(bet)
  File "D:/School/CSCI 256/Project 2/p1_2.py", line 13, in setPoint
    point = die1 + die2
NameError: name 'die1' is not defined

Process finished with exit code 1

1 Ответ

1 голос
/ 03 апреля 2020

Вы не назначаете возвращаемое значение rollTheDice для переменных, поэтому интерпретатор не знает, что такое die1 и die2. Имена этих переменных являются локальными для самой функции, поэтому вам придется определять их и в функции setPoint. Если вы измените его на что-то вроде:

def setPoint(bet):  # returns the outome of the game and the point
    die1, die2 = rollTheDice()
    point = die1 + die2
    print('You rolled a ' + point + '.')
    print('This is the new point.')
    return point, outcome

, он должен знать об этих переменных. Тем не менее, у вас все еще будет проблема с переменной outcome, которая также не определена.

Вы, похоже, возвращаете переменные точки и результата в порядке, отличном от ожидаемого, так что следите за этим .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...