2013-04-02 2 views
0

Я пытаюсь закончить задание для класса «определения класса»Не понимая мою питона дилемму

Напишите программу, которая будет вводить 3 тестовая программа scores.The должна определять и отображать их программу average.The должны затем отобразите соответствующую буквенную оценку на основе среднего значения. Буквы должны быть определены с использованием стандартной 10-балльной шкалы: (A = 90-100; B = 80-89,999; C = 70-79,999 и т. д.)

Пока что мне удалось собрать (и он усредняет работу)

def main(): 
    score1 = input("What is the first test score? ") 
    score2 = input("What is the second test score? ") 
    score3 = input("What is the third test score? ") 
    scoreaverage = score1 + score2 + score3 
score = (scoreaverage/3) 
    if score < 60: 
     grade="F" 
elif score < 70: 
     grade="C" 
elif score < 80: 
     grade="B" 
elif score < 90: 
     grade="A" 
else: 
     print score, " is the student's grade average!" 


main() 

Если я заменю оценку на класс, я получаю сообщение об ошибке.

raceback (most recent call last): 
File "<stdin>", line 1, in <module> 
    File "<stdin>", line 16, in main 
UnboundLocalError: local variable 'grade' referenced before assignment 

Так что мой вопрос в том, как правильно получить графу для печати?

+1

Это ваш полный код с отступом именно так? Я так не думаю, потому что он не будет поднимать UnboundLocalErorr для класса ... – Benjamin

+0

Вы должны использовать 4 пробела, а не вкладку для отступов, иначе код вдавливается при вставке на SO. Проблема в вашем коде заключается в том, что 'print' выполняется, когда' grade' не был определен. – Bakuriu

+0

@ Joshua Если один из этих ответов решил вашу проблему, вы должны принять его, настроив галочку на лучший ответ. – askewchan

ответ

3
def main(): 
    score1 = input("What is the first test score? ") 
    score2 = input("What is the second test score? ") 
    score3 = input("What is the third test score? ") 
    scoreaverage = score1 + score2 + score3 
    score = (scoreaverage/3) 
    if score < 60: 
     grade="F" 
    elif score < 70: 
     grade="C" 
    elif score < 80: 
     grade="B" 
    elif score < 90: 
     grade="A" 
    else: 
     print score, " is the student's grade average!" 

main() 

Это будет ваш код с отступом. Вы уверены, что получили ошибку, о которой вы упоминаете? Следующий код генерирует ошибку, о которой вы упоминаете.

print grade, " is the student's grade average!" 

Вы можете исправить это следующим образом:

def main(): 
    score1 = input("What is the first test score? ") 
    score2 = input("What is the second test score? ") 
    score3 = input("What is the third test score? ") 
    scoreaverage = score1 + score2 + score3 
    score = (scoreaverage/3) 
    grade = 'Unknown' 
    if score < 60: 
     grade="F" 
    elif score < 70: 
     grade="C" 
    elif score < 80: 
     grade="B" 
    elif score < 90: 
     grade="A" 

    print "%s is the student's grade average!" % grade 

main() 
+0

О, извините. Я хотел сказать, что я пытаюсь получить оценку для печати, поэтому это будет «Ученик усреднил B» или что-то вроде этого, –

+0

выглядит так, будто вы получили то, что искали. Оформить исправление – karthikr

0

Ваши сравнения класса выключены на 10 пунктов. Вы не будете присваивать что-либо для оценки, если оценка составляет от 90 до 100. И совет по программисту-новичку: используйте отладчик. Вы бы обнаружили проблему всего за несколько минут, если бы вы ее преодолели.

Try:

if score < 60: 
    grade="F" 
elif score < 70: 
    grade="D" 
elif score < 80: 
    grade="C" 
elif score < 90: 
    grade="B" 
else: 
    grade="A" 
3

Добро пожаловать на SO. Как объяснялось другими, ваша проблема заключалась в доступе к классу, прежде чем назначать ему значение. Вот еще одно предложение сделать то, что вы хотите сделать: (см. Комментарии)

#disregard next line if you are using Python 3.3 
from __future__ import division 

#use a list to store the scores 
scores = [] 

#if you are using 2.7 replace input with raw_input 
#use float() to convert the input to float 
scores.append(float(input("First score? "))) 
scores.append(float(input("Second score? "))) 
scores.append(float(input("Third score? "))) 

#More general way of calculating the average 
score = sum(scores)/len(scores) 

#You could use a dictionary for score-grade mapping 
grades = {100: 'A', 90: 'A', 80: 'B', 
      70: 'C', 60: 'D', 50: 'E', 
      40: 'F', 30: 'F', 20: 'F', 
      10: 'F', 0: 'F'} 

#removes the remainder from the score 
#to make use of the above dictionary 
grade = grades[score - (score % 10)] 

#Use string formatting when printing 
print('grade: %s, score: %.2f' % (grade, score)) 
Смежные вопросы