我绝对是编程领域的初学者。我正在做一本书中的一些练习,有些事情我不理解。 我在函数内使用readline()命令,然后在main()中启动for循环以查找文件中最大的数字。该文件在每行中都有一个数字列表:最大的数字在第二行中,但是由于某种原因,程序会跳过第二行(其中包含最大的数字)。这是代码:
def reader(filename):
nums = filename.readline()
return(nums)
def main():
filename = open("numbers.txt", 'r')
largest = reader(filename)
for line in filename:
number = reader(filename)
if number > largest:
largest = number
print("The largest number is:", largest)
main()
但是当我将readline()放入main()函数并在循环内更改参数时,一切正常:
def helper(filename):
nums = filename
return(nums)
def main():
filename = open("numbers.txt", 'r')
largest = helper(filename.readline())
for line in filename:
number = helper(line)
if number > largest:
largest = number
print("The largest number is:", largest)
main()
很明显我缺少一些东西,但我不知道到底是什么。
答案 0 :(得分:2)
for line in filename:
读取文件中的每一行。
在第一个代码示例中,在这样的循环中调用readline()
会导致for
循环丢失该行,因为该行已被readline()
占用,并且不再可供for
循环使用。
第二个代码示例不存在此问题,因为您不再在readline()
循环内调用for line in file:
。
答案 1 :(得分:0)
您正在跳过所有偶数行。首先,您读了一行:
largest = reader(filename)
那你又读了一个
for line in filename:
注释line
现在包含第二行。最后是3d时间:
nums = filename.readline()
由于您不使用line
,因此完全忽略了二读。当然,这将在下一个循环中继续-读取第4行,忽略它并获得第5行,等等。
还请注意,您没有剥离换行符(读取行会留下\n
)或转换为int
,因此您在比较字符串。
答案 2 :(得分:0)
def main():
filename = open("numbers.txt", 'r')
largest = -1
for line in filename:
if int(line) > int(largest):
largest = line
print("The largest number is:", largest)
main()