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构造来管理您的文件。当您完成它或遇到异常时,它将在块的末尾自动为您关闭文件。您还可以逐行处理文件并进一步简化代码。即,流线型版本,接近您的函数/代码的原始设计:

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

问题是您没有正确使用范围。问题是pythonHands_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 回答