Hjälp med felmeddelande Python

Permalänk
Medlem

Hjälp med felmeddelande Python

Hej!
Är relativt ny inom programmering men särskilt inom Python.
Jag har skrivit ett program som funkar som klockan men sen ville jag lägga till en liten funktion men får bara ett felmeddelande hur jag än gör... jag har googlat och testat och ändrat här och där men hur jag än försöker så gör den inte som jag vill.
Det värsta är att jag tror att det är ett ytterst pinsamt enkelt fel men jag är inte så bra på felhantering ännu så jag känner mig lite vilsen.
Felet jag får är "Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
Yes
NameError: name 'Yes' is not defined"

Jag försöker lägga till en while loop som ska köra programmet om igen om användaren svarar "Yes" på en fråga som ställts längst ner.

#funktions sektionen def grade_to_number(letter_grade): if letter_grade == "IG": return 0 elif letter_grade == "G": return 1 elif letter_grade == "VG": return 3 else: return 5 def read_grades(): "Read grades 5 times and return number grades" grades = [] for course_number in range(1,6): letter_grade = input("What grade did the student get for course number " + str(course_number) + "? ") number_grade = grade_to_number(letter_grade) grades.append(number_grade) return grades def average(grades): return sum(grades) / len(grades) # main sektionen av programmet question = "Yes" while question == True: current_year = 1 while current_year <= 3: print("Please input student´s grades for year " + str(current_year)) grades = read_grades() avg = average(grades) print("This is the average grade for this year " + str(avg)) if avg < 1: print("Student must repeat year " + str(current_year)) else: if avg == 5: print("Student gets a gold star for year " + str(current_year)) print("Student passes year " + str(current_year)) current_year = current_year + 1 question = print ("Do you want to start over with a new student(Yes/No)?")

Permalänk
Medlem

Använd input istället för print:

question = input("Do you want to start over with a new student(Yes/No)?")

Visa signatur

Computers make it easier to do a lot of things, but most of the things they make it easier to do don’t need to be done.

Permalänk
Medlem

Nu är jag ingen expert och försöker själv lära mig lite python sporadiskt.

Men den sista raden så skriver du bara ut "Do you want to start over with a new student(Yes/No)?" och tar ingen input?

Sen i din while-sats där du testar om "question == True", borde du inte testa " question == "Yes" " ?

Inte säkert att det jag säger stämmer men du kan ju alltid testa tills någon annan mer påläst kan svara

Permalänk
Medlem

Av tracebacken att döma ser det ut som att du någonstans använder Yes som en variabel när det förmodligen ska vara en sträng. Alltså att du glömt fnupparna runt "Yes". Ser ju inte ut så i koden du länkade, men det kanske finns något mer nånstans?

Permalänk
Medlem

Ah men gud jag ser ju att jag som du sa poptermos att jag har ju glömt å skriva input framför frågan längst ner.... jag sa ju att det skulle vara en pinsam enkel miss...

Fy vad dum jag känner mig nu.... men känns br att det ändå inte var att jag hade skrivit en felaktig kod utan att jag bara hade glömt något....slarvfel...suck...

Tack så hemskt mycket alla
*pinsamt*

#funktions sektionen def grade_to_number(letter_grade): if letter_grade == "IG": return 0 elif letter_grade == "G": return 1 elif letter_grade == "VG": return 3 else: return 5 def read_grades(): "Read grades 5 times and return number grades" grades = [] for course_number in range(1,6): letter_grade = input("What grade did the student get for course number " + str(course_number) + "? ") number_grade = grade_to_number(letter_grade) grades.append(number_grade) return grades def average(grades): return sum(grades) / len(grades) # main sektionen av programmet question = "Yes" while question == "Yes": current_year = 1 while current_year <= 3: print("Please input student´s grades for year " + str(current_year)) grades = read_grades() avg = average(grades) print("This is the average grade for this year " + str(avg)) if avg < 1: print("Student must repeat year " + str(current_year)) else: if avg == 5: print("Student gets a gold star for year " + str(current_year)) print("Student passes year " + str(current_year)) current_year = current_year + 1 question = input("Do you want to start over with a new student(Yes/No)?")

Permalänk
Medlem
Skrivet av ZeneBent:

Nu är jag ingen expert och försöker själv lära mig lite python sporadiskt.

Men den sista raden så skriver du bara ut "Do you want to start over with a new student(Yes/No)?" och tar ingen input?

Sen i din while-sats där du testar om "question == True", borde du inte testa " question == "Yes" " ?

Inte säkert att det jag säger stämmer men du kan ju alltid testa tills någon annan mer påläst kan svara

"True" är en boolean som Python kan utvärdera för att sedan gå olika vägar. "Yes" har ingen funktion alls i sammanhanget. Som påpekat så borde question var True istället för Yes, så du hade ju rätt i vart felet låg i alla fall

Däremot kan man skriva om:

question == True while question == True: if something: else: question == False

Som:

while True: if something: else: break

Visa signatur

+++ Divide By Cucumber Error. Please Reinstall Universe And Reboot +++

"Real stupidity beats artificial intelligence every time." - Terry Pratchett, Hogfather

Permalänk
Medlem

Antar att

"Read grades 5 times and return number grades"

ska vara en kommentar egentligen?

Sen kan du fundera på vad som händer om man fyller i "felaktiga" svar på frågorna. När den frågar efter betyg och man svarar "ig" eller "hej" så får man ändå 5 poäng(vilket motsvarar MVG antar jag?).

Visa signatur

Bara gammalt skräp...