#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, если мой мозг умер, но я не могу придумать ничего, чтобы его исправить
Я бы изменил порядок кода, чтобы сделать поток управления более понятным.
Для сравнения "если 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 есть тернарный условный оператор?
Вы повторно инициализируете переменную 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()