简体   繁体   中英

How can i make sure this while loop can rerun my random number code without going forever?

I created a guess the number program and used a while loop to allow the user to continue guessing until he/she could get it right, as seen here:

import random

number = random.randrange(1, 6) 

print "Guess the number, between 1 and 6"

guess = "yes"

while guess != number: 
    guess = int(raw_input('>'))
    if guess == number:
        break
        print "Good job! You got it right!"
        print number 


    elif guess > number: 
        print "Too High"
        print number  
        number = random.randrange(1, 6) 

    elif guess < number:
        print "Too Low"
        print number  
        number = random.randrange(1, 6) 

The problem is, when I am trying to guess the number, it will randomly end, whether me guessing the first time, 4 times, or 30 times. Also, I originally had,

guess = int(raw_input('>'))

in place of,

guess = "yes"

and replaced it to get rid of the extra and useless raw_input i'd initially need to add into terminal. Why am i able to make it equal "yes" and why doesn't it matter what I put there?

Example of Bug:

Guess the number, between 1 and 6
>3
Too High
2
>4
Too Low
5
>6
Too High
5
>3
Too High
1
>2
Too High
1
>5
Good job! You got it right!
5


------------------
(program exited with code: 0)
Press return to continue

It worked that time, and now:

Guess the number, between 1 and 6
>3
Too Low
4


------------------
(program exited with code: 0)
Press return to continue

The issue you have is that your while loop is testing if number matched guess after picking a new number value but before getting a new guess . This means that you'll say the player guessed wrong, but they they become right afterwards and the loop will end.

Try this instead:

import random

print "Guess the number, between 1 and 6"

guess = 'y' # the values set here don't actually matter, they just need to be different
number = 'x'

while guess != number: 
    number = random.randint(1, 6) 
    guess = int(raw_input('>'))

    if guess == number:
        print "Good job! You got it right!"

    elif guess > number: 
        print "Too High"
        print number  

    elif guess < number:
        print "Too Low"
        print number  

I've also changed your use of random.randrange to random.randint , which will make it actually return 6 s some of the time ( randrange excludes the upper bound).

import random

number = random.randrange(1, 6) 

print "Guess the number, between 1 and 6"

guess = "yes"

while guess != number: 
    guess = int(raw_input('>'))
    if guess == number:
        break
        print "Good job! You got it right!"
        print number 
        break


    elif guess > number: 
        print "Too High"
        print number  
        number = random.randrange(1, 6) 
        break

    elif guess < number:
        print "Too Low"
        print number  
        number = random.randrange(1, 6) 
        break

guess = "yes" works because guess != number will always be True on the first check in the while loop, at which point the user is asked for input. Also, in the if block, put the break statement after all the print 's.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM