14

我的任务是编写一个程序,要求用户输入 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!')

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

4

9 回答 9

31

运算符的左侧=需要是一个变量。你在这里做的是告诉python:“你知道第一个吗?将它设置为输入的字符串。”。1是文字数字,而不是变量。1始终是1,您不能将其“设置”为其他内容。

变量就像一个盒子,您可以在其中存储一个值。1是可以存储在变量中的值。该input调用返回一个字符串,另一个可以存储在变量中的值。

相反,使用列表

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]))
于 2013-09-10T10:43:10.207 回答
23

只需再添加 1 个可能会产生相同错误的场景:

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

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

int a=2, b=3;

在 Python 中:

a=2, b=5

会报错:

不能分配给文字

编辑:

根据下面Arne 的评论,您可以在 Python 中以稍微不同的方式为单行赋值执行此操作: a, b = 2, 5

于 2016-02-24T07:11:26.713 回答
7

您正在尝试分配给文字整数值。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))
于 2013-09-10T10:34:26.027 回答
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 ::=  (letter|"_") (letter | digit | "_")*
letter     ::=  lowercase | uppercase
lowercase  ::=  "a"..."z"
uppercase  ::=  "A"..."Z"
digit      ::=  "0"..."9"
于 2013-09-10T10:32:55.160 回答
4

1是字面意思。name = value是一个任务。1 = value是对文字的赋值,这是没有意义的。您为什么要1表示除 之外的其他含义1

于 2013-09-10T10:35:40.550 回答
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.

这应该解释如何命名你的变量。

于 2013-09-10T10:35:56.717 回答
0

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

数字不能存储字符串。

于 2013-09-10T10:34:37.110 回答
0

我得到了同样的错误:SyntaxError: can't assign to literal当我试图在一行中分配多个变量时。

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

    score = 0, isDuplicate = None

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

    score = 0
    isDuplicate = None

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

还有另一种方法可以在单行中分配它,即。用分号代替逗号将它们分开。检查下面的代码:

score = 0 ; duplicate = None
于 2018-10-11T08:19:48.403 回答
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!')
于 2021-05-04T13:33:17.540 回答