2
while answer  == 'Y':
    roll = get_a_roll()
    display_die(roll)
    if roll == first_roll:
        print("You lost!")
    amount_won = roll
    current_amount = amount_earned_this_roll + amount_won
    amount_earned_this_rol = current_amoun
    print("You won $",amount_won)
    print(  "You have $",current_amount)
    print("")
    answer = input("Do you want to go again? (y/n) ").upper()


if answer == 'N':
    print("You left with $",current_amount)
else:
    print("You left with $",current_amount)

ここでこのループを使用する目的はゲームであり、サイコロが振られ、最初のロールに一致するロールをロールしない限り、ロールの数ごとに報酬が支払われます。ここで、ループが発生した場合にループを停止する必要があります。これは、break ステートメントを使用して簡単に実現できることはわかっていますが、break ステートメントは許可されていないと指示されています。roll == first_roll の場合、他にどのようにループを終了させることができますか?

4

6 に答える 6

1

いくつかのボーナス ポイントと注意を取得し、ジェネレーター関数を使用します。

from random import randint

def get_a_roll():
    return randint(1, 13)

def roll_generator(previous_roll, current_roll):
    if previous_roll == current_roll:
        yield False
    yield True

previous_roll = None 
current_roll = get_a_roll()

while next(roll_generator(previous_roll, current_roll)):
    previous_roll = current_roll
    current_roll = get_a_roll()
    print('Previous roll: ' + str(previous_roll))
    print('Current roll: ' + str(current_roll))
print('Finished')
于 2013-11-04T18:12:05.610 に答える
0

continue許可されていますか?おそらくbreak(両方とも、ループを終了するのではなく、ループの先頭に戻る制御されたタイプです) にgotoあまりにcontinueも似ていますが、これを使用する方法を次に示します。

while answer  == 'Y':
    roll = get_a_roll()
    display_die(roll)
    if roll == first_roll:
        print("You lost!")
        answer = 'N'
        continue
    ...

負けた場合answerは「N」にハードコーディングされているため、条件を再評価するためにトップに戻ったときに false になり、ループが終了します。

于 2013-11-04T18:01:26.520 に答える