Reputation: 311
My task is to write a program that asks the user to enter 5 names which it stores in a list. Next, it picks one of these names at random and declares 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 generate a random name.
Upvotes: 16
Views: 226033
Reputation: 21
import random
one = input("Please enter name one:")
two = input('Please enter name two:')
three = input('Please enter name three:')
four = input('Please enter name four:')
five =input('Please enter name five:')
name=random.randint(1,5)
name = str(name)
if name == "1":
name = one
print('Well done '+ name +'. You are the winner!')
elif name == "2":
name = two
print('Well done '+ name +'. You are the winner!')
elif name == "3":
name = three
print('Well done '+ name +'. You are the winner!')
elif name == "4":
name = four
print('Well done '+ name +'. You are the winner!')
else:
name = five
print('Well done '+ name +'. You are the winner!')
Upvotes: 1
Reputation: 11659
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 error:
can't assign to literal
EDIT:
As per Arne's comment below, you can do this in Python for single line assignments in a slightly different way:
a, b = 2, 5
Upvotes: 27
Reputation: 2051
I got the same error: SyntaxError: can't assign to literal when I was trying to assign multiple variables in a single line.
I was assigning the values as shown below:
score = 0, isDuplicate = None
When I shifted them to another line, it got resolved:
score = 0
isDuplicate = None
I don't know why python does not allow multiple assignments at the same line but that's how it is done.
There is one more way to asisgn it in single line ie. Separate them with a semicolon in place of comma. Check the code below:
score = 0 ; duplicate = None
Upvotes: 0
Reputation: 16188
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]))
Upvotes: 31
Reputation: 250881
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 "<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
Valid identifier definition:
identifier ::= (letter|"_") (letter | digit | "_")*
letter ::= lowercase | uppercase
lowercase ::= "a"..."z"
uppercase ::= "A"..."Z"
digit ::= "0"..."9"
Upvotes: 4
Reputation: 3948
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.
Upvotes: 3
Reputation: 97565
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
?
Upvotes: 5
Reputation: 81
You should use variables to store the names.
Numbers can't store strings.
Upvotes: 1
Reputation: 1121366
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 "<stdin>", 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))
Upvotes: 8