设置循环条件

时间:2013-01-30 22:01:36

标签: python loops

编程新手,练习我试图编程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)

=> 这是我得到的输出:

_____
__ __
__ __~
_____
_____~
__ __

5 个答案:

答案 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)

你也可以用字典和带有列表理解的循环替换ifelif的堆栈,并将其减少到几行

d = {6: "__ __~", 7: "_____" , 8: "__ __" , 9: "_____~",}
print '\n'.join([d[random.randint(6, 9)] for j in range(6)])