1

私はちょうど Python (史上初の言語) を学んでいて、見つけたものを自分が楽しいと思う方法で実装しています。疑似スロット マシンのオッズ計算機を作成しました。ただし、大賞1勝にとどまる。大賞を獲得するために n ゲームの平均試行回数を与えるために何度も実行する方法はありますか?

これが私のコードです

#!/usr/bin/env python
import random

a = 1

while a >0 :
    l1 = random.randrange(36)
    l2 = random.randrange(36)
    l3 = random.randrange(36)

    print l1, l2, l3
    if l1 == l2 == l3 == 7:
        print 'grand prize winner!!!'
        break
    elif l1 == l2 == l3:
        print 'you won! congratulations'
        print 'it took', a, 'attempts to win'
    else:
        a += 1
        print 'sorry...  try again'
        print 'attempt', a

また、その大賞を獲得する過程で、何回の通常の勝利があったかを知る方法はありますか?

4

4 に答える 4

2

break大賞ブロックのステートメントはif、外側のwhileループを終了します。継続したい場合は、 を削除してbreakください。また、スタイル ポイントとして、while True:またはwhile 1:無限ループを作成する方法が少し明確になります。質問の 2 番目の部分に関しては、aカウンターがありますが、次のように、より多くのデータを取得したい場合があります。

import random

def play(till_jackpot_count):
    game_data_per_jackpot = [{'plays' : 0, 'wins' : 0}]
    wheel_values = xrange(36)
    wheels = [0, 0, 0]
    while till_jackpot_count >= len(game_data_per_jackpot):
        wheels = [random.choice(wheel_values) for wheel in wheels]
        game_data_per_jackpot[-1]['plays'] += 1
        print '%d plays since last jackpot' % game_data_per_jackpot[-1]['plays']
        print '%d wins since last jackpot' % game_data_per_jackpot[-1]['wins']
        print '%d total plays' % sum([data['plays'] for data in game_data_per_jackpot])
        print '%d total wins' % sum([data['wins'] for data in game_data_per_jackpot])
        print '%d total jackpots' % (len(game_data_per_jackpot) - 1)
        print 'this play: {} {} {}'.format(*wheels)
        if len(set(wheels)) == 1:
            if wheels[0] == 7:
                print 'jackpot!'
                game_data_per_jackpot.append({'plays' : 0, 'wins' : 0})
            else:
                print 'win!'
                game_data_per_jackpot[-1]['wins'] += 1
    return game_data_per_jackpot[:-1]

play(10)

till_jackpot_countまた、その数のジャックポットの後にループを終了させるコントロールを上部に忍び込ませました。関数自体の外部でさらに分析したい場合、関数はテスト結果も返しますが、結果は何にも割り当てられていないため、ここにドロップされます。

あなた自身の研究のために、このコードはリスト ( [])、ディクテーション ( {})、タプル ( ())、古いスタイルの文字列フォーマット ( '%d' % var)、新しいスタイルの文字列フォーマット ( '{} {} {}'.format(*iterable))、リスト内包表記 ( [a for a in b])、スライス ( list[:])、およびいくつかのビルトイン ( sumlen)を使用します。すでに使い慣れたrandomライブラリとループに加えて。また、ビルド済みの、より単純でおそらくより効率的なものにwhile交換しました。random.randrange()random.sample()xrange()

于 2012-09-27T16:57:45.963 に答える
0

いくつかのコードn時間を実行するには、次のように書く必要があります

for _ in range(n):
    # some code

ある条件が成立している間に実行するには、次のように書く必要があります

while condition:
    #some code

無限に実行するには、次のように書く必要があります

while 1:
     # some code

(条件1は常に true であるため)。

キーワードbreakは、条件が満たされていない場合でも、現在のループから抜け出します。


スロット マシン コードを設定することから始めます。

GRAND_PRIZE = 0
REGULAR_PRIZE = 1
NO_PRIZE = 2

def slot_machine():
    l1 = random.randrange(36)
    l2 = random.randrange(36)
    l3 = random.randrange(36)

    if l1 == l2 == l3:
        return GRAND_PRIZE if l1 == 7 else REGULAR_PRIZE
    else:
        return NO_PRIZE

次に、勝つまでこれを実行するコードを設定します。

def run_until_win():
    num_tries = 0
    num_wins = 0

    while 1:
        num_tries += 1
        result = slot_machine()

        if result == GRAND_PRIZE:
            break
        elif result == REGULAR_PRIZE:
            num_wins += 1

    return num_tries, num_wins

最後に、これを 10 回実行します。

for _ in range(10):
    print "tries: {0}, wins: {1}".format(*run_until_win())
于 2012-09-27T17:10:36.163 に答える
0

「while」ループに問題はありません。正常にエスケープされます。何度か実行したい場合は、for i in range(number_of_games)ループでラップできます。whileループを終了するたびaに、をリストに追加します。

nb_attempts = []
for i in range(nb_games):
    while True:
        ...
        if (l1 == l2 == l3 == 7):
            nb_attempts.append(a)
            break
        elif ...

nゲームの最後に、n試行回数のリストが表示されます。

于 2012-09-27T17:13:06.860 に答える
0

勝つたびに数えて、最後に合計を出力するだけです...(以下をwins参照)

#!/usr/bin/env python
import random
def play():
  a = 1
  wins = 0
  while a >0 :
    l1 = random.randrange(36)
    l2 = random.randrange(36)
    l3 = random.randrange(36)

    print l1, l2, l3
    if l1 == l2 == l3 == 7:
        #print 'grand prize winner!!!'
        break
    elif l1 == l2 == l3:
        #print 'you won! congratulations'
        #print 'it took', a, 'attempts to win'
        wins += 1
    else:
        a += 1
        print 'sorry...  try again'
        print 'attempt', a
  return a,wins
  #print "You Won %s Times!"%wins

play_again = True
while play_again:
    tries,wins = play()
    print "It Took %d Tries to win the Grand Prize"%tries
    print "You won normally %d Times"%wins
    play_again = raw_input("Play Again(y/n)?")==y
于 2012-09-27T17:02:57.583 に答える