嗨,我试图创建一个游戏,计算机在1到6之间生成5个随机数。但我的问题是我创建了一个列表,它将获得' 1'在各自的部分取决于出现的数字。例如如果计算机生成31534,则列表需要显示[1,0,2,1,1,0](因为它有两个3'它在3个插槽中填充2)它只显示5个随机数而没有其他
from random import randint
def rollDice():
dice = [str(randint(1, 6)) for _ in range(5)]
print(dice)
return dice
#-----------------------------------------------------------------
def countVals(dice):
totals = [0, 0, 0, 0, 0]
for x in dice:
if x == 1:
totals = totals[1] + 1
elif x == 2:
totals = totals[2] + 1
elif x == 3:
totals = totals[3] + 1
elif x == 4:
totals = totals[4] + 1
elif x == 5:
totals = totals[5] + 1
print(totals)
return totals
#------------------------------------------------------------------
rollDice()
countVals()
答案 0 :(得分:1)
我相信当你增加每个数字的计数时,你的错误就在于
totals = totals[1] + 1
应该是,
totals[1] = totals[1] + 1
此外,根据您的应用程序,您可以简化代码
def countVals(dice):
totals = [0, 0, 0, 0, 0]
for x in dice:
totals[x - 1] += 1
print (totals)
return totals
答案 1 :(得分:0)
您可以尝试以下方法:
dice = rollDice()
countVals(dice)
您还要修复print
中return
和countVals()
语句的缩进。目前,它们仅在x==5
时触发。正如萨尔瓦多·达利所提到的,要么从str
移除rollDice()
,要么将countVals()
中的比较更改为x == '1'
等。
编辑:
以下是您可能希望编写脚本的方法:
def rollDice():
dice = [randint(1, 6) for _ in range(5)]
print(dice)
return dice
def countVals(dice):
totals = [0, 0, 0, 0, 0]
for x in dice:
# x can be, 1-5. Index of totals can be 0-4.
totals[x-1] += 1
print(totals)
return totals
dice = rollDice()
countVals(dice)
答案 2 :(得分:0)
我认为问题是rollDice函数返回的结果是一个字符串列表。然后,countVals中的if - else语句会导致例如'5' == 5 -> False
。您可以修改rollDice以返回int的列表(不要将int转换为字符串):
def rollDice():
dice = [randint(1, 6) for _ in range(5)]
print(dice)
return dice
如果你绝对希望rollDice返回一个字符串列表,你可以使用countVals方法中的int
方法将字符串转换为整数。示例:int('5') -> 5
,或者仅比较字符串而不是整数。 x == '5'
还要确保将总计保存回总计列表中的正确索引(在rollDice中)。您可以更简洁地执行此操作,如下所示:totals[1] += 1
,例如:
def countVals(dice):
totals = [0, 0, 0, 0, 0, 0] #alternatively could be 'totals = [0]*6' :)
for value in dice:
totals[value - 1] += 1
print(totals)
return totals
(假设已修改rollDice以返回整数列表)
您应该可以按以下方式调用方法totals = countVals(rollDice())
来获取总计列表。