0

Pythonで簡単なカードゲームを作ろうとしています。

ハンド リストの任意のカードを左に 1 または 3 スペース移動できる必要があり、その場所に既にあるカードが番号またはスイートのいずれかと一致する場合は、それを交換する必要があります。

これが私がこれまでに試したことです:

移動するように指定されたスペースの数を MN と仮定します。MCがその数のスペースを移動するために指定されたカードであると仮定します。Hand は、現在手札にあるカードのリストであると仮定します。

if MN == '1':
    Hand.replace(Hand[Hand.index(MC) - int(1)], MC)
if MN == '3':
    Hand.replace(Hand[Hand.index(MC) - int(3)], MC)

したがって、基本的には、指定されたカード (MC) をカードのリスト (ハンド) の正しい数のスペース (MN) に移動する方法を見つけなければなりません。

私の手がこのように見えた場合:

[ JC,  4C,  7D,  KS,  3S]

次に、3S 1 スペースを左に移動して、同じスイートを持っている KS を置き換えることができるはずです。

[ JC,  4C,  7D,  3S]

よろしくお願いします。

4

2 に答える 2

3

一般に、リスト内のアイテムを移動するとは、元の場所からポップして、目的の場所に挿入することを意味します。残念ながら、あなたの質問は Hand および Card クラスがどのように見えるかについて不十分な情報を提供しますが、Hand が単純なリストである場合、次のようにする必要があります。

HI = Hand.index(MC)
if (MN == '1') or (MN == '3'):
    Hand[HI - int(MN)] = MC
    Hand.pop(HI)

ここでの数とスイートの比較は、情報が不十分なため省略されていることに注意してください。

于 2011-11-07T07:37:05.037 に答える
0

リストのスライス表記を使用します: http://docs.python.org/tutorial/introduction.html#lists

たとえば、次のようなリストがあるとします。

l = [1, 2, 3, 4, 5, 6, 7, 8]

そして、要素を 1 スペース分移動したい4場合は、次のようにすることができます。

index = 3
value = 4
spaces = 1
target = index - spaces
length = len(l)

# don't replace the element
l[0:target] + [value] + l[target:index] + l[index+1:length]
# results in [1, 2, 4, 3, 5, 6, 7, 8]

# do replace the element
l[0:target] + [value] + l[target+1:index] + l[index+1:length]
# results in [1, 2, 4, 5, 6, 7, 8]

パラメータindexvaluespacesおよびtargetが抽出されているため、これは適切な関数に抽出するのに十分一般的です。他の値で試してみてください (1 や 3 だけではありません)。spacesが高すぎる場合、結果は元のリストになります。

要素を左ではなく右に移動したい場合は、式を少し変更する必要がありますが、考え方は同じです。

于 2011-11-07T07:36:32.750 に答える