2

私は学校の 2 番目の課題に取り組んでおり、プログラミングは初めてです。Pythonでリストをカバーしているだけで、少し問題があります。リストを使って魚釣りゲームを作っています。いくつかの文字をリストまたは新しい文字列に変換する必要があります。別の文字列に連結する必要があるため、できれば文字列です。

のような各プレイヤーのカードを表すリストのリストがあり、pHands[0] = [ac,4c,2h,jd,ad]それを次のように変換する必要があります。"a 4 2 j a"

def MyCards (pHands,player_number):

    card_list = []
    for i in range(len(pHands[0])):
        card_list = card_list + (pHands[0][i][0])
    return card_list

str をリストに連結できないというエラーが発生しており、結合機能にあまり慣れていません。どんな助けでも大歓迎です!! どうもありがとう!

4

5 に答える 5

3

を使用しcard_list.append(pHands[0][i][0])ます。

+両側の要素がリストである場合にのみ、このコンテキストで機能します。したがって、次のこともできます。

card_list = card_list + [pHands[0][i][0]]

ただし、(1) 新しい一時リスト オブジェクトを割り当て、(2) 既存のリスト オブジェクトを変更する代わりに新しいリスト オブジェクトを返すため、これは無駄です。

于 2013-07-23T21:31:12.903 に答える
0

map は 2 番目の引数として iterable を取り、最初の引数として各要素に適用する関数を受け取ります。

文字列関数 .join() は iterable を引数として取り、呼び出された文字列を使用して要素を結合します。

そして最後に、カード スーツは 10 まで上がるので、0 インデックスを取得することを提案するすべてのソリューションは 10 で壊れ、誤って 1 を返します。「10c」[0:-1] のように、最初から 2 番目の最後の文字までインデックスを作成すると、これが解決されます。 ==「10」。

" ".join( 
  map( lambda i: i[0:-1], ["ac","4c","2h","jd","ad"] )
)
于 2013-07-23T22:26:56.603 に答える
0

リスト内包表記の使用:

>>> pHands = ['ac','4c','2h','jd','ad']
>>> " ".join([i[0] for i in pHands])
'a 4 2 j a'

文字列の結合メソッドは、リストなどの iterable の要素を単純に結合して文字列にします。リスト内包表記は、Python でリストを反復処理する効果的で楽しい方法です。

于 2013-07-23T21:33:14.640 に答える
0

リストと非リストを連結しようとしたため、エラーが発生しました。

これを行うには多くの方法があります。

一発ギャグ :def MyCards (pHands,player_number): return [i[0] for i in pHands[0]]

独自のコードを編集する場合:

def MyCards (pHands,player_number):
    card_list = []
    for i in range(len(pHands[0])):
        card_list.append(pHands[0][i][0]) 
        # remeber don't use concatenation here. i.e. card_list = card_list + [pHands[0][i][0]]
        # because it creates a new list and assign it to card_list and that is bad for space.
    return card_list
于 2013-07-23T23:27:06.233 に答える