所以我想我差不多了。我正在搜索计算牌数的扑克手牌历史文件。
在每手牌开始时我们都有这个声明“游戏#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
答案 0 :(得分: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
注意:
我使用“raw”字符串(路径前面带有“r
”)来阻止Python解释字符串的某些字符组合。我在open
调用中不使用“r”,因为它是打开文件时的默认值。我使用+=
运算符来缩短增量。当您使用with
开始阻止该块时,您的文件将被关闭。
答案 1 :(得分: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
您的代码中出现的错误是:
你应该使用if "starts." in Hand_History_File
,在这里检查是否存在“开始”。在您的文件句柄中,而不是在文件的内容
使用相同的变量名作为全局和参数名称。因此,在函数中修改的参数不是全局参数,只是它的副本。要更正此问题,请尝试打印CountHands()
调用返回
答案 2 :(得分:1)
问题是你是not using scope correctly.问题是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)
来解决此问题。
答案 3 :(得分:0)
这是迭代文件的方式:
with open('workfile') as f:
for line in f:
print line,
# do something