【Python3_基础系列_011】Python3-循环语句-for

一、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://www.cnblogs.com/forfreewill/articles/9293525.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值