2017-01-18 9 views
1

私はGo Fish(それは完全に私がbtwをコーディングしていることです)をプレイしているとしましょう。そして、私は関数を持つペアをチェックしたいと思います。何とかすることができますが、どのように実行するか分からない可能性があると思われる方法は、同じ部分文字列が複数回出現するかどうかをテストすることです。部分文字列がPythonのリスト内に複数回現れるかどうかをチェックするにはどうしたらいいですか?

例:Player_hand = ['Ace of Spades', 'Nine of Diamonds', 'Ace of Diamonds']

今私はif Player_hand.find('Ace')==2を使用しようとしていたし、その全体'Ace'にある文字列のテストのみという。

TLDR:文字列でいっぱいのリストに部分文字列が複数回現れるかどうかをチェックしたいと思います。事前に助けてくれてありがとう!

EDIT:この質問はこの質問の重複

Finding multiple occurrences of a string within a string in Python

ではありません。この問題は、単一の文字列内の複数の出現を見つける方法と同様に、A内の全文字列の複数の出現を検索する方法を示しますリスト。私は文字列でいっぱいのリスト内の部分文字列の複数の出現を見つけることを探しています。

+0

うわーコミュニティがどのような高速応答、ここで素晴らしいです。私はそれが実際に重複しているとは思わない。 .findの使用法は、その答えとして説明されています。単一の文字列または文字列のリスト内で使用できます(リスト内の文字列全体を探している場合)。しかし、私は文字列の完全なリスト内の部分文字列の複数の反復を探しています。 – Bear99

答えて

3

あなたは、リスト内の各文字列のinを使用することができます。

>>> player_hand = ['Ace of Spades', 'Nine of Diamonds', 'Ace of Diamonds'] 
>>> sum(1 for x in player_hand if 'Ace' in x) 
2 

これはAceは、リストの文字列である場合、あなたに1を与えるリストを通過するジェネレータ式を使用しています。これらを合計すると、Aceを含む文字列の合計数が得られます。

+0

これは私の質問に答えるが、以下のプルーンの答えは完全に有効な答えでもある。本当にありがとう。 – Bear99

1

これは「X-Y」問題です。より高いレベルの問題がありますが、詳細については質問しています。

未使用の詳細を取り除くために入力を前処理することをお勧めします。あなたがそのスーツを気にする特別な理由はありますか?そうでない場合は、それらをダンプします。もしそうなら、それらを保つ...しかし、あなたの内部の利便性のためにカードをコーディングする。たとえば、上記の手をランクとスーツのペアのリストとして表します。

player_hand = ["AS", "9D", "AD"] 

必要に応じて、リストを並べ替えることで同じようなカードを集めることができます。そうでない場合は、最初の要素に番の機能を使用して、各アイテムの数を確認してください。

card_rank = "A23456789TJQK" 
rank_count = [player_hand.count(char) for char in card_rank] 

また、次の割り当てがより複雑なカードゲームをプログラムする場合は、これが一般的です。

あなたは動いていますか? OPのCOMMENT PER

UPDATE

player_hand = ["AS", "9D", "AD"] 
rank_hand = [card[0] for card in player_hand] 
card_rank = "A23456789TJQK" 
rank_count = [rank_hand.count(char) for char in card_rank] 
print rank_count 

出力:

[2, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0] 
+0

私はスーツが必要だと思います。両方とも、彼が手を見たときにプレイヤーに表示する(ユーザーフレンドリー)と、異なるカードを区別するための両方。リストに「Ace」という名前の4つの文字列しかありませんか?だから私はスーツを使いました。私はあなたの答えが何を伴うかも分かりません。 rank_countの出力を表示してもよろしいですか?私が多分辞書なしでそれをどのように利用できるかわからない。たぶん私は何を話しているのか分からない。 – Bear99

+0

あなたは何をしているのか知っています。辞書は、内部表記と外部ディスプレイとの間の優れた翻訳デバイスです。たとえあなたが2文字の書式にそれを取り除かなくても、カードをランク​​スーツのペアに分割することをお勧めします。印刷時に "of"を再度挿入します。 – Prune

+0

それは素晴らしいです、ありがとうございます。そのような言葉をチェックする方法はありますか?私は本当に、別の変数を持つことを避けるために、Player_handを形式のランクで保持したいと思います。そうすることで、rank_handに似たリストから引き出すことができますが、フルワード「エース」が2回出演した?信頼の投票にも感謝します:) – Bear99

関連する問題