(如果我先显示代码,则更容易解释)
import random
inventory = 100
while True:
print('inventory: $' + str(inventory))
print('how much do you wager?')
wager = input()
keys = ['a', 'b']
cA = random.sample(keys, 1)
print('pick "a" or "b"')
guess = input()
if guess == cA[0]
inventory += int(wager)
elif guess == cA[1]: # <---------------
inventory -= int(wager)
else:
print('ERROR')
所以我做了这个相当简单的猜测/赌博游戏,但是当我跑它时说cA [1]超出了范围(“IndexError:列表索引超出范围”),这使我感到困惑,因为我知道列表应该从列表[0],列表[1]等开始计数 然后我将cA [1]更改为cA [-1]并确实返回了一封信。奇怪(我认为)当我加入
时print(keys[1])
它确实按预期返回“b”,所以我不明白为什么键[1]存在但是当键和cA都有2个元素时cA [1]不存在。为什么会这样做,有没有办法修复/改变它?
答案 0 :(得分:4)
您的列表中只包含一个元素:
cA = random.sample(keys, 1)
您要求提供长度为1的随机样本。
-1
有效,因为这是一个相对于结尾的索引。对于长度为1的列表,listobj[-1]
与listobj[0]
是同一个对象;最后一个元素也是第一个元素。
keys
是包含两个元素的列表,因此keys[0]
和keys[1]
都存在。
答案 1 :(得分:0)
import random
inventory = 100
while True:
print('inventory: $' + str(inventory))
print('how much do you wager?')
wager = input()
keys = ['a', 'b']
cA = random.sample(keys, 1)
print('pick "a" or "b"')
guess = input()
if guess == cA <------------ cA has the element that is the correct wager
inventory += int(wager)
else:
inventory -= int(wager)
我认为这就是你想要的。