python中循环的奇怪行为

时间:2015-08-20 12:26:36

标签: python python-3.x for-loop text

我正在编写此代码以读取文本文件,然后在每行之后打印行号,这里是我的代码

with open("newfile.txt") as f:
 for line in f:
  x=1
  y=str(x)
  print(line)
  print(x)
  x=x+1
f.close()

我应该期待像这样的事情

第一行

1

第二行

2

第三行

3

但我得到了

第一行

1

第二行

1

第三行

1

为什么会这样!?

4 个答案:

答案 0 :(得分:3)

您可以使用enumerate()

with open("newfile.txt") as f:
 for num,line in enumerate(f,1):
      print line,'\n',num

另请注意,使用with语句时无需关闭文件。它将自动为您完成。

关于代码中的x变量,您不应该在循环中初始化它,您需要将x=1放在循环之外。

答案 1 :(得分:1)

问题是您在循环内和x语句之前初始化1print

尝试:

x = 1
with open("newfile.txt") as f:    
  for line in f:
    y = str(x)
    print(line)
    print(x)
    x += 1 

答案 2 :(得分:1)

在代码中添加注释有助于您了解始终打印1的原因。

with open("newfile.txt") as f:
  for line in f:
   x=1            # x is now equal to 1
   y=str(x)       # x is still 1, y is now equal to '1'
   print(line)    # prints out the line
   print(x)       # 1 is printed
   x=x+1          # you now add 1 to x, but don't do anything with this 
                  # updated value, because in the next loop x is again
                  # initialised to 1
 f.close()

答案 3 :(得分:0)

代码的问题是循环内部的x = 1。通过将其移到外部并在获得所需结果之前初始化它。例如:

 x=1
 with open("newfile.txt") as f:
 for line in f:
 y=str(x)
 print(line)
 print(x)
 x=x+1

这应该有效