Добавляем int вместе и получаем неправильный ансер - PullRequest
0 голосов
/ 09 марта 2019

Я пишу игру в кости в казино, в которой пользователю предлагается ввести ставку и число игральных костей. Результат числа костей либо вычтет ставку из баланса, либо добавит ставку * 6 к балансу. Когда пользователь угадывает неправильно, правильное значение вычитается из баланса.

с оставшимся балансом 490 и после выигрыша со ставкой после ставки 5, новый баланс 556045. Очевидно, это должно быть 520.

Почему новый баланс будет 556045?

Мой код ниже вместе с выводом

    import random

print("Welcome to the casino")
UserName = input("Please enter your name: ")
print("Thanks for playing " + UserName + "! We wish you the best of luck!")

balanceRemaining = 500
while balanceRemaining != 0:
    RandomNumber = random.randint(1, 6)
    Wager = input("Please enter a wager: ")
    UserNumber = input("Enter a number: ")
    print("Dice number was " + str(RandomNumber))
    if int(UserNumber) != RandomNumber:
        balanceRemaining = balanceRemaining - int(Wager)
        print("Your Balance is now: " + str(balanceRemaining))
    else:
        Winnings = int(Wager * 6)
        balanceRemaining = int(Winnings) + int(balanceRemaining)
        print("Your Balance is now: " + str(balanceRemaining))

выход

Please enter a wager: 5
Enter a number: 5
Dice number was 1
Your Balance is now: 495
Please enter a wager: 5
Enter a number: 5
Dice number was 6
Your Balance is now: 490
Please enter a wager: 5
Enter a number: 5
Dice number was 5
Your Balance is now: 556045

Ответы [ 2 ]

2 голосов
/ 09 марта 2019

Вам необходимо преобразовать строку ставки до умножения :

Winnings = int(Wager) * 6

Wager - это строка, поэтому '5', и умножение строк допускается, что приводит к новомустрока с повторяющимся значением:

>>> '5' * 6
'555555'

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

Лучше всего преобразовать пользовательский ввод ранний ,поэтому труднее делать ошибки, подобные этим, в другом месте вашего кода.Это также помогает уменьшить количество мест, в которых необходимо преобразовать этот ввод в целые числа:

Wager = int(input("Please enter a wager: "))
UserNumber = int(input("Enter a number: "))
0 голосов
/ 09 марта 2019

Это на самом деле интересно. Здесь вы вводите строку:

Wager = input("Please enter a wager: ")

И Wager - это, в вашем случае, строка "5". Затем вы умножаете эту строку на 6:

Winnings = int(Wager * 6)

То же самое, что и Winnings = int("5"* 6), но "5"* 6 == '555555'! Затем int преобразует это в целое число, и вы получите этот неверный результат.

Что вы хотите преобразовать в целое число: строка "5"* 6 или строка "5"? Вы наверняка имели в виду:

Winnings = int(Wager) * 6
...