鱼C论坛

 找回密码
 立即注册
查看: 3630|回复: 1

[已解决]python29课时hw3【for和while在这里的区别】

[复制链接]
发表于 2017-10-2 21:12:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  11. else:
  12.     #打印前几行
  13.     if n[0] == ':':
  14.         n1=int(n[1:])   #n1表示用户输入的数字,例如输入:12,则n1=12
  15.         print('文件%s从开始到第%d行的内容如下:'%(name,n1))
  16.         i=0
  17.         for i in range(n1):
  18.             print(f.readline())
  19.             i+=1
  20.             
  21.     #打印后几行
  22.     if n[-1] == ':':
  23.         n2=int(n[0:-1]) #n2表示用户输入的数字,例如输入12:,则n2=12
  24.         print('文件%s从第%d行到末尾的内容如下:'%(name,n2))
  25.         c=f.readline()
  26.         i=0
  27.         while c:
  28.             #=================================================
  29.             while i in range(n2-1): #这个while是为了跳过前几行,从第n2行开始打印
  30.             #=================================================
  31.                 c=f.readline()
  32.                 i+=1
  33.             print(c)
  34.             c=f.readline()
  35.    
  36.         
  37.     #打印中间几行
  38.     if (n[0] != ':') and (n[-1] != ':'):
  39.         list1=n.split(':')
  40.         n1=int(list1[0])    #n1和n2分别为输入的起始与终止数字
  41.         n2=int(list1[-1])   #例如输入12:14,则n1=12,n2=14
  42.         print('文件%s从第%d行到第%d行的内容如下:'%(name,n1,n2))
  43.         c=f.readline()
  44.         i=0
  45.         while c and i < n2:
  46.             while i in range(n1-1):
  47.                 c=f.readline()
  48.                 i+=1
  49.             print(c)
  50.             c=f.readline()
  51.             i+=1
  52. f.close()
复制代码

最佳答案
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次输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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次输出。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 09:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表