Python:无法分配给文字

时间:2013-09-10 10:31:54

标签: python python-3.x

我的任务是编写一个程序,要求用户输入它存储在列表中的5个名称。接下来,它随机选择其中一个名称并宣布该人为胜利者。唯一的问题是,当我尝试运行它时,它会显示can't assign to literal

这是我的代码:

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

我必须能够生成随机名称。

9 个答案:

答案 0 :(得分:20)

=运算符的左侧需要是变量。你在这里做的是告诉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]))

使用for循环,你可以减少更多:

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

答案 1 :(得分:9)

添加另外一个可能会产生相同错误的方案:

如果您尝试将值分配给多个变量,那么您也会收到相同的错误。例如,

在C(和许多其他语言)中,这是可能的:

int a =2, b=3;

在Python中:

a= 2, b= 5

会给"不能分配到文字"错误

答案 2 :(得分:6)

您正尝试分配文字整数值。 12等不是有效名称;它们只是有效的整数:

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

答案 3 :(得分:4)

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"

答案 4 :(得分:4)

1是一个文字。 name = value是一项任务。 1 = value是对文字的赋值,这没有任何意义。为什么您希望1表示1以外的其他内容?

答案 5 :(得分: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.

这应解释如何命名变量。

答案 6 :(得分:2)

我遇到了同样的错误: SyntaxError:当我试图在一行中分配多个变量时,无法将其分配给文字

我正在按如下所示分配值:

    score = 0, isDuplicate = None

当我将它们移到另一行时,它得到解决:

    score = 0
    isDuplicate = None

我不知道为什么python不允许在同一行上进行多次分配,但这是完成的方式。

还有另一种方法可以单行显示它。用分号代替逗号分隔它们。检查以下代码:

score = 0 ; duplicate = None

答案 7 :(得分:0)

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

答案 8 :(得分:-1)

您应该使用变量来存储名称。

Numbers无法存储字符串。