Je suis nouveau dans la programmation et j'ai une tâche que je ne peux pas comprendre par moi-même.
La tâche est de créer un programme qui vous permet de décider du nombre de dés à lancer, de 1 à 5, en vérifiant si vous faites une mauvaise entrée. Après chaque lancer, le numéro du dé s'affiche et le total à ce jour. Si le dé donne un 6, il n'est pas inclus dans le total et vous obtenez plus de lancers. C'est là que je suis coincé. Je veux que mon programme redémarre la boucle si le dé tourne un 6 et juste 2 lancers vers les sumDices et continue la boucle, mais je ne peux pas le faire fonctionner.
Voici mon code:
import random
numDices=0
total = 0
print("------------")
print("DICE ROLLING")
print("------------")
print()
exit=False
reset=False
while True:
while True:
numDices=int(input("How many dices to throw? (1-5) "))
if numDices<1 or numDices>5:
print("Wrong input, try again")
break
while True:
if reset==True:
break
for i in range(numDices):
dicesArray = list(range(numDices))
dicesArray[i] = random.randint(1, 6)
print(dicesArray[i])
total += dicesArray[i]
if dicesArray[i] == 1:
print("You rolled a one, the total is: ",str(total))
elif dicesArray[i] == 2:
print("You rolled a two, the total is: ",str(total))
elif dicesArray[i] == 3:
print("You rolled a three, the total is: ",str(total))
elif dicesArray[i] == 4:
print("You rolled a four, the total is: ",str(total))
elif dicesArray[i] == 5:
print("You rolled a five, the total is: ",str(total))
elif dicesArray[i] == 6:
total-=6
numDices+=2
print("You rolled a six, rolling two new dices")
reset=True
print("The total sum is",str(total),"with",numDices,"number of rolls.")
print()
restart=(input("Do you want to restart press Enter, to quit press 9. "))
if restart=="9":
exit=True
break
else:
print()
break
if exit==True:
break
4 réponses
Vous pouvez le faire de la manière suivante, en modifiant légèrement votre code, en comptant les dés disponibles. J'y ai aussi réduit les boucles imbriquées
import random
numDices=0
total = 0
print("------------")
print("DICE ROLLING")
print("------------")
print()
start = True
while start:
numDices=int(input("How many dices to throw? (1-5) "))
if numDices<1 or numDices>5:
print("Wrong input, try again")
break
total = 0
dices_counter = 0
while numDices > 0 :
eyes = random.randint(1, 6)
dices_counter+=1
total += eyes
if eyes == 1:
print("You rolled a one, the total is: ",str(total))
numDices-=1
elif eyes == 2:
print("You rolled a two, the total is: ",str(total))
numDices-=1
elif eyes == 3:
print("You rolled a three, the total is: ",str(total))
numDices-=1
elif eyes == 4:
print("You rolled a four, the total is: ",str(total))
numDices-=1
elif eyes == 5:
print("You rolled a five, the total is: ",str(total))
numDices-=1
elif eyes == 6:
total-=6
numDices+=2
print("You rolled a six, rolling two new dices")
print("The total sum is",str(total),"with",dices_counter,"number of rolls.")
print()
start=(input("Do you want to restart press Enter, to quit press 9. "))
if start=="9":
break
else:
print()
start = True
Utilisation d'une fonction récursive
import random
total = 0
diceRollList = []
# Define dice rolling function
def rollDice():
rollResult = random.randint(1, 6)
if rollResult == 6:
# If 6 Rolled run two more rolls and sum the results
print("Rolled a 6 Rolling 2 more")
return sum([rollDice() for _ in range(2)])
# If 6 not rolled return the result
print(f"Rolled a {rollResult}")
return rollResult
while True:
numberOfDice = int(input("How many Die to throw: "))
if numberOfDice not in range(1, 6):
print("Number of dice should be between 1 and 5")
break
for dice in range(numberOfDice):
print(f"Rolling Dice {dice}")
# Add result to the total
total += rollDice()
print(f"Running Total: {total}")
for i in range(numDices):
Votre boucle for limite le nombre d'itérations dès que range(numDices)
est évalué / exécuté. Lorsque vous essayez d'augmenter le nombre d'itérations avec numDices+=2
, cela n'a aucun effet car range(numDices)
n'est évalué qu'une seule fois.
Si vous voulez pouvoir changer le nombre d'itérations, utilisez une autre boucle while et utilisez i
comme compteur. Quelque chose comme.
i = 0
while i <= numDices:
...
...
if ...:
...
elif ...:
...
i += 1
Ensuite, dans la suite pour elif dicesArray[i] == 6:
l'instruction numDices += 2
augmentera effectivement le nombre d'itérations.
Je vois un autre problème que vous n'avez pas mentionné. Vous commencez avec une liste de longueur fixe basée sur la valeur d'origine de numDices
et vous utilisez i
comme index pour cette liste.
dicesArray = list(range(numDices))`
...
dicesArray[i]
...
Si i
peut potentiellement être supérieur à l ' original numDices
(supérieur à len(dicesArray)
), vous obtiendrez finalement une IndexError. Vous devriez probablement commencer avec une liste vide et y ajouter. Pour obtenir le jet de dés le plus récent, utilisez dicesArray[-1]
au lieu de dicesArray[i]
.
...
dicesArray = []
i = 0
while i <= numDices:
dicesArray.append(random.randint(1, 6))
total += dicesArray[-1]
if dicesArray[-1] == 1:
...
...
Pour résoudre votre problème, je remplacerais votre boucle for actuelle par une boucle while
De plus, je vois beaucoup de choses inutiles dans votre code, je vais essayer de les lister:
Pourquoi utilisez-vous autant de "while True"?
Pourquoi n'utilisez-vous pas simplement la fonction exit () pour quitter au lieu d'utiliser un variable?
- Est-ce que toute la partie est vraiment nécessaire, ne pouvez-vous pas simplement imprimer le numéro?
Voici ma proposition:
import random
remaining_dices=0
total = 0
print("------------")
print("DICE ROLLING")
print("------------")
print()
while True:
remaining_dices=int(input("How many dices to throw? (1-5) "))
if remaining_dices<1 or remaining_dices>5:
print("Wrong input, try again")
break
dicesArray = list()
while remaining_dices>0:
dice_value = random.randint(1, 6)
dicesArray.append(dice_value)
print(dice_value)
total += dice_value
remaining_dices -= 1
if(dice_value == 6):
total-=6
remaining_dices +=2
print("You rolled a 6, rolling two new dices")
else:
print("You rolled a " + str(dice_value) + ", the total is : " +str(total))
restart=(input("Do you want to restart press Enter, to quit press 9. "))
if restart=="9":
exit()
else:
print()
Questions connexes
De nouvelles questions
python
Python est un langage de programmation multi-paradigme, typé dynamiquement et polyvalent. Il est conçu pour être rapide à apprendre, comprendre, utiliser et appliquer une syntaxe propre et uniforme. Veuillez noter que Python 2 est officiellement hors support à partir du 01-01-2020. Néanmoins, pour les questions Python spécifiques à la version, ajoutez la balise [python-2.7] ou [python-3.x]. Lorsque vous utilisez une variante Python (par exemple, Jython, PyPy) ou une bibliothèque (par exemple, Pandas et NumPy), veuillez l'inclure dans les balises.