2013-11-21 3 views
0

получаю ошибку в моем коде TraceBack (самый последний вызов последним): Файл "C:/Users/Daniel Nase/Desktop/назначение 7 test.py", строка 119, в главном() Файл «C:/Users/Daniel Nase/Desktop/assign 7 test.py», строка 23, в основном calculate_weighted_average (score_ammount, scores_t, score_weight, average1, num_t) Файл «C:/Users/Daniel Nase/Desktop/assign 7 test.py ", строка 112, в calculate_weighted_average weighted_average_t = float (sum (average1)) * float ((score_weight.pop (0))/100) TypeError: неподдерживаемый тип операндов для/: 'str' и 'int'нужна помощь в поиске средневзвешенное

Я пытаюсь вычислить средневзвешенное значение, но я не знаю, что я делаю неправильно ... помогите пожалуйста !!!!

def main(): 
    score_type = ["tests","assignments","quizzes","labs"] 
    score_ammount = [0,0,0,0] 
    score_weight = [0,0,0,0] 
    final_weight = 0 

    scores_t = [0] 
    scores_a = [0] 
    scores_q = [0] 

    total = 0 
    average1 = [0] 
    average2 = [0] 
    average3 = [0] 

    num_t = 0 




    get_initial_input(score_type,score_ammount,score_weight) 
    get_scores(score_ammount,average1,average2,average3,total,scores_t,scores_a,scores_q) 
    calculate_weighted_average(score_ammount,scores_t, score_weight, average1, num_t) 



def get_initial_input(score_type,score_ammount,score_weight): 
    for x in range(0,4): 
     score_ammount[x] = input("How many " + score_type[x] + " are there?") 

    if input("Is there a final with a serperate weight?(1 = yes/0 = no) ") == '1': 
     final_weight = int(input("What is the weight of the final?(0-100) ")) 
    else: 
     final_weight = "" 

    total_weight = 0 
    while total_weight != 100: 
     total_weight = 0 
     print("") 
     print("Please make sure the weight of all scores add up to 100") 
     for x in range(0,3): 
      score_weight[x] = input("What is the weight of all the " + score_type[x]) 
      total_weight = total_weight + int(score_weight[x]) 
    return score_ammount, score_weight, final_weight 


def get_scores(score_ammount,average1,average2,average3,total,scores_t,scores_a,scores_q): 

    num_t = int(score_ammount.pop(0)) 
    print("") 

    for i in range(0,num_t): 
     scores_t.append(0) 

    for i in range(0, num_t): 
     y = i + 1 
     scores_t[i] = int(input("Please input test score #" + str(y) + " ")) 

    print(" ") 

    for i in range(0,1): 
     total = total + sum(scores_t) 
    average1 = total/num_t 
    print(int(average1)) 


########################################################################### 

    num_a = int(score_ammount.pop(0)) 
    print("") 

    for i in range(0,num_a): 
     scores_a.append(0) 

    for i in range(0, num_a): 
     y = i + 1 
     scores_a[i] = int(input("Please input assignment score #" + str(y) + " ")) 

    print(" ") 
    total = 0 
    for i in range(0,1): 
     total = total + sum(scores_a) 
    average2 = total/num_a 
    print(int(average2)) 

########################################################################### 

    num_q = int(score_ammount.pop(0)) 
    print(" ") 

    for i in range(0,num_q): 
     scores_q.append(0) 

    for i in range(0, num_q): 
     y = i + 1 
     scores_q[i] = int(input("Please input quiz score #" + str(y) + " ")) 

    print(" ") 
    total = 0 
    for i in range(0,1): 
     total = total + sum(scores_q) 
    average3 = 0 + total/num_q 
    print(int(average3)) 

    return average1, average2, average3, total, scores_t, scores_a, scores_q, num_t, num_a, num_q 

def calculate_weighted_average(score_ammount, scores_t, score_weight, average1, num_t): 
    num_t = int(score_ammount.pop(0)) 
    for i in range (0,num_t): 
     average1[i] = sum(scores_t)/num_t 

     weighted_average_t = float(sum(average1))*float((score_weight.pop(0))/100) 
     print(weighted_average_t) 





main() 
+0

Как вы думаете, может означать сообщение об ошибке 'TypeError: неподдерживаемый тип операндов для /: 'str' и 'int''? Как вы думаете, что это говорит вам, что вы пытаетесь сделать? – DSM

+0

То, что я пытаюсь умножить str и int, но я не знаю, что делать, чтобы иметь amount1 be и int, который я могу использовать, чтобы получить средневзвешенный – user3015563

ответ

0

Это не то, что вы пытаетесь умножить строку и Int, но вы пытаетесь разделить их (сообщение об ошибке говорит /, не *). Вы можете легко преобразовать строку в int или float, хотя, как вы делали в этих строках:

final_weight = int(input("What is the weight of the final?(0-100) ")) 

scores_t[i] = int(input("Please input test score #" + str(y) + " ")) 

scores_a[i] = int(input("Please input assignment score #" + str(y) + " ")) 

scores_q[i] = int(input("Please input quiz score #" + str(y) + " ")) 

input всегда возвращает строку, и если вы хотите, чтобы получить номер из этого, вы должны конвертировать его. Вы не делали этого здесь:

score_ammount[x] = input("How many " + score_type[x] + " are there?") 

и здесь

 score_weight[x] = input("What is the weight of all the " + score_type[x]) 
     total_weight = total_weight + int(score_weight[x]) 

вы превратили значение score_weight[x] в целое число, прежде чем добавить в total_weight, но score_weight[x] сама по-прежнему является строкой.

Смежные вопросы