将我的代码更改为 运行 这个程序 "n" 次
Changing my code to run this program "n" times
我需要编写一个程序来计算如果我掷骰子 12 次,骰子上的每个数字至少出现一次的概率。提出的问题是有 6 个人,我们都决定每月掷一次骰子,持续一年。谁的号码出现谁就可以选择餐厅。每个人都会至少选择一次他们的餐厅的概率是多少?所以我写了一个程序,可以掷骰子 12 次并记录结果。如果我的随机方法中的每个数字都出来了,那就意味着每个人都有机会选择一家餐馆(成功)。如果在 12 卷中有一个数字保持为零,则意味着不是每个人都必须选择一家餐馆(失败)。当用户键入 "roll" 时,我的程序运行良好 运行s 并在用户键入 "Q" 时退出。它跟踪成功并将其除以程序 运行 的次数。我从一个非常简单的掷骰子程序开始,该程序来自 while 循环 运行s,然后从那里构建所有功能。最后,我意识到我需要我的程序 运行 如此 100 或 1000 次才能找到一个好的概率平均值。我不是最好的编码员,我猜你可以从我的代码中看到,但我把自己编码到一个角落,并希望能够 运行 这 "n" 次,而不是我花几个小时试图弄清楚这个出去。我相信这里更好的编码人员能够非常轻松地帮助我。先感谢您。这是我的代码。
import random
global success
success = 0
global eachturn
eachturn = 0
def main():
rolling = True
while rolling:
roll_again = input("Ready to roll? ENTER=Roll. Q=Quit. ")
if roll_again.lower() != "q":
global chance
global result
global n1
global n2
global n3
global n4
global n5
global n6
n1 = n2 = n3 = n4 = n5 = n6 = 0
droll = 1
result = 0
for number in range(1, 13):
result = random.randint(1, 6)
print("Roll {0} = {1}".format(droll, result))
droll += 1
counter()
print(
"\n---- Stats: ----\nTimes number one appeared: {}\nTimes number two appeared: {}\n"
"Times number three appeared: {}\nTimes number four appeared: {}\nTimes number five appeared: {}\n"
"Times number six appeared: {}".format(
n1, n2, n3, n4, n5, n6))
iszero()
turncounter()
print("This increments when all numbers 1-6 are part of the 12 roll outcome:")
print(success)
print("The amount of times the program is run (12 rolls of a dice):")
print(eachturn)
print("This is the success divided by the number of program runs:")
print(success/eachturn)
else:
rolling = False
print("Thanks for playing.")
def counter():
global result
global n1
global n2
global n3
global n4
global n5
global n6
if result == 1:
n1 += 1
elif result == 2:
n2 += 1
elif result == 3:
n3 += 1
elif result == 4:
n4 += 1
elif result == 5:
n5 += 1
elif result == 6:
n6 += 1
else:
print("droll = {}".format(result))
return None
def iszero():
global zero
global success
zero = 0
if n1 == 0:
return zero
elif n2 == 0:
return 0
elif n3 == 0:
return 0
elif n4 == 0:
return 0
elif n5 == 0:
return 0
elif n6 == 0:
return 0
else:
zero += 1
success += 1
return zero
def turncounter():
global eachturn
eachturn += 1
main()
这是 运行ning 1 次的输出示例。但是,当我多次键入 "roll" 时,它会正确递增以给我我的 (success/(运行s 的数量))
请帮我弄清楚如何 运行 这 "n" 次。我想我可能需要删除我的 while 循环,或者有没有更简单的方法可以在不改变太多的情况下完成它?
这里有几件事。首先,对于您的具体问题,您可以只修改循环,而不是检查 main()
中的输入,您只需循环固定次数。你可以用类似的东西来做到这一点:
def main():
for round in range(1000):
global chance
global result
global n1
...
print("This is the success divided by the number of program runs:")
print(success/eachturn)
也就是说,对于可能只有几行的东西来说,这绝对是大量的代码:
In [51]: def run():
...: return len({random.randint(1, 6) for _ in range(12)}) == 6
...:
In [52]: sum([run() for _ in range(10000)]) / 10000
Out[52]: 0.4287
每次调用run
生成1到6的12个随机数,存入一个set
中(去重)。然后它检查是否所有 6 个都存在,如果存在 returns True
,如果不存在 False
。然后,您只需调用 run()
10000 次,对值求和(因为 Python 会将 True
视为 1),然后除以运行次数以获得概率估计。
除此之外,您可以通过避免使用全局变量和使用 list
s 或 dict
s 等数据结构来存储值而不是单个整数值等来改进您所拥有的,但是这完全是一个单独的讨论。
我需要编写一个程序来计算如果我掷骰子 12 次,骰子上的每个数字至少出现一次的概率。提出的问题是有 6 个人,我们都决定每月掷一次骰子,持续一年。谁的号码出现谁就可以选择餐厅。每个人都会至少选择一次他们的餐厅的概率是多少?所以我写了一个程序,可以掷骰子 12 次并记录结果。如果我的随机方法中的每个数字都出来了,那就意味着每个人都有机会选择一家餐馆(成功)。如果在 12 卷中有一个数字保持为零,则意味着不是每个人都必须选择一家餐馆(失败)。当用户键入 "roll" 时,我的程序运行良好 运行s 并在用户键入 "Q" 时退出。它跟踪成功并将其除以程序 运行 的次数。我从一个非常简单的掷骰子程序开始,该程序来自 while 循环 运行s,然后从那里构建所有功能。最后,我意识到我需要我的程序 运行 如此 100 或 1000 次才能找到一个好的概率平均值。我不是最好的编码员,我猜你可以从我的代码中看到,但我把自己编码到一个角落,并希望能够 运行 这 "n" 次,而不是我花几个小时试图弄清楚这个出去。我相信这里更好的编码人员能够非常轻松地帮助我。先感谢您。这是我的代码。
import random
global success
success = 0
global eachturn
eachturn = 0
def main():
rolling = True
while rolling:
roll_again = input("Ready to roll? ENTER=Roll. Q=Quit. ")
if roll_again.lower() != "q":
global chance
global result
global n1
global n2
global n3
global n4
global n5
global n6
n1 = n2 = n3 = n4 = n5 = n6 = 0
droll = 1
result = 0
for number in range(1, 13):
result = random.randint(1, 6)
print("Roll {0} = {1}".format(droll, result))
droll += 1
counter()
print(
"\n---- Stats: ----\nTimes number one appeared: {}\nTimes number two appeared: {}\n"
"Times number three appeared: {}\nTimes number four appeared: {}\nTimes number five appeared: {}\n"
"Times number six appeared: {}".format(
n1, n2, n3, n4, n5, n6))
iszero()
turncounter()
print("This increments when all numbers 1-6 are part of the 12 roll outcome:")
print(success)
print("The amount of times the program is run (12 rolls of a dice):")
print(eachturn)
print("This is the success divided by the number of program runs:")
print(success/eachturn)
else:
rolling = False
print("Thanks for playing.")
def counter():
global result
global n1
global n2
global n3
global n4
global n5
global n6
if result == 1:
n1 += 1
elif result == 2:
n2 += 1
elif result == 3:
n3 += 1
elif result == 4:
n4 += 1
elif result == 5:
n5 += 1
elif result == 6:
n6 += 1
else:
print("droll = {}".format(result))
return None
def iszero():
global zero
global success
zero = 0
if n1 == 0:
return zero
elif n2 == 0:
return 0
elif n3 == 0:
return 0
elif n4 == 0:
return 0
elif n5 == 0:
return 0
elif n6 == 0:
return 0
else:
zero += 1
success += 1
return zero
def turncounter():
global eachturn
eachturn += 1
main()
这是 运行ning 1 次的输出示例。但是,当我多次键入 "roll" 时,它会正确递增以给我我的 (success/(运行s 的数量))
请帮我弄清楚如何 运行 这 "n" 次。我想我可能需要删除我的 while 循环,或者有没有更简单的方法可以在不改变太多的情况下完成它?
这里有几件事。首先,对于您的具体问题,您可以只修改循环,而不是检查 main()
中的输入,您只需循环固定次数。你可以用类似的东西来做到这一点:
def main():
for round in range(1000):
global chance
global result
global n1
...
print("This is the success divided by the number of program runs:")
print(success/eachturn)
也就是说,对于可能只有几行的东西来说,这绝对是大量的代码:
In [51]: def run():
...: return len({random.randint(1, 6) for _ in range(12)}) == 6
...:
In [52]: sum([run() for _ in range(10000)]) / 10000
Out[52]: 0.4287
每次调用run
生成1到6的12个随机数,存入一个set
中(去重)。然后它检查是否所有 6 个都存在,如果存在 returns True
,如果不存在 False
。然后,您只需调用 run()
10000 次,对值求和(因为 Python 会将 True
视为 1),然后除以运行次数以获得概率估计。
除此之外,您可以通过避免使用全局变量和使用 list
s 或 dict
s 等数据结构来存储值而不是单个整数值等来改进您所拥有的,但是这完全是一个单独的讨论。