Python:列表索引超出范围。我不知道怎么解决这个问题

2024-09-26 22:54:06 发布

您现在位置:Python中文网/ 问答频道 /正文

def RPS():
    userRPS = input("Rock, paper, or scissors? ")
    RPSlist = ["rock", "paper", "scissors"]
    computerRPS = RPSlist[randint(1,3)]
    print("\nI chose " + computerRPS + ", and you chose " + userRPS)
    elif userRPS == "scissors":
        if computerRPS == "rock":
            print("You lose.")
        elif computerRPS == "paper":
            print("You win.")
        elif computerRPS == "scissors":
            print("I chose scissors too. Go again.")
            RPS()
    else:
        print("?")
        RPS()

所以如果我运行else语句,它会打印超出范围的列表索引。如果用户和随机生成器选择相同的东西,也会发生同样的情况。我试图学习如何解决这个问题,但我真的不明白其中的任何解释。你知道吗


Tags: youinputdefelsepaperprintscissorsrock
3条回答

您应该执行randint(0,2),因为RPSList的索引为零。这修复了超出范围的错误,但是您还应该执行“if…else”而不是“elif…else”。你知道吗

一些变化:

elif userRPS == "scissors":

应该是

if userRPS == "scissors":

以及

computerRPS = RPSlist[randint(1,3)]

应该是

computerRPS = RPSlist[randint(0,2)]

请记住,列表索引从0开始计数,而不是从1开始计数。你知道吗

更好的方法是使用random.choice。你知道吗

例如

import random

RPSlist = ["rock", "paper", "scissors"]
print(random.choice(RPSlist))

这样你就不用担心名单有多长了。你知道吗

所以那条线变成了

computerRPS = random.choice(RPSlist)

此外,如果没有前面的if,则不能有elif。所以你只需要把elif改成if。你知道吗

相关问题 更多 >

    热门问题