cs50 / problems

Checks for check50
134 stars 227 forks source link

CS50P - Week 4 | randrange(0, 9) usage doesn't fail check in Little Professor problem #238

Open Jayquon opened 5 months ago

Jayquon commented 5 months ago

I accidentally discovered an issue with these 3 checks within the Little Professor problem in CS50P:

Screenshot 2024-03-17 153753

While using the random library in the generate_integer function, I mistakenly used randrange instead of randint and passed in (0, 9) (10, 99) and (100, 999) respectively.

def generate_integer(level):
    if level == 1:
        return random.randrange(0, 9)
    elif level == 2:
        return random.randrange(10, 99)
    else:
        return random.randrange(100, 999)

Despite my error using randrange, all 3 checks for the integer ranges still passed. And failed on the next check, leading me to believe that there was an issue with my loops.

Screenshot 2024-03-17 142820

After I increased the upper limit within randrange or changed to randint on all 3 levels, I passed on all checks.

Screenshot 2024-03-17 155108

Here is my full code snippet (fixed):

import random

def main():
    level = get_level()

    score = 0

    for _ in range(10):
        x = generate_integer(level)
        y = generate_integer(level)

        for i in range(3):
            answer = input(f"{x} + {y} = ").strip()
            if (x + y) == int(answer):
                score += 1
                break
            else:
                print("EEE")
        else:
            print(f"{x} + {y} = {x + y}")

    print(f"Score: {score}")

def get_level():
    while True:
        level = input("Level: ")
        if level.isdigit():
            level = int(level)
            if 0 < level < 4:
                return level

def generate_integer(level):
    if level == 1:
        return random.randint(0, 9)
    elif level == 2:
        return random.randint(10, 99)
    else:
        return random.randint(100, 999)

if __name__ == "__main__":
    main()