可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
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.