2012-04-10 1 views
4

nouveau à la programmation, je suis en train d'apprendre et voici probablement un problème très simple pour vous.PYTHON: Génération aléatoire simple pilotant if/else

import random 

def run_stair_yes(): 
    print "\nRunning in stairs is very dangerous!" 
    print "Statistique shows that you have 70% chance of falling" 
    print "\nroll the dice!" 


    for i in xrange(1): 
     print random.randint(1, 100) 

    if i <= 70 : 
     print "\nWell, gravity is a bitch. You fell and die." 

    elif i >= 71 : 
     athlethic() 

    else: 
      print "im boned!" 
      exit(0) 

mon problème est que, quel que soit le numéro est généré, il me donne toujours la même « La gravité est une salope. Tu es tombé et mourir ».

Où est-ce que je me trompe?

+0

tanxs tous, j'ai pris tous vos commentaires en compte et fait un code plus simple. Ça marche. – inick

+0

le bloc 'else' est inutile car votre fonction n'évalue jamais true pour les deux i <= 70 and i > = 70 SI vous attribuez i à un nombre aléatoire. –

Répondre

5

Vous jamais réellement défini i la random.randint()

Vous dites

for i in xrange(1): 

Où i prend la valeur de 0 que vous itérer à travers le xrange(1) puis vous imprimez simplement le résultat de random.randint(1, 100), non l'assigner à i.

Essayez cette

i = random.randint(1, 100) 
0

Peut-être que si vous avez réellement attribué quelque chose à i ...

i = random.randint(1, 100) 

Et une autre chose: la partie else est jamais, jamais à exécuter. Chaque nombre entier est < = 70 ou> = 71, donc le else ne sera jamais atteint.

+0

Oups, ne tenez pas compte de mon commentaire précédent.Quoi qu'il en soit, la dernière clause 'else' ne peut être atteinte que si' i' se trouve être un nombre à virgule flottante dans la plage '(70.0-71.0)' - mais comme 'i' est un entier, cela n'arrivera jamais et le la clause finale 'else' ne sera jamais atteinte. –

5

De plus les conseils de jamylak, quelques conseils généraux pour améliorer votre code:

  • invites multi-lignes sont mieux écrits en utilisant la syntaxe de chaîne triple guillemets au lieu de plusieurs déclarations print. De cette façon, il vous suffit d'écrire print une fois, et vous n'avez pas besoin de tous ces sauts de ligne supplémentaires (\n)

Exemple:

print """ 
Running on the stairs is dangerous! 

You have a 70% chance to fall. 

Run on the stairs anyway? 
""" 
  • Votre calcul de probabilité utilise des nombres entiers aléatoires dans le range [1-100], mais il est probablement plus naturel d'utiliser un nombre à virgule flottante. (Dans les deux cas, cela fonctionnera.)

  • Vous n'avez pas besoin de vérifier si le numéro est <= 70, puis vérifiez s'il s'agit de >= 71. Par définition (pour les entiers!), Une seule de ces conditions sera vraie, donc vous n'avez pas besoin de vérifier les deux.

Exemple:

random_value = random.random() # random number in range [0.0,1.0) 
if random_value < 0.7: 
    pass #something happens 70% of the time 
else: 
    pass #something happens the other 30% of the time 

Ou plus compacte:

if (random.random() < 0.7): 
    pass #something happens 70% of the time 
else: 
    pass #something happens 30% of the time 
+0

Gardez à l'esprit que la version compacte ne fonctionnera que pour if/else, elif se comportera de façon imprévisible puisque chaque appel à random génèrera une nouvelle valeur. Notions de base que je connais, mais qui valent la peine d'être mentionnées. –