Knightleigh
Knightleigh

Reputation: 15

Python : How to print individual element of Tuple in print function

My code:

def askTestScores():
   test1 = int(input("Enter test 1 score: "))
   test2 = int(input("Enter test 2 score: "))
   test3 = int(input("Enter test 3 score: "))
   test4 = int(input("Enter test 4 score: "))
   test5 = int(input("Enter test 5 score: "))

   testScores = (test1,test2,test3,test4,test5)

   return testScores



def determine_grade(testScores):
   for i in range(testScores):

      if i >= 90 and i <= 100:
         return "A"
      elif i >= 80 and i <= 89:
         return "B"
      elif i >= 70 and i <= 79:
         return "C"
      elif i >= 60 and i <= 69:
         return "D"
      else:
         return "F"



 def displayGrades(testScores): 

   print("Score\t\t Grade")
   print("-----------------------")
   print(f"{testScores[0]}\t\t {determine_grade(testScores[0])}")
   print(f"{testScores[1]}\t\t {determine_grade(testScores[1])}")
   print(f"{testScores[2]}\t\t {determine_grade(testScores[2])}")
   print(f"{testScores[3]}\t\t {determine_grade(testScores[3])}")
   print(f"{testScores[4]}\t\t {determine_grade(testScores[4])}")

x = askTestScore
displayGrades(x)

This is only printing "F" when I use the range function in the loop for determine_grade function. What I want is, to print each grade individually, but when I remove the range function I am getting type error: saying int object not iterable. How can I solve this?

Upvotes: 0

Views: 80

Answers (3)

joshuaprakasam
joshuaprakasam

Reputation: 134

Why do you need for in determine_grades ? I think you meant this

def determine_grades(testScore):
    if testScore >= 90 and testScore <= 100:
         return "A"
    elif testScore >= 80 and testScore <= 89:
         return "B"
    elif testScore >= 70 and testScore <= 79:
         return "C"
    elif testScore >= 60 and testScore <= 69:
         return "D"
    else:
         return "F"

def displayGrades(testScores): 

   print("Score\t\t Grade")
   print("-----------------------")
   for testScore in testScores:
       print(f"{testScore}\t\t {determine_grades(testScore)}")

Here you loop testScores in displayGrades to pass one score at a time to determine_grade and print them.

Because if you used for loop in determine_grades then you need to return a list of grades and not String.

You can improve make your code by appending the inputs to a list instead of tuple

def askTestScores():
    testScores = []

    for i in range(5):
        score = int(input(f"Enter test {i + 1} score: "))
        testScores.append(score)

    return testScores

EDIT: If you need tuple you can convert the list to tuple

def askTestScores():
    testScores = []

    for i in range(5):
        score = int(input(f"Enter test {i + 1} score: "))
        testScores.append(score)

    testScores = tuple(testScores)
    return testScores

Upvotes: 1

Fahad
Fahad

Reputation: 22

the easiest way to do it is to include each item of your tuple in a list and remove the range function:

def askTestScores():
   test1 = int(input("Enter test 1 score: "))
   test2 = int(input("Enter test 2 score: "))
   test3 = int(input("Enter test 3 score: "))
   test4 = int(input("Enter test 4 score: "))
   test5 = int(input("Enter test 5 score: "))

   testscores = ([test1],[test2],[test3],[test4],[test5])

   return testscores



def determine_grade(testscores):
    for i in testscores:
        if i >= 90 and i <= 100:
            return "A"
        elif i >= 80 and i <= 89:
            return "B"
        elif i >= 70 and i <= 79:
            return "C"
        elif i >= 60 and i <= 69:
            return "D"
        else:
            return "F"



def displayGrades(testscores):
     print("Score\t\t Grade")
     print("-----------------------")
     print(f"{testscores[0]}\t\t {determine_grade(testscores[0])}")
     print(f"{testscores[1]}\t\t {determine_grade(testscores[1])}")
     print(f"{testscores[2]}\t\t {determine_grade(testscores[2])}")
     print(f"{testscores[3]}\t\t {determine_grade(testscores[3])}")
     print(f"{testscores[4]}\t\t {determine_grade(testscores[4])}")

x = askTestScores()
displayGrades(x)
displayGrades(x)

Upvotes: 0

Maghil vannan
Maghil vannan

Reputation: 505

instead of range() Use:

for i in testscores :

Upvotes: 3

Related Questions