0

私はPythonが初めてで、ポーカーの手を扱い、パットフラッシュをチェックするコードを書こうとしています。以下は、実行しようとしたときのコードとシェルです。私の教授によるとTrue、手にスーツが 1 つしかない場合、つまりセット「スーツ」にエントリが 1 つしかない場合、これは返されるはずですが、Falseそうでない場合は、このエラー メッセージが表示され続けます。誰かが私にこれを説明するのを手伝ってもらえますか?

from random import *

suits = {'H','C','D','S'}   #hearts, clubs, diamonds, spades
ranks = {'a','2','3','4','5','6','7','8','9','10','j','q','k'}  #card values
deck = [r +s for r in ranks for s in suits]
hand = []

def deal (n):
    '''deals n hands'''

    for n in range (0,n):
        hand = sample (deck,5)

        for x in hand:
            deck.remove (x)

        print (hand)

def is_flush (hand):
    '''checks for pat flush hands'''
    suits = {c[-1] for c in hand}
    return len(suits) == 1

RUN

>>> is_flush (5)

['10S', 'qD', '8H', '8D', '3S']
['5C', 'jC', 'kS', '4C', '2H']
['2S', '7C', '7H', '7S', '9S']
['8C', '8S', 'aH', '5S', '2D']
['9D', '6S', '4D', 'qS', '9H']

Traceback (most recent call last):
  File "<pyshell#17>", line 1, in <module>
    is_flush (5)

  File "K:/stalter_3.py", line 19, in is_flush
    suits = {c[-1] for c in hand}

TypeError: 'NoneType' object is not iterable

>>> 
4

1 に答える 1

0

を呼び出していますis_flush(5)。私があなたを正しく理解していれば、その値 5 は、handで (手のように) 反復しようとしている変数ですがc[-1] for c in hand、整数を反復することはできません。私が混乱している理由は、NoneType ではなく IntType であると言うことを期待しているからです。

于 2012-09-20T18:55:46.987 に答える