1

プログラミングは初めてですが、練習のために、I-Chingオラクルをプログラムしようとしています。必要な出力が得られますが、このコード ブロックをプログラムに 6 回コピーするだけです。

これをより簡潔にするために設定できるループ条件はありますか?

ループに関するドキュメントと tuts を読みましたが、このコンテキストでどのように適用できるかはわかりませんでした。

import random 

oracle = random.randint(6,9)

if oracle == 6:
   print "__ __~"
elif oracle == 7:
 print "_____"
elif oracle == 8:
 print "__ __"
elif oracle == 9:
 print "_____~"   (X6)

=>これは私が得ている出力です:

_____
__ __
__ __~
_____
_____~
__ __
4

5 に答える 5

3

確率分布が間違っていることに注意してください。

易経を読むには、公正なコインを 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

合計を 7 または 8 にする方法は 3 つありますが、合計を 6 または 9 にする方法は 1 つしかないことがわかります。したがって、分布は 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()
于 2013-01-31T02:34:27.127 に答える
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
于 2013-01-30T22:12:40.587 に答える
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):

range(...) 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
于 2013-01-30T22:04:13.777 に答える
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 "_____~"

出力:

__ __
__ __~
_____~
__ __~
_____~
于 2013-01-30T22:09:15.700 に答える
0

ifandのスタックをelif辞書に置き換え、ループをリスト内包表記に置き換えて、これを数行に減らすこともできます。

d = {6: "__ __~", 7: "_____" , 8: "__ __" , 9: "_____~",}
print '\n'.join([d[random.randint(6, 9)] for j in range(6)])
于 2013-01-30T22:21:02.880 に答える