2013-09-10 6 views
-1

Моя задача - написать программу, которая просит пользователя ввести 5 имен, которые он хранит в списке. Затем попросите его выбрать одно из этих имен наугад и объявить этого человека победителем. Единственная проблема в том, что, когда я пытаюсь запустить его, он говорит can't assign to literalPython: невозможно присвоить литералу

Это мой код:

import random 
1=input("Please enter name 1:") 
2=int(input('Please enter name 2:')) 
3=int(input('Please enter name 3:')) 
4=int(input('Please enter name 4:')) 
5=int(input('Please enter name 5:')) 
name=random.randint(1,6) 
print('Well done '+str(name)+'. You are the winner!') 

я должен быть в состоянии genertate случайного имени. Так меня научили. ПОЖАЛУЙСТА, ПОМОГИТЕ, и перестаньте идти ко мне за кодом, просто помогите мне исправить это. Это конечно работа !!!

ответ

16

Левая часть оператора = должна быть переменной. Что вы здесь делаете, говорит python: «Вы знаете номер один? Установите его на введенную строку». 1 - это буквальное число, а не переменная. 1 всегда 1, вы не можете «установить» его на что-то еще.

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

Вместо этого используйте lists:

import random 

namelist = [] 
namelist.append(input("Please enter name 1:")) #Stored in namelist[0] 
namelist.append(input('Please enter name 2:')) #Stored in namelist[1] 
namelist.append(input('Please enter name 3:')) #Stored in namelist[2] 
namelist.append(input('Please enter name 4:')) #Stored in namelist[3] 
namelist.append(input('Please enter name 5:')) #Stored in namelist[4] 

nameindex = random.randint(0, 5) 
print('Well done {}. You are the winner!'.format(namelist[nameindex])) 

Используя цикл, вы можете сократить еще больше:

import random 

namecount = 5 
namelist=[] 
for i in range(0, namecount): 
    namelist.append(input("Please enter name %s:" % (i+1))) #Stored in namelist[i] 

nameindex = random.randint(0, namecount) 
print('Well done {}. You are the winner!'.format(namelist[nameindex])) 
+0

Учитывая это это новичок, возможно, лучшие имена переменных, чем «a» для списка имен, и «имя» для индекса было бы целесообразным. Кроме того, for-loop версия всегда печатает «имя 1:» для каждого имени. – Oddthinking

+0

@Oddthinking Сделано и сделано, спасибо :) – Manishearth

+0

Из того, что я читал, синтаксис '' format '% (args)' устарел, и вы должны использовать '' foo {0} bar ".format (args)'. – Kevin

3

1, 2, 3, ... являются недопустимыми идентификаторами в python, потому что в первую очередь они являются целыми объектами, а во-вторых, в python имя переменной не может начинаться с числа.

>>> 1 = 12 #you can't assign to an integer 
    File "<ipython-input-177-30a62b7248f1>", line 1 
SyntaxError: can't assign to literal 

>>> 1a = 12 #1a is an invalid variable name 
    File "<ipython-input-176-f818ca46b7dc>", line 1 
    1a = 12 
    ^
SyntaxError: invalid syntax 

Действительно identifier definition:

identifier ::= (letter|"_") (letter | digit | "_")* 
letter  ::= lowercase | uppercase 
lowercase ::= "a"..."z" 
uppercase ::= "A"..."Z" 
digit  ::= "0"..."9" 
6

Вы пытаетесь присвоить буквальным целочисленных значений. 1, 2 и т. Д. Являются недопустимыми именами; они только действительные числа:

>>> 1 
1 
>>> 1 = 'something' 
    File "<stdin>", line 1 
SyntaxError: can't assign to literal 

Вы, вероятно, хотите использовать список или словарь вместо:

names = [] 
for i in range(1, 6): 
    name = input("Please enter name {}:".format(i)) 
    names.append(name) 

Использование списка делает его гораздо проще выбрать случайное значение также:

winner = random.choice(names) 
print('Well done {}. You are the winner!'.format(winner)) 
-1

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

Номера не могут хранить строки.

4

1 - буква. name = value - это задание. 1 = value - это задание буквальному, что не имеет смысла. Почему вы хотите, чтобы 1 означал нечто, отличное от 1?

3

Это взято из документации Python:

Identifiers (also referred to as names) are described by the following lexical definitions: 

identifier ::= (letter|"_") (letter | digit | "_")* 

letter  ::= lowercase | uppercase 

lowercase ::= "a"..."z" 

uppercase ::= "A"..."Z" 

digit  ::= "0"..."9" 

Identifiers are unlimited in length. Case is significant. 

Это должно объяснить, как называть переменные.

3

Просто добавить еще 1 сценарий, который может дать ту же ошибку:

Если вы попытаетесь присвоить значения нескольким переменным, вы также получите такую ​​же ошибку. Напр.

В С (и во многих других языках), это возможно:

int a =2, b=3; 

В Python:

a= 2, b= 5 

даст "не может присвоить литерал" ошибка

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