Skip to content Skip to sidebar Skip to footer

Why Does My "if" Statement In Python Not Work?

I'm wondering why my 'if' statement isn't working. I get asked for the input, and nothing happens after. It won't print out whether it is A, B, C or D. def main(): printLetterG

Solution 1:

There are two issues:

  • The input, inside main, needs to be converted to an int
    • Currently, the input is a str, which will never be True when tested for membership inside of A, B, C or D
    • Example: '90' == 90 compares as False, so '90' in A is False
  • Use the membership operator, in, instead of the comparison operator, ==.
defmain():
    printLetterGradeFromNumber(int(input("The grade as a number: ")))

defprintLetterGradeFromNumber(number_grade):
    A = range(90, 100)
    B = range(80, 89)
    C = range(70, 79)
    D = range(60, 69)

    if number_grade in A:
         print("That student gets an A")
    elif number_grade in B:
        print("That student gets a B")
    elif number_grade in C:
        print("That student gets a C")
    elif number_grade in D:
        print("That student gets a D")

    return number_grade

main()

Output:

Thegradeasanumber:  90ThatstudentgetsanA

Alternate implementation:

  • Don’t Forget NumPy!
  • numpy.digitize
    • digitize returns the index of value, within bins. value < 60 returns index = 0, while value >= 90 returns index = 4.
    • A letter grade is found, using the index of grades. As such, the order of grades must correspond to bins.
from numpy import digitize

defprint_letter_grade():
    value = int(input('The grade as a number: '))
    grades = ['F', 'D', 'C', 'B', 'A']
    index = digitize(value, bins=[60, 70, 80, 90])
    print(f'The student gets an {grades[index]}')

Solution 2:

I hope this is what you are looking for

defprintLetterGradeFromNumber(number_grade):

    #A = range(90, 100)#B = range(80, 89)#C = range(70, 79)#D = range(60, 69)if number_grade >= 90and number_grade <= 100:
         print("That student gets an A")
    if number_grade >= 80and number_grade <= 89:
         print("That student gets a B")
    elif number_grade >= 70and number_grade <= 79:
        print("That student gets a C")
    elif number_grade >= 60and number_grade <= 69:
        print("That student gets a D")

   return number_grade

Solution 3:

range(90, 100) equals (90, 91, 92, 93, 94, 95, 96, 97, 98, 99)

You need to use 'in' operator

if number_grade in A:
         print("That student gets an A")
    elif number_grade in B:
        print("That student gets a B")
    elif number_grade in C:
        print("That student gets a C")
    elif number_grade in D:
        print("That student gets a D")

Solution 4:

You don’t need to define a function. Use a “For” loop.

Set your grades to A=range(90, 101). B=range(80, 90), C=range(70, 80), D=range(60, 70)

When you use ranges python excludes the upper bound integer

Post a Comment for "Why Does My "if" Statement In Python Not Work?"