|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
关于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[0] == ':':
- n1=int(n[1:]) #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[0:-1]) #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[0] != ':') and (n[-1] != ':'):
- list1=n.split(':')
- n1=int(list1[0]) #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()
复制代码
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次输出。
|
|