循环语句和列表
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)
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
将练习改写为用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)
求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]
列表的运算
运算符:
+ += * *= (算法功能同字符串)
+ :用于拼接列表
>>> 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()
以上是关于循环语句和列表的主要内容,如果未能解决你的问题,请参考以下文章