2016-11-24 1 views
0

J'ai trouvé ceci afin de générer des nombres aléatoires.sans expression et compréhension booléenne

def main(): 
    randomNumber = randint(1,100) 
    found = False 
    while not found: 
     userGuess = input("") 
     if userGuess == randomNumber: 
      print "You win." 
      found = True 
     elif 
      ..... 
     else 
      ..... 

Donc, ma question porte sur «tout n'est pas trouvé», je ne trouve pas cela instinctif. plus instinctive, mais ne fonctionne pas devrait être quelque chose comme:

found = False 
while found 

-> la boucle travaille alors trouvé est faux

Quelqu'un pourrait-il expliquer cela?

+0

Ensuite, vous devriez écrire 'while found == false' qui est une traduction littérale de votre texte," while found is false ". –

+1

Fixez votre indentation; 'while found' signifie' while found == True' et 'while not found' signifie' while found == False' –

Répondre

1

Une boucle while s'exécutera pendant que l'expression donnée est True. Dans votre cas, l'expression donnée est not found. Depuis found commence comme False, not found est bien sûr True, d'où la boucle est exécutée et continuera à exécuter jusqu'à found est réglé sur True, à quel point not found sera False.

Mon conseil serait de ne pas réécrire ceci - il est en fait très lisible comme il est. Vous dites que tandis que vous avez pastrouvé quelque chose, continuez à chercher.

0

Si while not found semble non intuitif, vous devriez probablement juste vous y habituer. C'est un idiome Python commun et semblera très intuitif après un certain temps (jeu de mots).

Si vous voulez un code plus lisible, bien que, je supprimerais la variable found entièrement et utiliser break de mettre fin à la boucle:

def main(): 
    randomNumber = randint(1,100) 
    while True: 
     userGuess = input("") 
     if userGuess == randomNumber: 
      print "You win." 
      break 
     # Code here will run only if the break isn't executed. 
     # You don't need the elif any more. 

Il est une question de préférence personnelle: certaines personnes aiment utiliser une variable d'indicateur pour terminer une boucle; Je préfère la simplicité d'une rupture explicite dans le code comme ceci.