Python: can't assign to literal

后端 未结 8 2225
旧时难觅i
旧时难觅i 2020-11-29 10:43

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 winn

相关标签:
8条回答
  • 2020-11-29 10:48

    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))
    
    0 讨论(0)
  • 2020-11-29 10:49

    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]))
    
    0 讨论(0)
  • 2020-11-29 10:55

    You should use variables to store the names.

    Numbers can't store strings.

    0 讨论(0)
  • 2020-11-29 10:56

    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
    
    0 讨论(0)
  • 2020-11-29 11:03

    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"
    
    0 讨论(0)
  • 2020-11-29 11:08

    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?

    0 讨论(0)
提交回复
热议问题