Python 掷两个骰子并将结果制成表格
问题是: 您将编写一个程序来模拟一对骰子的滚动Python 掷两个骰子并将结果制成表格,python,random,Python,Random,问题是: 您将编写一个程序来模拟一对骰子的滚动 您将要求用户输入要模拟的转鼓数。然后你将掷两个骰子。对每个骰子使用随机库和其中的randint函数(random.randint(1,6)) 将每个骰子上的数字相加,并记下每个可能的掷骰次数(2-12),以及你掷“双倍”的次数(两个骰子上的数字相同) 打印出每个骰子计数、该骰子计数的卷数以及占总数的百分比: 样本输出 输入卷数:10000 2-266 2.660000% 3-580 5.800000% 4-88181000% 5-10861080
- 您将要求用户输入要模拟的转鼓数。然后你将掷两个骰子。对每个骰子使用随机库和其中的randint函数(random.randint(1,6))
- 将每个骰子上的数字相加,并记下每个可能的掷骰次数(2-12),以及你掷“双倍”的次数(两个骰子上的数字相同)
- 打印出每个骰子计数、该骰子计数的卷数以及占总数的百分比: 样本输出 输入卷数:10000 2-266 2.660000% 3-580 5.800000% 4-88181000% 5-10861080000% 6-1418180000% 7-165816580000% 8-1363 13.630000% 9-10961096000% 10-829 8.290000% 11-550 5.500000% 12-2732730000% 双打-1425-1434000%
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项更改(注释中已经提到的小错误除外): 首先,如果
第一次==第二次
,则仅将1
添加到结果[sum]
。因此,results[sum]=results[sum]+1
不应在if语句下
:
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 / count *100))
其次,由于某种原因,我还不知道是什么,“{0:d}-{1:d}{2:0.4f}%”
应该改为“{0:d}-{1:d}{2:0.4f}%
(注意第二个}
和第三个{/code>之间增加了空格)
第三在计算双打总数的百分比时,您忘记了除以计数
。因此,它应该是:
print("Doubles- {0:d}-{1:0.6f}%".format(number_of_double_dice, number_of_double_dice/count*100))
第四个,打印双倍数的行需要放在语句
的之外,因为您只想打印一次;而不是在语句
的每次迭代中:
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 / count *100))
所以你的代码应该是这样的
我很快重新编写了您的程序;我试图保持您的逻辑和做事方式:
from __future__ import division
import random
import sys
def dice_roll():
return random.randint(1, 6)
def number_of_rolls():
return int(raw_input('Enter the number of rolls: '))
def simulate(number_of_times):
counter = {n : 0 for n in range(2, 13)}
doubles = 0
for i in range(number_of_times):
first_dice = dice_roll()
second_dice = dice_roll()
total = first_dice + second_dice
doubles += 0 if first_dice != second_dice else 1
counter[total] += 1
return counter, doubles
def main():
rolls = number_of_rolls()
counter, doubles = simulate(rolls)
total = sum(counter.values())
for total, count in counter.items():
print("{} - {} {:0.4f}%".format(total, count, count / rolls * 100))
print("Doubles - {} - {:0.6f}%".format(doubles, doubles / rolls * 100))
if __name__ == '__main__':
sys.exit(main())
我希望这会有所帮助。这里有一个更好的代码版本:
import random
num = int(input('How many rolls do you want to simulate? '))
rolls = {}
for k in range(2, 13):
rolls[k] = 0
doubles = 0
for k in range(num):
first = random.randint(1, 6)
second = random.randint(1, 6)
if first == second:
doubles+=1
rolls[first+second]+=1
for k in rolls:
print('%d - %d %f%%' %(k, rolls[k], float(rolls[k])/float(num)*100))
print('Doubles - %d - %f%%' %(doubles, float(doubles)/float(num)))
其运行方式如下:
How many rolls do you want to simulate? 10000
2 - 286 2.860000%
3 - 571 5.710000%
4 - 788 7.880000%
5 - 1066 10.660000%
6 - 1393 13.930000%
7 - 1731 17.310000%
8 - 1470 14.700000%
9 - 1034 10.340000%
10 - 840 8.400000%
11 - 541 5.410000%
12 - 280 2.800000%
Doubles - 1669 - 0.166900%
你的问题是,如果有双倍,你只在总和上加一个,这就是为什么你只有偶数骰子的结果。你还有
{1:0.6f}%
,应该是{1:0.6f}%
双开括号{1:0.6f}%应该是单个。在哪里引发了ValueError
错误?还有对main()的调用
将引发一个名称错误
,除非您实际定义了它。即使使用该修复程序,仍然会给我相同格式的结果,尽管由于随机库的原因,结果的数字不同。打印双倍数不应出现在for语句中
;您只希望在最后打印一次;而不是在每次迭代中在语句的中。通常,列表不是最好的(即可读性最好)表示此问题的方式;我认为字典更适合。该程序有效。你的和我的之间有什么区别?我的意思是,我没有做的和你一样正确吗?数学似乎不正确。例如,如果我输入一个卷作为输入,它将为我提供两个卷的数据。最好使用,而不是使用。“你也乘以100而不是除以100"?您也在乘以100
;这是正确的。您能发布完整的回溯吗?欢迎使用堆栈溢出!仅使用代码的答案没有特别的帮助。请添加一些关于此代码如何解决问题的说明。请确保您共享的代码是正确的。此代码将生成缩进错误
。To进一步阐述@Shree的观点,将公认的答案作为一个很好的例子,说明需要提供的解释水平。
import random
def roll_two_dice():
return random.randint(1, 6)*2