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语句,它会打印列表索引超出范围。如果用户和随机生成器选择相同的事情,也会发生同样的情况。我试图学习如何解决这个问题,但我真的不理解任何解释。
答案 0 :(得分:1)
你应该做randint(0,2),因为RPSList是零索引的。这解决了超出范围的错误,但你也应该做“if ... else”而不是“elif ... else”。
答案 1 :(得分:1)
更好的方法就是使用random.choice
。
e.g。
import random
RPSlist = ["rock", "paper", "scissors"]
print(random.choice(RPSlist))
这样你就不必关心列表的长度。
这条线变为
computerRPS = random.choice(RPSlist)
如果没有前面的elif
,您就不能拥有if
。因此,您只需将elif
更改为if
。
答案 2 :(得分:0)
一些变化:
elif userRPS == "scissors":
应该是
if userRPS == "scissors":
和
computerRPS = RPSlist[randint(1,3)]
应该是
computerRPS = RPSlist[randint(0,2)]
始终记住,列表索引从0
计算,而不是从1
计算。
答案 3 :(得分:0)
参考你问题的这一部分
我真的不理解任何解释。
在您编辑之前,您提出有
的问题computerRPS = RPSlist[randint(0,3)]
现在编辑后你的新命令是
computerRPS = RPSlist[randint(1,3)]
两者都会导致列表索引超出范围?
以computerRPS = RPSlist[randint(1,3)]
可以生成
RPSlist[1]
RPSlist[2]
RPSlist[3]
但您的RPSlist有三个从0开始的元素
RPSlist = ["rock", "paper", "scissors"]
^ ^ ^
0 1 2
现在如果randint(1,3)
给你一个随机数,例如 3 。你的变量将是
RPSlist[3]
但你是数组没有索引为3的任何变量。最大索引元素是2
因此您的索引超出范围错误