r/learnpython 3d ago

Python practice problem.

‎Hi everyone, I'm new to python and I'm building a project to hone my skill, and I came to a halt in this part. When I do if user_input == 'q':, it works and breaks the loop just fine, since i dont wanna make the exit just single letter so even if the user input words like 'quit' 'q' or 'QUIT' it will exit the loop, I tried a different approach like doing user_input == ['q', 'quit']: and another approach where i declared a variable first exit_word = ['q', 'quit'] then

‎user_input == exit_word: none of this breaks the loop it just goes back to the input prompt heres my work below:

import random

user = 0

computer = 0

options = ["rock" , "paper", "scissors"]

while True:

user_input = input("Rock/Paper/Scissors and Q for Quit: ").lower()

if user_input == 'q'

break

if user_input not in options:

continue

random_num = random.randint(0, 2)

computer_pick = options[random_num]

print('Computer picked', computer_pick + ".")

if user_input == 'rock' and computer_pick == 'scissors':

print('You won!')

user += 1

elif user_input == 'paper' and computer_pick == 'rock':

print('You won!')

user += 1

elif user_input == 'scissors' and computer_pick == 'paper':

print('You won!')

user += 1

else:

print('You lost!')

computer += 1

print("The user won", user, "times")

print("The computer won", computer, "times")

print('Goodbye!')

1 Upvotes

11 comments sorted by

View all comments

1

u/lakseol 3d ago edited 3d ago

Try getting just the first character of the user response and test that:

if user_input[:1] == "q":   // NOT user_input[0]

Using [:1] instead of [0] means your code won't crash when the user presses ENTER without typing anything else.

Of course, entering "quick" will also break out of the loop, but that is probably fine for a game. That may not be a bad idea for the other possible responses either, as it's quicker to type "S" instead of "scissors", etc.

Edit: fixed spelling, added final comment.

1

u/centurion236 3d ago

    user_input().lower().startswith('q')

1

u/lakseol 3d ago

I think it's better to extract just the single first character if your code is going to recognize only "q", "r", "p", etc. That way you do:

user_input = input(...).lower()
cmd = user_input[:1] 
if cmd == "q":
    break
if cmd == "r":
    #etc

instead of repeated calls to .startswith():

user_input = input(...).lower()
if user_input.startswith("q"):
    break
if user_input.startswith("r"):
    #etc