大家好,欢迎来到IT知识分享网。
一、for循环
for循环是最常见的循环语法,python中的for循环语法如下:
for data in iterator: statement1 else: statement2
这里注意,可迭代的数据都可以通过for循环获取,之前介绍python的基本数据类型的时候已经说明了可迭代的对象是包含__iter__ 方法的对象。还需要注意,常见的for循环不包括后面的else部分。但是python中for语句可以和else语句一起使用。当for循环不是被break打断时,else的语句就会执行!!(谨记)。python中的序列类型(string,list,tuple)都是可迭代的对象。下面通过for循环以此获取序列类型的数据。
1. str
a = "python" for x in a: print(x) 输出: p y t h o n
2.list
a = "python" for x in list(a): print(x)
输出:
p
y
t
h
o
n
3.tuple
a = "python" for x in tuple(a): print(x) 输出: p y t h o n
4.range(start, stop[, step]) –输出偶数和奇数
偶数
for x in range(2,10,2): print(x) 输出: 2 4 6 8
奇数
for x in range(1,10,2): print(x) 输出: 1 3 5 7 9
这个例子同时介绍了range函数的用法,range(start, stop[, step]) 三个参数依次是:开始值,结束值(无法取到),步长。类似于序列的切片操作.参考文章:【Python3系列_002】Python3-序列类型与通用方法
二、for循环中的break和continue
break 会终止本层循环
continue 会跳过本层本次循环
break和continue都只作用与本次循环,不会影响外循环
for i in range(5): print('iii',i) for j in range(5): if j == 2: continue print('kkk',j)
输出:
iii 0
kkk 0
kkk 1
kkk 3
kkk 4
iii 1
kkk 0
kkk 1
kkk 3
kkk 4
iii 2
kkk 0
kkk 1
kkk 3
kkk 4
iii 3
kkk 0
kkk 1
kkk 3
kkk 4
iii 4
kkk 0
kkk 1
kkk 3
kkk 4
break会终止本层循环
for i in range(5): print('iii',i) for j in range(5): if j == 2: break print('kkk',j) 输出: iii 0 kkk 0 kkk 1 iii 1 kkk 0 kkk 1 iii 2 kkk 0 kkk 1 iii 3 kkk 0 kkk 1 iii 4 kkk 0 kkk 1
三、面试题
1.实现9*9乘法表。
9*9应该是基本的for循环题目,不仅考察了基本的for循环的使用,对于python来说同时考察了print函数的用法。print(value, …, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False).其中end参数是设置打印结尾符号,默认为换行,修改为\t后默认结尾打印空格。
for x in range(1,10): for y in range(1,x+1): print("{}*{}={}".format(y,x,x*y),end="\t") print() 输出: 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
2.输入字符串判断是否是回文?
方法1:直接使用序列的通用操作:切片。查看反序是否与原文相等。
a='sstss' print(a[::]==a[::-1]) 输出:True
方法2:使用循环比较首尾是否相等。
a='sstss' for x in range(len(a)): if a[x]!=a[-x-1]: break else: print("Yes") 输出:Yes
这里比较的关键在于比较的索引是否正确:
s s t s s
0 1 2 3 4
-5 -4 -3 -2 -1
因此正向取的索引与逆向索引的关系是:a[x]=a[-(x+1)]
3.求出如下序列的总和:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
fenzi=2 fenmu=1 result=0 for x in range(20): result+=fenzi/fenmu fenzi,fenmu=fenmu+fenzi,fenzi print(result) 输出:32.66026079864164
解释如下:由于是求前20项的和,因此需要求出每一项并相加。因此相加的结果result+=fenzi/fenmu。每一项的关系如下:f(n)fenzi=f(n-1)fenzi+f(n-1)fenmu,f(n)fenmu=f(n-1)fenzi.并且同时改变fenzi,fenmu。
4.有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
count = 0 for bai in range(1, 5): for shi in range(1, 5): for ge in range(1, 5): if bai == shi or shi == ge or bai == ge: continue print("{0}{1}{2}".format(bai, shi, ge)) count += 1 print("总共有:"+str(count)+"种") 输出: 123 124 132 134 142 143 213 214 231 234 241 243 312 314 321 324 341 342 412 413 421 423 431 432 总共有:24种
5.有两个列表x 和 y,要求:y中的元素如果在x中也有的话,就把该元素从x中移除,在全部移除之后打印:“移除结束”,和x y
x = [‘a’,’a’,’b’,’c’,1,2,3]
y = [‘a’,’b’,2,3]
方法1:利用集合求差集
x = ['a','a','b','c',1,2,3] y = ['a','b',2,3] print(set(x)-set(y)) 输出:{1, 'c'}
方法2:for循环,y中的元素如果在x中也有的话,就把该元素从x中移除
x = ['a','a','b','c',1,2,3] y = ['a','b',2,3] for i in y: while i in x: x.remove(i) #del x[x.index(i)] else: print('移除结束') print(x) print(y) 输出: 移除结束 ['c', 1] ['a', 'b', 2, 3]
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/32800.html