2015-10-10 3 views
-3

Я пытаюсь написать программу, в которой результаты тестов собираются в списках, а затем выводятся определенные факторы, такие как высшие баллы. Однако, когда я пытаюсь назначить intH1 (самый высокий результат для теста 1), я получаю вышеуказанную ошибку. Линия intH1 = score1_list[intCount] and strHN1 = name_list[intCount]Python: «Невозможно назначить оператору» Синтаксическая ошибка

if score1_list[intCount] > intH1: 
    intH1 = score1_list[intCount] and strHN1 = name_list[intCount] 
if score2_list[intCount] > intH2: 
    intH2 = score2_list[intCount] and strHN2 = name_list[intCount] 
if score3_list[intCount] > intH3: 
    intH3 = score3_list[intCount] and strHN3 = name_list[intCount] 
if total_list[intCount] > intHT: 
    intHT = total_list[intCount] and strHNT = name_list[intCount]` 
+0

Что вы надеетесь 'intH1 = score1_list [intCount] и strHN1 = NAME_LIST [intCount]' бы достичь? Это неправда Python. –

+0

Я пытался изменить 'intH1' на' score1_list [intCount] ', если' intH1' был меньше, чем 'score1_list [intCount]', а также изменить 'strHN1' (имя студента) на' name_list [intCount] ', чтобы они могут быть выведены вместе, чтобы сказать: «Самый высокий балл для теста 1 был ... по ...». Я извиняюсь за свой ужасный код, я изучал Python всего пару недель. –

ответ

3

Вы не можете использовать and назначить две переменные. Python анализирует ваше назначение, как:

intH1 = (score1_list[intCount] and strHN1) = name_list[intCount] 

пытается присвоить результат name_list[intCount] выражения для обоих intH1 и к score1_list[intCount] and strHN1. and является оператором, который может использоваться только в выражениях , но назначение заявление. Выражения могут содержать выражения, выражения не могут содержать операторов.

Вот почему defined grammar for assignments использует грамматические сущности * expression_list and yield_expression , two expression forms you can use, only in the part to the right of the = `знак равенства:

assignment_stmt ::= (target_list "=")+ (expression_list | yield_expression) 

в то время как target_list определение не допускает использование произвольных выражений.

Используйте отдельные линии для назначения:

intH1 = score1_list[intCount] 
strHN1 = name_list[intCount] 

или использовать кортеж назначения:

intH1, strHN1 = score1_list[intCount], name_list[intCount] 
+0

Спасибо, это исправлено. –

1

Каждая ветвь if выполняет два задания. Вам не нужно and между ними, вам просто нужно разделить их на два заявления:

if score1_list[intCount] > intH1: 
    intH1 = score1_list[intCount] 
    strHN1 = name_list[intCount] 
if score2_list[intCount] > intH2: 
    intH2 = score2_list[intCount] 
    strHN2 = name_list[intCount] 
if score3_list[intCount] > intH3: 
    intH3 = score3_list[intCount] 
    strHN3 = name_list[intCount] 
if total_list[intCount] > intHT: 
    intHT = total_list[intCount] 
    strHNT = name_list[intCount] 
Смежные вопросы