Я настроил ГСЧ и кнопку продолжения, но он не обновит результат после продолжения

1
#Setting up RNG
loop = "y"
while loop == "y" or loop == "yes":
    from random import randint
    dice = (randint(1,10))
    dice2 = (randint(1,10))
    roll = (dice + dice2)
    win = 3
    loss = 2
    cash = 20
    if roll == 3 or roll == 7 or roll == 11 or roll == 17:
        cash += (win)
    else:
        cash -= (loss)
    #Starting game
    print("""Welcome to, Gambling for School!

    You have $20 and must earn as much money as possible

    If you roll a 3, 7, 11, or 17, you will win $3 but any other number 
takes $2

    You have a 20% of winning
""")
    x = input("Press ENTER to start.")
    #Results
    if roll == 11 or roll == 8 or roll == 18:
        print("You rolled an " + str(roll) + "!")
    else:
        print("You rolled a " + str(roll) + "!")
    print("")
    print("Cash - $" + str(cash))
    loop = input("Continue? (Y/N) ").lower()

Пришлось изменить отступы, чтобы показать это как код

Когда он запускается, я нажимаю Enter, чтобы начать игру, и он добавляет и вычитает правильно, но когда я выбираю continue, он играет так, как будто я никогда не терял или не получал никаких денег. Это 1AM и idk, если мой мозг умер, но я не могу придумать ничего, чтобы его исправить

Теги:
python-3.x
random

2 ответа

0

Я бы изменил порядок кода, чтобы сделать поток управления более понятным.

Для сравнения "если a in нескольких элементах" вы должны использовать set() s - они очень эффективны при поиске, если в них что-то (и для других заданий).

Для печати найдите str.format() или python 3. Интерпретация строки 6+: PEP-498

Вы только когда-либо используете сумму из 2 случайных чисел, вы можете получить их за один раз, используя random.choices(iterable, k = 2)

from random import choices

cash = 20
winAmount = 3
lossAmount = 2

#Starting game
print("""Welcome to, Gambling for School!

    You have $20 and must earn as much money as possible

    If you roll a 3, 7, 11, or 17, you will win $3, else you loose $2

    You have a 20% chance of winning
""")
x = input("Press ENTER to start.")

lucky_numbers = {3,7,11,17}

# needed for outputting text
pluralize = {8,11,18}
win = False


loop = "y"
while loop and loop[0]== "y":
    sum_dice = sum(choices(range(1,11), k=2))

    if sum_dice in lucky_numbers:
        win = True
        cash += winAmount
    else:
        win = False
        cash -= lossAmount

    print("You {}. You rolled a{} {}!".format(
        "won" if win else "lost",
        "n" if sum_dice in pluralize else "", 
        sum_dice))

    print("")
    print("Cash - $" + str(cash))
    loop = input("Continue? (Y/N) ").lower().strip()

Выход:

Welcome to, Gambling for School!

    You have $20 and must earn as much money as possible

    If you roll a 3, 7, 11, or 17, you will win $3, else you loose $2

    You have a 20% of winning

Press ENTER to start.
You lost. You rolled a 6!

Cash - $18
Continue? (Y/N) y
You lost. You rolled a 16!

Cash - $16
Continue? (Y/N) y
You lost. You rolled a 16!

Cash - $14
Continue? (Y/N) y
You lost. You rolled a 15!

Cash - $12
Continue? (Y/N) y
You won. You rolled a 7!

Cash - $15
Continue? (Y/N) n

Помимо форматирования печати выходы используют трехмерный (do x if this else y) оператор. Подробнее здесь: У Python есть тернарный условный оператор?

0

Вы повторно инициализируете переменную cash с 20 перед каждой игрой. Чтобы исправить игру, просто переместите этот код из цикла.

Инициализация win и loss также может быть выведена из цикла, поскольку они не изменяются.

То же самое для оператора from random import randint считается хорошей практикой, чтобы все операторы from random import randint в верхней части файла.

from random import randint

#Setting up RNG
loop = "y"
win = 3
loss = 2
cash = 20
while loop == "y" or loop == "yes":
    dice = (randint(1,10))
    dice2 = (randint(1,10))
    roll = (dice + dice2)

    if roll == 3 or roll == 7 or roll == 11 or roll == 17:
        cash += win
    else:
        cash -= loss
    #Starting game
    print("""Welcome to, Gambling for School!

You have $20 and must earn as much money as possible

If you roll a 3, 7, 11, or 17, you will win $3 but any other number 
takes $2

You have a 20% of winning
""")
    x = input("Press ENTER to start.")
    #Results
    if roll == 11 or roll == 8 or roll == 18:
        print("You rolled an " + str(roll) + "!")
    else:
        print("You rolled a " + str(roll) + "!")
    print("")
    print("Cash - $" + str(cash))
    loop = input("Continue? (Y/N) ").lower()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню