循环语句和列表

Posted alan-song

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环语句和列表相关的知识,希望对你有一定的参考价值。

循环语句2

for 语句

作用:
用来遍历(所有的事情只经历一遍)迭代对象的数据元素
讲解:火车发现朋友发朋友圈同一两火车,去找朋友,火车车厢的,把所有的车厢找一遍就能找到他。
可迭代对象是指能一次获取数据元素的对象
可迭代对象包括:
字符串:str
列表: list
元组: tuple
字典: dict

for 语法
for 变量列表 in 可迭代对象:
语句块1
else:
语句块2

说明:
可迭代对象不能在提供对象时,遍历结束,执行else字句。else可以省略,当循环内部用break语句终止循环时,else字句部分的句子不在执行。
示例:

 1 # 法一
 2 s = 0#用于累加
 3 for x in range(1, 101):
 4     if x % 5 == 0:
 5         continue
 6     if x % 7 == 0:
 7         continue
 8     if x % 11 == 0:
 9         continue
10 
11     print(x, end= )
12 
13     s += x
14 print("和:", s)
15 print("--------------------------------------------")
16 
17 # 法二
18 s = 0#用于累加
19 for x in range(1, 101):
20     if x % 5 == 0 or x % 7 == 0 or x % 11 ==0:
21         continue
22     s +=x
23     print(x)
24 
25 print("heshi:",s)
26 
27 
28 (szh====>#,szh)
29 
30 print("当 for语句结束后,szh绑定的是:",szh)


练习:
任意输入一段字符串
1.计算你输入的字符‘A’,个数,并打印出来
2.计算出空格的个数,并打印出来
(要用for的语句,不允许使用s.count()方法)
思考用while语句能否实现上述功能?

 1 adeshu=0
 2 kgshu=0
 3 s=input(请输入字符串)
 4 for szh in s:
 5     if szh == A:
 6         adeshu +=1
 7     if szh ==  :
 8         kgshu +=1    
 9 print("A的个数",adeshu)#或print("A的个数",adeshu,"空格数",kgshu)
10 print("空格数",kgshu)
11 
12 # count_A =0
13 # count_space =0
14 # i = 0 #获取索引
15 # while i < len(s):
16 #     ch =s[i]#取出字符
17 #     #先判断ch是否是"A"
18     # if ch == ‘A‘:
19     #     count_A +=1
20     # if ch == ‘ ‘:
21     #     count_space +=1  
22     # i +=1#限制循环
23 # print("A的个数",count_A) 
24 # print("空格数",count_space)

 

range() 函数

格式:
range(stop)
从零开始,每次生产一个整数后加1的操作,直到stop为止,(不包含stop)
range(start,stop[,step])
从start开始,每次生产一个整数后移动step,直到stop为止(不包含stop,且step可以是负数)
详见:
>>>help(range)
作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生产器)
说明:
range函数调用返回的对象可用于for语句来进行一次迭代取出其中的整数
示例:
range(4) #生成0,1,2,3
range(1,10,2) #生成1,3,5,7,9
range(5,0,-2) #生成5,3,1
range(4,0) #空
示例见:range.py

 1 for x in range(4):
 2     print(x)        #0  1  2  3 
 3 
 4 print(-------------)
 5 for x in range(3, 6):
 6     print(x) 
 7 print(=============)
 8 
 9 for i in range(1, 21):
10     print(i, end= )
11 print()
12 
13 s=1
14 while s<=20:
15     print(s, end= )
16     s +=1
17 print()

 


练习:
1求100以内那些整数与自身+1的乘积在对11求余的结果等于8的数


2.写程序计算 1 + 3 + 5 +... + 99的和


for 语句嵌套

只要是语句就能放在语句能存在的地方

示例:
for x in ‘asb‘:
for y in ‘123‘:
print(x + y)

#现实中可以用来生成有规律的编号,


思考:

for x in range(5):
for y in range(10):
print(x,y,‘ABC‘)
请问这条语句执行多少次?

#50次

练习:

用for语句实现
1.输入一个数代表正方型的宽度N打印如下:
如:输入5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5

#法一
k=int(input(请输入正方形的宽))            
for x in range(1,k+1):    #
    for x in range(1, k+1):#行数          
        print(x, end= )
    print()   

#  法二
z = int(input(请输入正方形的宽:))
j = 0
while j < z:
    i=1
    while i <= z:
        print(i,end= )
        i +=1
    j +=1
    print()    
else:
    print()

 


2.写程序来改写上题,如输入5,打印如下:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9

技术分享图片
 1 # 法一
 2 k=int(input(请输入正方形的宽))
 3 for line in range(k):#行数
 4     for x in range(x,k+x):
 5         print(%02d % x, end= )
 6     print()
 7 
 8 # 法二    
 9 k=int(input(请输入正方形的宽))
10 for line in range(1, k+1):#行数
11     for x in range(line,k+line):
12         print(%02d % x, end= )
13     print()
14 for x in range(5):
15     if x == 2:
16         continue
17     print(x)
18 
19 # 打印10以内的偶数
20 for n in range(10):
21     if n %2 ==1:#奇数
22         continue#取下一个数
23     print(n)
View Code

 

continue 语句

问题:

如何让程序不再向下执行,重新开始新的一次执行
continue语句的作用:
用于循环语句(while,for语句)中,不在执行本次循环内continue之后的语句,重新开始新的循环。
说明:
1.在while语句中执行continue语句,不在执行本次循环内continue之后的语句,直接跳转到while真值表达式进行判断。
2.在for语句中执行continue语句,不绑定本次遍历的元素,继续遍历下绑定一个元素。

练习:

输入一个整数用begin绑定
在输入一个整数用end绑定
打印从begin开始,到end结束内的全部奇数(不包含end)

技术分享图片
 1 begin = int(input(请输入:))
 2 end = int(input(请输入:))
 3 for x in range(begin,end):
 4     if x % 2 ==0:
 5         continue
 6     print(x)
 7 
 8 #用while循环打印10以内的奇数数
 9 for n in range(10):
10     if n % 2 ==1:
11         continue
12     print(n)
13 
14 
15 i=0
16 while i<10:
17     if i %2 ==0:#== 0求奇数/== 1偶数
18         i +=1
19         continue
20     print(i)
21     i +=1
View Code

 

将练习改写为用while语句

技术分享图片
 1 begin = int(input(请输入:))
 2 end = int(input(请输入:))
 3 while begin < end:
 4     if begin % 2 == 0:
 5         begin +=1
 6         continue
 7     print(begin)
 8     begin +=1
 9 
10 
11 begin = int(input(请输入:))
12 end = int(input(请输入:))
13 i=begin
14 while i<end:
15     if i % 2 ==0:
16         i +=1
17         continue
18         print(i)
19     i +=1
20 
21 begin = int(input(请输入:))
22 end = int(input(请输入:))
23 i=begin
24 while i<end:
25     i +=1
26     if (i -1) % 2 ==0:
27         continue
28     print(i-1)
View Code

 

求1~100之间所有不被5,7,11整除的数的和(可以考虑用continue实现)

 1 # 法一
 2 s = 0#用于累加
 3 for x in range(1, 101):
 4     if x % 5 == 0:
 5         continue
 6     if x % 7 == 0:
 7         continue
 8     if x % 11 == 0:
 9         continue
10 
11     print(x, end= )
12 
13     s += x
14 print("和:", s)
15 print("--------------------------------------------")
16 
17 # 法二
18 s = 0#用于累加
19 for x in range(1, 101):
20     if x % 5 == 0 or x % 7 == 0 or x % 11 ==0:
21         continue
22     s +=x
23     print(x)
24 print("heshi:",s)

 

容器类

列表 list

列表的定义:
1.列表是一种容器(通常用来存储计算机的数据对象,可以存放任意类型的数据对象)
2.列表是可以被改变的序列 扩展:id(内存地址)不变的情况下改变列表,所以是可变数据类型
3.列表是由一系列特定元素组成的,元素与元素之间可能没有任何关关联系,但它们之间有先后顺序关系。
创建空列表的字面值方式
l = [] #l绑定空列表
创建非空列表的字面值方式
l = [1,2,3,4]
l = [‘北京‘,‘上海‘,‘深圳‘,‘西安‘]
l = [1,‘two‘,3.14,‘四‘]
l = [1,2,[3.1,3.2,3.3],4]
列表的构造函数 list
list() 生产一个空的列表,等同于[]
list(iterable) 用可迭代对象创建一个列表
示例:

技术分享图片
1 l = list() #l = []
2 l = list(hello) #l = [‘h‘,‘e‘,‘l‘,‘l‘,‘o‘]
3 l = list(range(5,10,2)) #l = [5,7,9]
View Code

列表的运算
运算符:
+ += * *= (算法功能同字符串)
+ :用于拼接列表
>>> x = [1,2,3]
>>> y = [4,5,6]
>>> z = x + y
[ 1, 2, 3,4, 5, 6]
>>> z
>>> z =y + x
>>> z
[4, 5, 6, 1, 2, 3]
+= :用于将右侧的可迭代对象的数据追加到原列表
>>> x = [1,2,3]
>>> y = [4,5,6]
>>> x += y
>>> x
[ 1, 2, 3,4, 5, 6]

* : 用于生成重复的列表,新的列表
*=: 赋值生成重复列表,地址不变
比较运算:同字符串规则完全相同:按编码值依次进行比较,只有依次对应比较的是同类型,不同类型比较会出错
== != < <= > >=
如:[1,2,3] < [1,3,2] #True
[‘w‘,1] < [2,‘w‘] # 出错

列表是可迭代对象:
L = [2,3,5,7,11]
for x in L:
print(x)
成员检查:in/not in
判断一个元素是否存在列表当中,如果存在则返回True,否则返回False
in 和not in的返回值相反
示例:

1输入三行文字,将这三行文字保持于一个列表l中,并打印如:
请输入: abc
123
你好
生成列表如下:[‘abc‘,‘123‘,‘你好‘] print(L)

 1 a = abc
 2 b = 123
 3 c = 您   好
 4 # L = [a, b, c]
 5 # print(L)
 6 
 7 # a=input("请输入")
 8 # b=input("请输入")
 9 # c=input("请输入")
10 # L=[a, b, c]
11 # print(L)
12 
13 L = []
14 a=input("请输入")
15 b=input("请输入")
16 c=input("请输入")
17 L.append(a)
18 L.append(b)
19 L.append(c)
20 print(L)

 


2.输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
  2.1打印L列表中的内容
  2.2计算你共输入了几行内容
  2.3计算你共输入了多少个字符

 1 a = []
 2 h = 0 #行数
 3 while True:
 4     w = list(input(输入任意行文字))
 5     if w ==[]:
 6         break
 7     a +=w#输入后列表
 8     n = len(a)#输入后字符长度
 9     h +=1
10 print(a,输入的行数,h, 字符个数,n)

 


3.输入一个整数(代表树干的高度)
打印出如下一棵树
输入2
*
***
*
*
输入3 *
***

 1 for i in range(1, w+1):# 打印树叶
 2 # 或:for i in range(w):
 3         i +=1
 4     print( *(w-i)+$*(2*i-1))
 5 for g in range(1, w+1):
 6     print( *(w-1)+$)
 7 
 8 
 9 while True:
10     tree_lenght = int(input(请输入一个树干的高度))
11     i = 1
12     j = 1
13     while i <= tree_lenght:
14         print( *(tree_lenght-i)+**j,)#弄清楚长度最大值(tree_lenght+2)和空格和i的关系来设置
15         i +=1#控制行数
16         j +=2#控制*号的个数,*号是以+2递增。
17     for i in range(tree_lenght):
18         print( *(tree_lenght-1)+"*")
19     choice = input("输入0退出,按其他继续输入:")
20     if choice == 0:
21         break

 


4.输入任意一个整数,判断这个数是否素数(prime),素数(也叫质数),只能被1和本身整除且大于1的正整数。

如:2 3 5 7 11等
 提示:
 用排除法:当判断x 是否是素数时,只要让x分别除以2,3,4,5,..... x-1只要整除了,那x就不是素数,否则x 是素数

1 a = int(input(输入一个整数:))
2 for z in range(2,a-1):
3     if a % z == 0:
4         print(不是素数)
5         break
6 else:
7     print(是素数,a)

 

 

5.算出100 -1000以内的水仙花数(Naricissistic Number)
水仙花数是指百位的3次方加上十位的3次方加上个位的三次方等于原数
xyz = x**3+z**3+y**3
索引index
切片slice

 1 # 法一
 2 for s in range(100,1000):
 3     a = int(s/100)#百位
 4     b = int(s/10%10)#十位
 5     c = int(s%10)#个位
 6     if s == a**3 + b**3 + c**3:
 7         print(s)
11 
12 # 法二
13 for z in range(100,1000):
14     a = (int(str(z)[0]))**3
15     b = (int(str(z)[1]))**3
16     c = (int(str(z)[2]))**3
17     if a + b + c == z:
18         print(z)
19 
20 # 法三(有误)
21 def isArmstrongNumber(n):
22     a = []
23     t = n 
24     while t > 0:#循环找出每一位数的值
25         append (t % 10) * t / = 10 
26         3 = len(a)
27     return
28     sum([x**3 for x in a ]) ==n
29     for x in range (100,1000):
30         if isArmstrongNumber(n):
31             print x
32 
33 # 法四:
34 for a in range(1,10):#百位
35     for b in range(10):#十位
36         for c in range(10):#个位
37             if a*100+b*10+c == a**3 + b**3 + c**3:
38                 print(a*100+b*10+c)
39 print(a,b,sep= )
40 print(a,b,end= )
41 print()

 

以上是关于循环语句和列表的主要内容,如果未能解决你的问题,请参考以下文章

python中的while循环与for循环怎么样那个比较好用?

值得收藏!16段代码入门Python循环语句

shell if 语句

循环语句和列表

常用python日期日志获取内容循环的代码片段

如何使用引导程序和 for 循环在 django 中创建电影片段?