Home > database >  Why wouldn't gcode == code or code1 or code2 or code3 work anywhere?
Why wouldn't gcode == code or code1 or code2 or code3 work anywhere?

Time:12-13

This is an assignment for a computer science class. Is there a way to make it work, or do this more efficiently? The goal of the program is to have the user guess all four numbers (doesn't have to be in order), tell them if they are correct and display the amount of tries. The assignment requires at least one function with parameters and one list be included.

import random

# Sets tries and isCorrect to 0- not broken
tries = 0
isCorrect = 0

# Generates 4 random numbers- not broken
for i in range(4):
    code = random.randint(1, 9)
    code1 = random.randint(1, 9)
    code2 = random.randint(1, 9)
    code3 = random.randint(1, 9)
    
# Prints the random numbers for now- not broken
print(code)
print(code1)
print(code2)
print(code3)
 
# Guess = If the guess variables are equal to the code it tells you you're right
def guess(a, b, c, d):
    
    global isCorrect
    
    if a == code or code1 or code2 or code3 and b == code or code1 or code2 or code3 and c == code or code1 or code2 or code3 and d == code or code1 or code2 or code3:
        print("You got it correct!")
    else:
        print("You got it wrong.") 
        return(a, b, c, d)


# While isCorrect is still 0 it prompts you to guess again, if it's correct it sets isCorrect to one
while isCorrect == 0:
    gcode = int(input("Input your first guess: "))
    gcode1 = int(input("Input your second guess: "))
    gcode2 = int(input("Input your third guess: "))
    gcode3 = int(input("Input your fourth guess: "))
    guess(gcode, gcode1, gcode2, gcode3)
    tries = tries   1
    #print("You got it wrong.")
    if gcode == code or code1 or code2 or code3 and gcode1 == code or code1 or code2 or code3 and gcode2 == code or code1 or code2 or code3 and gcode3 == code or code1 or code2 or code3:
        isCorrect = 1

# Makes it so the plural matches amount of tries
if tries != 1:
    print("It took you", tries, "tries.")
else:
    print("It took you", tries, "try.")

CodePudding user response:

I think you have to give your assignment right away therefore my help :-) I also added the use of lists.

Here is the working code but please double check it.

import random

# Sets tries and isCorrect to 0- not broken
tries = 0
isFalse = True # use boolean variable to make it more clear - 0 would be an integer


# Create a list in which you store the 4 random values
# Initialize the empty list, so it is defined in the for loop
random_values_list = []
# Generates 4 random numbers- not broken

for i in range(4):
    # append 4 times a random value to the list
    random_values_list.append(random.randint(1, 9))

# sort the list here is important, later we check the sorted input against this list
random_values_list.sort()
# Prints the random numbers
print(random_values_list)

 
# Guess = If the guess variables are equal to the code it tells you you're right
def check_guess(input_guesses_list, random_values_list):
    
    print(input_guesses_list)
    print(random_values_list)
    
    # now you can simply check if the lists are the same
    if input_guesses_list == random_values_list:
        print("You got it correct!")
        # return false to break the while loop, because the user got it right
        return False
    else:
        print("You got it wrong.")
        # return true to keep the while loop alive
        return True

# Save the inputs also in a list
input_guesses_list = []

# While isCorrect is still 0 it prompts you to guess again, if it's correct it sets isCorrect to one
while isFalse:
    input_guesses_list.append(int(input("Input your first guess: ")))
    input_guesses_list.append(int(input("Input your second guess: ")))
    input_guesses_list.append(int(input("Input your third guess: ")))
    input_guesses_list.append(int(input("Input your fourth guess: ")))
    # also sort this list
    input_guesses_list.sort()
    isFalse = check_guess(input_guesses_list, random_values_list)
    tries  = 1
    # important: reset the list with the guesses!
    input_guesses_list = []
    

# Makes it so the plural matches amount of tries
if tries != 1:
    print("It took you", tries, "tries.")
else:
    print("It took you", tries, "try.")

CodePudding user response:

Your if statement is wrong. That's not the way to use or in python. this is the correct way:

if gcode == code or gcode == code1 or gcode == code2 or gcode == code3 and ...

The way you wrote it, it takes code1 (or code2, 3, ..) as an expression and checks if they are true. which is not what you would want here.

And of course, this is a messy way to code. One better way would be to put the codes in a list and gcodes in another list and then check them in a for loop.

  • Related