我遇到了一个代码问题,我需要将六面模具滚动1000次,然后返回一个列表,列出了模具上每个数字的滚动次数。
代码运行得很好,我可以在最后获得一个列表,但是我的列表一直有0代替4,所以看起来我的函数没有关注正在滚动的数字4或它没有滚动到所有
我有点难过,我想也许有人可以帮忙。任何和所有的帮助表示赞赏。
这是我的代码。
def rollDie(number):
one = 0
two = 0
three = 0
four = 0
five = 0
six = 0
for i in range(0, number):
roll=int(random.randint(1,6))
if roll == 1:
one = one+1
elif roll == 2:
two = two+1
elif roll == 3:
three = three+1
elif roll == 4:
four == four+1
elif roll == 5:
five = five+1
elif roll == 6:
six = six+1
return [one,two,three,four,five,six]
答案 0 :(得分:8)
你有一个小错字;你正在测试平等,而不是分配:
four == four+1
应该是:
four = four+1
但是,您已经有1到6之间的数字,为什么不把它变成结果列表的索引?这样您就不必使用这么多if
语句。保持数据不受变量名称的影响:
def rollDie(number):
counts = [0] * 6
for i in range(number):
roll = random.randint(1,6)
counts[roll - 1] += 1
return counts
答案 1 :(得分:0)
我无法改进Martijn Pieters的回答。 :-)但是使用列表可以更方便地解决这个问题。
import random
def rollDie(number):
# create a list with 7 values; we will only use the top six
rolls = [0, 0, 0, 0, 0, 0, 0]
for i in range(0, number):
roll=int(random.randint(1,6))
rolls[roll] += 1
return rolls
if __name__ == "__main__":
result = rollDie(1000)
print(result[1:]) # print only the indices from 1 to 6
而且,这有点棘手,但是这里有一个更好的方法来创建一个包含所有设置为零的7个条目的列表:
rolls = [0] * 7
为什么要自己计算零?让Python为你工作更容易。 : - )
编辑:列表的长度为7,因为我们想要使用索引1到6.列表中还有一个位置0,但我们不使用它。
另一种方法是将骰子卷映射到索引上。这是一个非常简单的映射:只需减去1.因此,1的掷骰将进入列表的索引0,2的掷骰将进入索引1,依此类推。现在我们将使用列表中的每个位置。
这是那个版本:
import random
def rollDie(number):
rolls = [0] * 6
for i in range(0, number):
roll=int(random.randint(1,6))
rolls[roll - 1] += 1
return rolls
if __name__ == "__main__":
result = rollDie(1000)
print(result)
答案 2 :(得分:-1)
你应该random.randint(1, 7)
,否则你永远不会得到6。
...
roll = random.randint(1, 7)
答案 3 :(得分:-3)
Intent intent = new Intent("com.android.phone.EmergencyDialer.DIAL");
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Intent intent1 = new Intent(MyService.this,MyService2.class);
startService(intent1);