Mijn taak is om een programma te schrijven dat de gebruiker vraagt om 5 namen in te voeren die het opslaat in een lijst. Vervolgens kiest het willekeurig een van deze namen en verklaart die persoon de winnaar. Het enige probleem is dat wanneer ik het probeer uit te voeren, er staat can't assign to literal
.
Dit is mijn 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!')
Ik moet een willekeurige naam kunnen genereren.
Antwoord 1, autoriteit 100%
De linkerkant van de operator =
moet een variabele zijn. Wat je hier doet, is tegen python zeggen: “Ken je de nummer één? Zet het op de ingevoerde string.”. 1
is een letterlijk getal, geen variabele. 1
is altijd 1
, je kunt het niet op iets anders “instellen”.
Een variabele is als een vak waarin u een waarde kunt opslaan. 1
is een waarde die in de variabele kan worden opgeslagen. De input
-aanroep retourneert een string, een andere waarde die in een variabele kan worden opgeslagen.
Gebruik in plaats daarvan lijsten:
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]))
Als je een for-lus gebruikt, kun je nog meer verminderen:
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]))
Antwoord 2, autoriteit 68%
Gewoon nog 1 scenario toevoegen dat dezelfde fout kan geven:
Als u waarden aan meerdere variabelen probeert toe te kennen, krijgt u dezelfde foutmelding. Voor bijv.
In C (en vele andere talen) is dit mogelijk:
int a=2, b=3;
In Python:
a=2, b=5
geeft fout:
kan niet toewijzen aan letterlijke
BEWERKEN:
Volgens Arne’sopmerking hieronder, kun je dit in Python doen voor toewijzingen van één regel op een iets andere manier:
a, b = 2, 5
Antwoord 3, autoriteit 23%
U probeert toe te wijzen aan letterlijke gehele getallen. 1
, 2
, etc. zijn geen geldige namen; het zijn alleen geldige gehele getallen:
>>> 1
1
>>> 1 = 'something'
File "<stdin>", line 1
SyntaxError: can't assign to literal
U wilt waarschijnlijk in plaats daarvan een lijst of woordenboek gebruiken:
names = []
for i in range(1, 6):
name = input("Please enter name {}:".format(i))
names.append(name)
Het gebruik van een lijst maakt het ook veel gemakkelijker om een willekeurige waarde te kiezen:
winner = random.choice(names)
print('Well done {}. You are the winner!'.format(winner))
Antwoord 4, autoriteit 13%
1
is een letterlijke. name = value
is een opdracht. 1 = value
is een toewijzing aan een letterlijke, wat geen zin heeft. Waarom zou je willen dat 1
iets anders betekent dan 1
?
Antwoord 5, autoriteit 13%
1, 2, 3 ,… zijn ongeldige identifiers in python omdat het in de eerste plaats integere objecten zijn en ten tweede in python kan een variabelenaam niet beginnen met een getal.
>>> 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
Geldige identificatiedefinitie:
identifier ::= (letter|"_") (letter | digit | "_")*
letter ::= lowercase | uppercase
lowercase ::= "a"..."z"
uppercase ::= "A"..."Z"
digit ::= "0"..."9"
Antwoord 6, autoriteit 10%
Dit is overgenomen uit de Python-documenten:
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.
Dat zou moeten verklaren hoe u uw variabelen een naam geeft.
Antwoord 7
U moet variabelen gebruiken om de namen op te slaan.
Getallen kunnen geen tekenreeksen opslaan.
Antwoord 8
Ik kreeg dezelfde fout: SyntaxError: can’t assign to literaltoen ik probeerde meerdere variabelen in één regel toe te wijzen.
Ik kende de waarden toe zoals hieronder getoond:
score = 0, isDuplicate = None
Toen ik ze naar een andere lijn verplaatste, werd het opgelost:
score = 0
isDuplicate = None
Ik weet niet waarom python niet meerdere opdrachten op dezelfde regel toestaat, maar zo wordt het gedaan.
Er is nog een manier om het in een enkele regel toe te wijzen, dwz. Scheid ze met een puntkomma in plaats van een komma. Controleer de onderstaande code:
score = 0 ; duplicate = None
Antwoord 9
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!')