J'écris un jeu de dés de casino qui demande à l'utilisateur d'entrer un pari et un numéro de dés. Le résultat du nombre de dés déduira la mise du solde ou ajoutera la mise * 6 au solde. Lorsque l'utilisateur devine incorrectement, la valeur correcte est déduite du solde.

Avec un solde restant de 490 et lors de la victoire avec mise après avoir misé 5, le nouveau solde est de 556045. Cela devrait évidemment être 520.

Pourquoi le nouveau solde serait-il 556045?

Mon code est ci-dessous avec la sortie

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

Production

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
-1
Kie21 9 mars 2019 à 21:18

2 réponses

Meilleure réponse

Vous devez convertir la chaîne de mise avant de multiplier:

Winnings = int(Wager) * 6

Wager est une chaîne, donc '5', et la multiplication des chaînes est autorisée, ce qui produit une nouvelle chaîne avec la valeur répétée:

>>> '5' * 6
'555555'

La conversion de cette nouvelle chaîne produit alors un gain beaucoup plus important que prévu.

Il est préférable de convertir les entrées utilisateur tôt , il est donc plus difficile de faire des erreurs comme celles-ci ailleurs dans votre code. Cela permet également de réduire le nombre d'emplacements dont vous avez besoin pour convertir cette entrée en nombres entiers:

Wager = int(input("Please enter a wager: "))
UserNumber = int(input("Enter a number: "))
2
Martijn Pieters 9 mars 2019 à 18:22

C'est vraiment intéressant. Ici, vous saisissez une chaîne:

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

Et Wager est, dans votre cas, la chaîne "5". Ensuite, vous multipliez cette chaîne par 6:

Winnings = int(Wager * 6)

C'est la même chose que Winnings = int("5"* 6), mais "5"* 6 == '555555'! Ensuite, int le convertit en un entier et vous obtenez ce résultat incorrect.

Que voulez-vous convertir en entier: la chaîne "5"* 6 ou la chaîne "5"? Vous vouliez certainement dire:

Winnings = int(Wager) * 6
0
ForceBru 9 mars 2019 à 18:23