Python: can't assign to literal

匿名 (未验证) 提交于 2019-12-03 01:54:01

问题:

My task it to write a program that asks the user to enter 5 names which it stores in a list. Next, get it to pick one of these names at random and declare that person as the winner. The only issue is that when i try to run it, it says can't assign to literal

This is my code:

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!') 

I have to be able to genertate a random name. This is the way i have been taught. PLEASE HELP and stop having a go at me for the code, just help me fix this. It's course work!!!

回答1:

The left hand side of the = operator needs to be a variable. What you're doing here is telling python: "You know the number one? Set it to the inputted string.". 1 is a literal number, not a variable. 1 is always 1, you can't "set" it to something else.

A variable is like a box in which you can store a value. 1 is a value that can be stored in the variable. The input call returns a string, another value that can be stored in a variable.

Instead, use 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])) 

Using a for loop, you can cut down even more:

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])) 


回答2:

You are trying to assign to literal integer values. 1, 2, etc. are not valid names; they are only valid integers:

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

You probably want to use a list or dictionary instead:

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

Using a list makes it much easier to pick a random value too:

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


回答3:

1 is a literal. name = value is an assignment. 1 = value is an assignment to a literal, which makes no sense. Why would you want 1 to mean something other than 1?



回答4:

This is taken from the Python docs:

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. 

That should explain how to name your variables.



回答5:

1, 2, 3 ,... are invalid identifiers in python because first of all they are integer objects and secondly in python a variable name can't start with a number.

>>> 1 = 12    #you can't assign to an integer   File "", line 1 SyntaxError: can't assign to literal  >>> 1a = 12   #1a is an invalid variable name   File "", line 1     1a = 12      ^ SyntaxError: invalid syntax 

Valid identifier definition:

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


回答6:

Just adding 1 more scenario which may give the same error:

If you try to assign values to multiple variables, then also you will receive same error. For e.g.

In C (and many other languages), this is possible:

int a =2, b=3; 

In Python:

a= 2, b= 5 

will give "can't assign to literal" error



回答7:

You should use variables to store the names.

Numbers can't store strings.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!