1254007727 发表于 2017-10-2 21:12:00

python29课时hw3【for和while在这里的区别】

关于python29课时hw3,按照用户要求打印文件中的任意行文字,下面的代码应该是可以正确执行的
但是在【打印后几行】的代码部分,被#========圈起来的while语句,如果把while改成for,就不能正确执行了
比如输入28:
原来的语句会打印28行到最后一行
但是改成for之后,只会打印第28行
这是为什么呀,for和while的功能不应该是一样的吗?@小甲鱼
谢谢各路大神!
name=input('请输入要打开的文件(E:\\test.txt):')
n=input('请输入需要显示的行数【格式如13:21或:21或21:】:')
f=open(name,'r')

#打印全文
if n == ':':
    print('文件%s的全文的内容如下:'% name)
    c=f.readline()
    while c:    #不写成while f.readline():是因为防止跳行打印
      print(c)
      c=f.readline()

else:
    #打印前几行
    if n == ':':
      n1=int(n)   #n1表示用户输入的数字,例如输入:12,则n1=12
      print('文件%s从开始到第%d行的内容如下:'%(name,n1))
      i=0
      for i in range(n1):
            print(f.readline())
            i+=1
            
    #打印后几行
    if n[-1] == ':':
      n2=int(n) #n2表示用户输入的数字,例如输入12:,则n2=12
      print('文件%s从第%d行到末尾的内容如下:'%(name,n2))
      c=f.readline()
      i=0
      while c:
            #=================================================
            while i in range(n2-1): #这个while是为了跳过前几行,从第n2行开始打印
            #=================================================
                c=f.readline()
                i+=1
            print(c)
            c=f.readline()
   
      
    #打印中间几行
    if (n != ':') and (n[-1] != ':'):
      list1=n.split(':')
      n1=int(list1)    #n1和n2分别为输入的起始与终止数字
      n2=int(list1[-1])   #例如输入12:14,则n1=12,n2=14
      print('文件%s从第%d行到第%d行的内容如下:'%(name,n1,n2))
      c=f.readline()
      i=0
      while c and i < n2:
            while i in range(n1-1):
                c=f.readline()
                i+=1
            print(c)
            c=f.readline()
            i+=1
f.close()

lh625243422 发表于 2017-10-8 23:15:54

while i in range(n2-1) 表示的 当 i 是0到n2-2的值时候执行while循环,显然就跳过n2行,此处的 i in range(n2-1)是判断i是否是集合range(n2-1)的元素,是就是真,不是就是假,和下面的不同。
for i in range(n2-1),表示的是i依次是0到n2-1并且每次都执行for循环内容,注意你的i+=1不会对for循环的次数构成影响,下次外部while循环时候i又会从0到n2-2,所以是每隔n2-1次输出。
页: [1]
查看完整版本: python29课时hw3【for和while在这里的区别】