-1

私はソリティアのアコーディオン スタイルに基づいて python プログラムを書いています。上記のコードを書き、ここ数時間いじっていますが、ループを正しく実行できないようです。なんらかの理由で、ループを一度だけ実行して再度入力を要求しないか、一度実行して入力を要求し、何を入力してもクラッシュします。ここで私が間違っていることはありますか?

これが私のコードです:

import random

print("Command Options:")
print("1C - Play card C onto pile 1 position back, ignored if invalid")
print("3C - Play card C onto pile 3 positions back, ignored if invalid")
print("C - Count of undealt cards")
print("D - Deal next card")
print("H - Print this help screen")
print("R - Resign this game (quit early)")
print("X - Exit Program")

cards=['AC','2C','3C','4C','5C','6C','7C','8C','9C','TC','JC','QC','KC','AD','2D','3D','4D','5D','6D','7D','8D','9D','TD','JD','QD','KD','AH','2H','3H','4H','5H','6H','7H','8H','9H','TH','JH','QH','KH','AS','2S','3S','4S','5S','6S','7S','8S','9S','TS','JS','QS','KS']
random.shuffle(cards,random.random)

playable=[]
done=False
while not done:
    move=input("Enter move: ")
    move_upper=move.upper()
    if move_upper == 'D':
        playable.append(cards.pop())
        print(playable)
    if move_upper == 'X' or 'R':
        done=True

    if move_upper == 'H':
        print("Command Options:")
        print("1C - Play card C onto pile 1 position back, ignored if invalid")
        print("3C - Play card C onto pile 3 positions back, ignored if invalid")
        print("C - Count of undealt cards")
        print("D - Deal next card")
        print("H - Print this help screen")
        print("R - Resign this game (quit early)")
        print("X - Exit Program")
    if move_upper == 'C':
        k=0
        for item in cards:
            k+=1
            print(K,'cards left')
4

2 に答える 2

3

あなたは仕組みを誤解してorいます。使用する:

if move_upper in ('X', 'R'):

代わりは。

move_upper == 'X' or 'R'は代わりに解釈され(move_upper == 'X') or 'R'、空でない文字列は常にと見なされTrueます。したがって、あなたは本質的に をテストしていまし(move_upper == 'X') or Trueたが、それが何でmove_upperあるかはもはや問題ではありません。

doneここでフラグ変数を使用する必要はありません。break代わりにループを終了するために使用します。

while True:
    # ...

    if move_upper in ('X', 'R'):
        break
于 2013-05-08T16:52:14.340 に答える
0

現在、コードレビュー気分ですので、ご容赦ください。

cards = [ number + suite for number in 'A23456789TJQK' for suite in 'CDHS' ]

より読みやすくなり、この方法でそこにバグが発生する可能性が減少します。

于 2013-05-08T18:30:04.080 に答える