简体   繁体   中英

Why won't my input statements accept values in my program?

I am making a program that generates a random number and asks you to guess the number out of the range 1-100. Once you put in a number, it will generate a response based on the number. In this case, it is Too high , Too low , Correct , or Quit too soon if the input is 0 , which ends the program(simplified, but basically the same thing).

It counts the number of attempts based on how many times you had to do the input function, and it uses a while loop to keep asking for the number until you get it correct. (btw, yes I realize this part is a copy of my other question. This is a different problem in the same program, so I started it the same way.)

Anyways, I am having an issue with the last part of the program not taking any values. It is supposed to take the input for keep_playing and continue going if it is equal to 'y' . The issue is that it isn't actually making the variable equal anything(at least I don't think so.) So, whatever value I put in, it just prints the same response every time. Here is the small part of the code which isn't working, though I feel like it is something wrong with the rest of the code:

def keep_playing(attempts,keep_playing):
    keep_playing = 'y'
    if keep_playing == 'y':
        guess(attempts)
        keep_playing = str(input("Another game (y to continue)? "))
    else:
        print()
        print("Thanks for playing")
    return keep_playing

The expected output is:

Enter a number between 1 and 100, or 0 to quit: 4
Too low, try again       It's 66 for testing purposes
Enter a number between 1 and 100, or 0 to quit: 67
Too high, try again      It's 66 for testing purposes
Enter a number between 1 and 100, or 0 to quit: 66

Congratulations! You guessed the right number!
There were 2 attempts

Another game (y to continue)? y

Enter a number between 1 and 100, or 0 to quit: 0

You quit too early
The number was  79
Another game (y to continue)? n

Thanks for playing!

But the actual output is:

Enter a number between 1 and 100, or 0 to quit: 4
Too low, try again       It's 66 for testing purposes
Enter a number between 1 and 100, or 0 to quit: 67
Too high, try again      It's 66 for testing purposes
Enter a number between 1 and 100, or 0 to quit: 66

Congratulations! You guessed the right number!
There were 2 attempts

Another game (y to continue)? y

Enter a number between 1 and 100, or 0 to quit: 0

You quit too early
The number was  79
Another game (y to continue)? n
Another game (y to continue)? y
>>>

Notice how no matter what I do, it continues to run. The first part with the higher and lower works fine, however the bottom part just seems to break, and I don't know how to fix it. If anyone has any solutions that would be greatly appreciated.

Also, in case anyone wanted to see the whole thing, in case there was in issue with that, here it is:

import random

def main():
    global attempts
    attempts = 0
    guess(attempts)
    keep_playing(attempts,keep_playing)
    
def guess(attempts):
    number = random.randint(1,100)
    print('')
    guess = int(input("Enter a number between 1 and 100, or 0 to quit: "))
    while guess != 0: 
        if guess != number:
            if guess < number:
                print("Too low, try again       It's",number, "for testing purposes") #printing the number makes it easier to fix :/
                attempts += 1
                guess = int(input("Enter a number between 1 and 100, or 0 to quit: "))
            elif guess > number:
                print("Too high, try again      It's",number, "for testing purposes")
                attempts += 1
                guess = int(input("Enter a number between 1 and 100, or 0 to quit: "))
        else:
            print()
            print("Congratulations! You guessed the right number!")
            print("There were", attempts,"attempts")
            print()
            keep_playing = str(input("Another game (y to continue)? "))
            return keep_playing
            
    else:
        print()
        print("You quit too early")
        print("The number was ",number)
        keep_playing = str(input("Another game (y to continue)? "))
        return keep_playing
        
    
    

def keep_playing(attempts,keep_playing):
    keep_playing = 'y'
    if keep_playing == 'y':
        guess(attempts)
        keep_playing = str(input("Another game (y to continue)? "))
    else:
        print()
        print("Thanks for playing")
    return keep_playing
main()
            

I notice a couple things here

  1. There is some issue with the naming of your function, python thinks that keep_playing is the str variable keep_playing and not the function. In my code below I will rename the function keep_playing to keep_playing_game .
  2. You need to pass in the parameters when you call the function keep_playing_game so the function knows what the user input and attempts are.
  3. Why are you setting keep_playing = 'y' in the first line of your function def keep_playing_game(attempts,keep_playing) ? If you remove this line, your program should run as expected based on the value the user enters and not what the function assigns keep_playing to.

I would recommend trying something like this

import random

def main():
    global attempts
    attempts = 0
    guess(attempts)
    # keep_playing(attempts,keep_playing) -> this line should be removed
    
def guess(attempts):
    number = random.randint(1,100)
    print('')
    guess = int(input("Enter a number between 1 and 100, or 0 to quit: "))
    while guess != 0: 
        if guess != number:
            if guess < number:
                print("Too low, try again       It's",number, "for testing purposes") #printing the number makes it easier to fix :/
                attempts += 1
                guess = int(input("Enter a number between 1 and 100, or 0 to quit: "))
            elif guess > number:
                print("Too high, try again      It's",number, "for testing purposes")
                attempts += 1
                guess = int(input("Enter a number between 1 and 100, or 0 to quit: "))
        else:
            print()
            print("Congratulations! You guessed the right number!")
            print("There were", attempts,"attempts")
            print()
            keep_playing = str(input("Another game (y to continue)? "))
            return keep_playing_game(keep_playing, attempts)
            
    else:
        print()
        print("You quit too early")
        print("The number was ",number)
        keep_playing = str(input("Another game (y to continue)? "))
        return keep_playing_game(keep_playing, attempts)
        
    
    

def keep_playing_game(keep_playing, attempts):
    if keep_playing == 'y':
        guess(attempts)
    else:
        print()
        print("Thanks for playing")
        return
    return None
main()

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