1.python中的语法列表,循环,元素
容器的基本特征:一个容器型的数据可以同时保存多个其他的数据
元素:容器中每一个独立的数据就是一个元素
列表:是容器型数据类型(序列):将[]作为容器的标志,里面多个元素用逗号隔开:[元素1,元素2,元素3,…] 。
特点:列表是可变的(元素的个数、值和顺序可变)增,删,改;列表是有序的。
要求:没有要求(不管什么类型的数据都可以作为列表的元素)
查:获取元素
种类:获取单个元素,切片,遍历(一个一个的取)
获取单个元素
任何结果是列表的表达式,比如:保存列表的变量、具体的列表值等任何结果是列表的表达式,
固定写法
下标又叫索引,是元素在有序序列中位置信息。
Python中有序序列中每个元素都有两组下标值,分别是:从前往后从0开始递增的下标值;从后往前从-1开始递减的下标值空列表
len(列表) 获取列表中元素的个数
代码如下:
scores = [90,89,23,54] print (sum(scores)/len(scores)) list1 = [] list2 = [ ] print(type(list1),type(list2)) #<class 'list'> print(bool(list1),bool(list2)) #<class 'list'> print(len(list1),len(list2)) #False False list3 = [21,32,32,34,87,90] print(list3) #[21, 32, 32, 34, 87, 90] list4 = [ [1,3,4], [3,5,6], [7,8,9] ] print(list4) # [[1, 3, 4], [3, 5, 6], [7, 8, 9]] names = ['甄姬','貂蝉','韩信',' 吕布','赵云','后裔','鲁班','狄仁杰'] print(names[1]) #貂蝉 print(names[-1]) #狄仁杰 print(names[5]) #后裔 print(names[-5]) #吕布 #print(names[10]) 下标不能越界 for x in names: print(x,end = ' ') # 甄姬 貂蝉 韩信 吕布 赵云 后裔 鲁班 狄仁杰 for index in range(len(names)): print(index,names[index],end = ' ') # 0 甄姬 1 貂蝉 2 韩信 3 吕布 4 赵云 5 后裔 6 鲁班 7 狄仁杰 for index, item in enumerate(names): print(index,item,end = ' ') # 0 甄姬 1 貂蝉 2 韩信 3 吕布 4 赵云 5 后裔 6 鲁班 7 狄仁杰
2.循环嵌套
# 循环嵌套的执行原则:外循环一次,内循环完整 for x in range(5): for y in range(2, 5): print(x, y) x取值范围:0,1,2,3,4 第1次 x=0: 执行循环体对应的for循环, y取值范围是: 2,3,4 第1次 y=2: print(x, y) -> print(0, 2) 第2次 y=3: print(x, y) -> print(0, 3) 第3次 y=4: print(x, y) -> print(0, 4) 内循环结束 第2次 x=1: 执行循环体对应的for循环, y取值范围是: 2,3,4 第1次 y=2: print(x, y) -> print(1, 2) 第2次 y=3: print(x, y) -> print(1, 3) 第3次 y=4: print(x, y) -> print(1, 4) 内循环结束
3.元素
列表.append(元素) - 在列表的最后添加一个元素 列表.insert(下标, 元素) - 在指定下标对应的元素前插入指定元素 """ movies = ['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪'] print(movies) # ['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪'] movies.append('肖生克的救赎') print(movies) # ['五十六度灰', '哥斯拉大战金刚', '桃花侠大战菊花怪', '肖生克的救赎'] movies.insert(2, '沉默的羔羊') print(movies) # ['五十六度灰', '哥斯拉大战金刚', '沉默的羔羊', '桃花侠大战菊花怪', '肖生克的救赎'] # 2)批量添加 # 列表1.extend(列表2) - 将列表2元素全部添加到列表1的后面 movies.extend(['让子弹飞', '触不可及', 'V字仇杀队']) print(movies) # ['五十六度灰', '哥斯拉大战金刚', '沉默的羔羊', '桃花侠大战菊花怪', '肖生克的救赎', '让子弹飞', '触不可及', 'V字仇杀队'] # 练习:将scores中所有的及格的分数提取出来 # [89, 67, 90, 98, 78, 99] scores = [89, 67, 56, 90, 98, 30, 78, 51, 99] scores2 = [] for x in scores: if x >= 60: scores2.append(x) print(scores2)
4.习题
# 1.使用for和while循环输出 0~100 内所有3的倍数。 print('==================第1题(1)===============') # 方法一 for num in range(0, 100, 3): print(num) # while循环 print('==================第1题(2)===============') num = 0 # 保存3的倍数,默认是0 while True: # 打印3的倍数 print(num) num += 3 if num >= 100: break # 2. 使用for和while循环输出100~200内个位数或者十位数能被3整除的数。 # 234 print('==================第2题(1)===============') for num in range(100, 200): if num % 10 % 3 == 0 or num // 10 % 10 % 3 == 0: print(num) for num in range(100, 200): ge = num % 10 if ge % 3 == 0: print(num) continue shi = num // 10 % 10 if shi % 3 == 0: print(num) print('==================第2题(2)===============') num = 100 while True: if num % 10 % 3 == 0 or num // 10 % 10 % 3 == 0: print(num) num += 1 if num >= 200: break # 3.统计100~200中十位数是5的数的个数 print('==================第3题===============') count = 0 for num in range(150, 160): count += 1 print(count) # 4. 打印50~150中所有能被3整除但是不能被5整除的数 print('==================第4题===============') for num in range(51, 150, 3): if num % 5 != 0: print(num) for num in range(51, 150, 3): if num % 5 == 0: continue print(num) # 5.计算50~150中所有能被3整除但是不能被5整除的数的和 print('==================第5题===============') sum1 = 0 for num in range(51, 150, 3): if num % 5 != 0: sum1 += num print(sum1) # 6. 使用循环计算1*2*3*4*...*10的结果。 print('==================第6题===============') sum1 = 1 for num in range(1, 11): sum1 *= num print(sum1) # 7.统计100以内个位数是2并且能够被3整除的数的个数。 print('==================第7题===============') count = 0 for num in range(2, 100, 10): if num % 3 == 0: count += 1 print(num) print('个数:', count) # 8.输入任意一个正整数,求他是几位数? # 234 -> 3 234 // 10 = 23 // 10 = 2 // 10 = 0 # 1024 -> 4 1024 // 10 = 102 // 10 = 10 // 10 = 1 // 10 = 0 print('==================第8题===============') num = int(input('请输入一个正整数:')) count = 0 while True: num //= 10 count += 1 if num == 0: break print(count) # 9.判断指定的数是否是素数(素数就是质数,即除了1和它本身以外不能被其他的数整除的数) print('==================第9题===============') num = 7 # 方法一:基本逻辑(没有优化) for x in range(2, num): if num % x == 0: print(num, '不是素数') break else: print(num, '是素数') # 方法二:优化循环次数 for x in range(2, int(num ** 0.5) + 1): if num % x == 0: print(num, '不是素数') break else: print(num, '是素数') # 10. 求斐波那契数列列中第n个数的值:1,1,2,3,5,8,13,21,34… (这儿的n可以是任意正整数,可以通过输入来确定) # 1 1 2 3 5 8 13 21 34 55 print('==================第10题===============') pre_1 = pre_2 = 1 n = 6 if n == 1 or n == 2: print(1) else: for x in range(n-3): pre_1, pre_2 = pre_2, pre_1 + pre_2 print(pre_1 + pre_2) """ pre_1 = 1, pre_2 = 1 n = 6 if n == 1 or n == 2 -> if 6==1 or 6 == 2 -> if False or False -> if False 执行else中的代码: 执行for循环: x取值范围是:range(n-3) -> range(6-3) -> range(3) -> 0, 1, 2 (循环3次) 第1次循环 x = 0: pre_1, pre_2 = pre_2, pre_1 + pre_2 -> pre_1, pre_2 = 1, 1+1 -> pre_1, pre_2 = 1, 2 第2次循环 x = 1: pre_1, pre_2 = pre_2, pre_1 + pre_2 -> pre_1, pre_2 = 2, 1+2 = 2, 3 第3次循环 x = 2: pre_1, pre_2 = pre_2, pre_1 + pre_2 -> pre_1, pre_2 = 3, 2+3 = 3, 5 循环结束 print(pre_1 + pre_2) -> print(3 + 5) -> print(8) from random import randint number = randint(1, 100) # 产生1~100的随机数(游戏中需要猜的数) count = 0 while True: value = int(input('请输入数字(1~100):')) # 玩家输入 count += 1 if value == number: break if value > number: print('大了,再小点儿!') else: print('小了,再大点儿!') print('恭喜你猜对了!') if count < 5: print('猜中只用了', count, '次! 棒棒哒~') elif count < 10: print('总共猜了', count, '次~平凡如你~') else: print('天才!你猜了', count, '次!') for循环 """ for 变量 in 序列: 循环体(需要重复执行的代码) else: 代码段 """ for x in range(10): if x % 2: print(x) """ x取值范围是:0、1、2、3...9 第1次循环 x=0: if x % 2 -> if 0 % 2 -> if 0 -> if False 第2次循环 x=1: if x % 2 -> if 1 % 2 -> if 1 -> if True: print(x) -> print(1) 第3次循环 x=2: .... # 2. range # range(N) [0,N) 步长为1 # range(M,N) [M,N) 步长为1 # range(M,N,step) [M, N) 步长为step # 3.while """ while 条件语句: 循环体 else: 代码段 while True: 需要重复的操作 if 停止条件: break # 4.continue、break # 5. else