Python:无法分配给文字

Sta*_*y J 6 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!')
Run Code Online (Sandbox Code Playgroud)

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

Man*_*rth 22

=运算符的左侧需要是变量.你在这里做的是告诉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]))
Run Code Online (Sandbox Code Playgroud)

使用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]))
Run Code Online (Sandbox Code Playgroud)


try*_*arn 11

只需添加1个可能产生相同错误的方案:

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

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

int a =2, b=3;
Run Code Online (Sandbox Code Playgroud)

在Python中:

a= 2, b= 5
Run Code Online (Sandbox Code Playgroud)

将给出"无法分配给文字"的错误

  • 我知道这已经有一段时间了,但是今天您的回答确实对我有帮助,因为我试图在同一行中完成多项作业。为什么允许多重赋值,但不允许?谢谢 (3认同)
  • @BowenLiu Python 允许您将一个值分配给多个变量 `a=b=3`,从而设置 `a=3` 和 `b=3`。因此语句 `a=2, b=5` 将尝试设置 `a=5` (有效)和 `2,b=5` (无效)。您既不能解压“5”(因为“5”不可迭代),也不能将任何内容分配给文字“2”。 (3认同)

Mar*_*ers 6

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

>>> 1
1
>>> 1 = 'something'
  File "<stdin>", line 1
SyntaxError: can't assign to literal
Run Code Online (Sandbox Code Playgroud)

您可能想要使用列表或字典:

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

使用列表也可以更容易地选择随机值:

winner = random.choice(names)
print('Well done {}. You are the winner!'.format(winner))
Run Code Online (Sandbox Code Playgroud)


Eri*_*ric 5

1是一个字面意思。name = value是一个作业。1 = value是对文字的赋值,这是没有意义的。你为什么要1表达除 之外的其他意思1