问题是:
你将编写一个程序来模拟一对骰子的滚动。
您将要求用户提供要模拟的卷数。然后每卷掷两个骰子。使用随机库和其中的randint函数(random.randint(1,6))进行每个骰子。
把每一个骰子上的数字相加,记录下每一个可能的掷骰次数(2-12次),以及你掷“双倍”的次数(两个骰子上的数字相同)。
打印出每个骰子数、骰子数的卷数以及占总数的百分比:
样本输出
输入卷数:10000
2-2662.660000%
3-580 5.800000%
4-881810000%
5-1086 10.86万%
6-1418 14.180000%
7-1658 1658万
8-1363 13.63万%
9-1096 10.960000%
10-829 8.290000%
11-5505.500000%
12-273 2.730000%
双打-1425-14.234000%
这是我的代码:
import random
def dice_roll():
return random.randint(1,6)
count = int(input("Enter the number of rolls: "))
number_of_double_dice = 0
results = [0 for x in range(13)]
for i in range(0,count):
first = dice_roll()
second = dice_roll()
sum = first + second
if(first == second):
number_of_double_dice = number_of_double_dice + 1
results[sum] = results[sum] + 1
for x in range (2,13):
print("{0:d} - {1:d}{2:0.4f}%".format(x, results[x], results[x]/count*100))
print("Doubles- {0:d}-{{1:0.6f}%".format(number_of_double_dice, number_of_double_dice*100))
main()
但是,我的代码不工作。有人能告诉我为什么吗?我不断收到价值错误信息。
编辑 我运行这个程序,得到的是: 输入卷数:10000
2-2772.7700%
双打-1667-166700.0000%
3-00.0000%
双打-1667-166700.0000%
4-2502.5000%
双打-1667-166700.0000%
5-00.0000%
双打-1667-166700.0000%
6-2982.9800%
双打-1667-166700.0000%
7-00.0000%
双打-1667-166700.0000%
8-2732.7300%
双打-1667-166700.0000%
9-00.0000%
双打-1667-166700.0000%
10-2782.7800%
双打-1667-166700.0000%
11-00.0000%
双打-1667-166700.0000%
12-2912.9100%
双打-1667-166700.0000%
这甚至不像示例输出所说的那样。我做错什么了?
要使代码正常工作,需要进行4项更改(注释中已经提到的小错误除外):
首先,仅当
first == second
时,才将1
添加到results[sum]
。所以,results[sum] = results[sum] + 1
不应该在if statement
下:第二个,由于某些我还不知道的原因,
"{0:d} - {1:d}{2:0.4f}%"
应该改为"{0:d} - {1:d} {2:0.4f}%"
(注意第二个}
和第三个{
之间增加的空间)。第三个在计算双精度数占总数的百分比时,忘记除以
count
。所以,应该是:第四,打印双精度数的行需要放在
for statement
之外,因为您只想打印一次;而不是每次迭代for statement
:所以你的代码应该看起来像this: https://gist.github.com/s16h/b4c2bc791880b61418b2。
我很快重新编写了你的程序;我试图保持你的逻辑和做事方式:
我希望这能有帮助。
下面是您的代码的更好版本:
其运行方式为:
你的问题是,如果有两个数,你只在和中加一个,这就是为什么你只有偶数卷的结果。你还有
{{1:0.6f}%
这应该是{1:0.6f}%
。相关问题 更多 >
编程相关推荐