2

だから私はほとんどそこにいると思います。ハンド数をカウントするポーカー ハンド履歴 txt ドキュメントを検索しています。

各ハンドの開始時に、「ゲーム #xxxxxx 開始」というステートメントがあります。

「はじまる」という言葉を見ています。各ハンドの開始時に存在するので、これのすべての発生を数えたいと思いました。

Hands_Played は常に 0 を返すので、探している単語が適切に取得されていないと思います

私が間違っていることはありますか?

Hands_Played = 0

def CountHands(Hands_Played):
    Hand_History_File = open("C:\xxxxx\blah_blah.txt", "r")
    data = Hand_History_File.read()
    print data
    print "Counting Hands..."
    for line in data:
        print "Loop" #Shows me that each line is being read
        if "starts." in Hand_History_File:
            Hands_Played = Hands_Played + 1
    return Hands_Played            

CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played
4

4 に答える 4

2

更新

また、後で使用する前に、関数からの戻り値を変数に割り当てる必要があります。

CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

する必要があります

Hands_Played = CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

そうしないと、カウントを受け取ることができず、プログラムの開始時に設定した初期値が表示されるだけです ( 0)。

さらに言えば、関数呼び出し間のカウントを維持していない限り、この関数のパラメーターは実際には必要ありません。関数の開始時に Hand_Played 変数を内部でローカルに作成し、今と同じようにそれを返します。関数ヘッダーと呼び出しからパラメーターを削除すると、すべて設定されます。

---以前、まだ適用されます。

それ以外の:

if "starts." in Hand_History_File:

あなたはおそらく欲しい

if "starts." in line:

また、作業が完了したら、ファイルを明示的に閉じることを忘れないでください。つまり、関数から戻るHand_History_File.close() 前に呼び出しを行います。

withさらに良いことに、構造体を使用してファイルを管理することを検討してください。処理が完了するか、例外が発生すると、ブロックの最後でファイルが自動的に閉じられます。また、ファイルを 1 行ずつ処理して、コードをさらに単純化することもできます。つまり、関数/コードの元の設計に近い合理化されたバージョンです。

def CountHands():
    Hands_Played = 0
    with open(r"C:\xxxxx\blah_blah.txt") as Hand_History_File:
       for line in Hand_History_File:  # process file line-by-line
           if "starts." in line:
              Hands_Played +=  1
    return Hands_Played


Hands_Played = CountHands(Hands_Played)
print "Number of Hands Played: %s" % Hands_Played

ノート:

「生の」文字列 (rパスの前に ' ' を付けたもの) を使用して、Python が文字列内の特定の文字の組み合わせを解釈しないようにします。openファイルを開くときのデフォルトであるため、呼び出しでは「r」を使用しません。演算子を使用し +=て増分を短縮します。で始まるブロックを離れると、ファイルは閉じられますwith

于 2012-07-23T13:28:20.703 に答える
1

Pythonにカウント自体をさせてみませんか?

def CountHands(Hands_Played):
    with open("C:\xxxxx\blah_blah.txt", "r") as Hand_History_File:
        Hands_Played += Hand_History_File.read().count("starts.")
    return Hands_Played            

コードで間違っていることは次のとおりです。

  1. を使用する必要がありますif "starts." in Hand_History_File。ここでは、「開始」の存在を確認します。ファイルの内容ではなく、ファイルハンドルに

  2. グローバルおよびパラメーター名と同じ変数名を使用します。したがって、関数で変更されたパラメーターはグローバルなものではなく、そのコピーにすぎません。これを修正するには、CountHands()呼び出しが返すものを印刷してみてください

于 2012-07-23T13:32:39.687 に答える
1

問題は、スコープを正しく使用していないことです。問題は、Python がHands_Played、関数が取り込んだ と関数のHands_Played外側を異なる変数として解釈していることです。以下のコードを見てください。

>>>variable = 10
>>>def addOne(variable):
    variable += 1
    return variable

>>>variable
10
>>>addOne(variable)
11
>>>variable
10

CountHands(Hands_Played)ステートメントに置き換えることでこれを修正できますHands_Played = CountHands(Hands_Played)

于 2012-07-23T13:35:01.433 に答える
0

これは、ファイルを反復処理する方法です。

with open('workfile') as f:
    for line in f:
        print line,
        # do something
于 2012-07-23T13:33:55.460 に答える