编程新手,练习我试图编程I-Ching oracle。 我得到了我想要的输出,但只是将这个代码块复制到我的程序中6次。
我可以设置循环条件以使其更简洁吗?
我已经阅读了关于循环的文档和内容,但还没有看到如何在这种情况下应用它。
import random
oracle = random.randint(6,9)
if oracle == 6:
print "__ __~"
elif oracle == 7:
print "_____"
elif oracle == 8:
print "__ __"
elif oracle == 9:
print "_____~" (X6)
=> 这是我得到的输出:
_____
__ __
__ __~
_____
_____~
__ __
答案 0 :(得分:2)
请注意您的概率分布是错误的。
要做一个I Ching阅读,你应该翻转3个公平的硬币,每个尾巴加2分,每个头3分:
Coin1 Coin2 Coin3 Points
t t t 6
t t h 7
t h t 7
t h h 8
h t t 7
h t h 8
h h t 8
h h h 9
你可以看到有3种方法可以求和为7或8,但只有一种方法可以求和为6或9;因此分布应为6:12.5%,7:37.5%,8:37.5%,9:12.5%。 randint
给出均匀分布,即每个分布25%。
我建议如下:
from random import randint
xyin = "__ __~"
yang = "_____"
yin = "__ __"
xyang = "_____~"
three_coins = [ xyin, yang, yang, yin, yang, yin, yin, xyang ]
def cast():
return three_coins[randint(0, 7)]
def hexagram():
return '\n'.join(cast() for i in range(6))
print hexagram()
答案 1 :(得分:1)
使用像这样的for循环结构:
import random
for x in range(6): # Loop 6 times
oracle = random.randint(6,9)
if oracle == 6:
print "__ __~"
elif oracle == 7:
print "_____"
elif oracle == 8:
print "__ __"
elif oracle == 9:
print "_____~" (X6)
有关help(range)
的范围函数的更多信息:
范围(...) 范围([start,] stop [,step]) - >整数列表
Return a list containing an arithmetic progression of integers. range(i, j) returns [i, i+1, i+2, ..., j-1]; start (!) defaults to 0.
您还可以使用while
构造来实现相同的效果。
start = 0
stop = 6
while start < stop:
#Your code-block here
start = start+1
答案 2 :(得分:1)
这样的东西?
import random
for n in range(6):
oracle = random.randint(6,9)
if oracle == 6:
print "__ __~"
elif oracle == 7:
print "_____"
elif oracle == 8:
print "__ __"
elif oracle == 9:
print "_____~"
输出:
__ __
__ __~
_____~
__ __~
_____~
答案 3 :(得分:1)
您可以像这样使用while循环:
import random
counter = 0
while counter < 6:
oracle = random.randint(6,9)
if oracle == 6:
print "__ __~"
elif oracle == 7:
print "_____"
elif oracle == 8:
print "__ __"
elif oracle == 9:
print "_____~"
counter += 1
答案 4 :(得分:0)
你也可以用字典和带有列表理解的循环替换if
和elif
的堆栈,并将其减少到几行
d = {6: "__ __~", 7: "_____" , 8: "__ __" , 9: "_____~",}
print '\n'.join([d[random.randint(6, 9)] for j in range(6)])