python基础(五),, for循环是对任
python基础(五),, for循环是对任
for循环是对任意可迭代的对象进行遍历,例如:字符串、列表、元组、字典的keys(dict.keys 字典的键)、values(dict.values 字典的值)、items(dict.items 字典的键值对)。而对于整数值可以利用range函数使得整数变为可迭代对象(需要注意的是使用range函数后区间为左闭右开)。
while 循环语句和 for 循环语句使用 else 的区别:
1、如果 else 语句和 while 循环语句一起使用,则当条件变为 False 时,则执行 else 语句。2.如果 else 语句和 for 循环语句一起使用,else 语句块只在 for 循环正常终止时执行!range函数的语法为:range(start, stop[, step])
start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)1 print(range(0,10,1))2 # 结果range(0, 10)3 # range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表。4 print(list(range(0,10,1)))5 # 结果[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 数值区间为左闭右开 6 print(list(range(0,10)))7 # 结果[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 步长默认为18 print(list(range(10)))9 # 结果[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 开始索引默认为0
例子: for i in range(-8,-2,2): print(i) 求i
1 for i in range(-8,-2,2):2 print(i)3 # 结果4 # -85 # -66 # -4
简单例子:
1 # 输出 9*9 乘法口诀表。2 for i in range(1,10):3 for j in range(1,i+1):4 print(‘%d*%d=%d‘%(j,i,i*j),end=‘ ‘)5 print()99乘法表
1 # 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?2 # 兔子的规律为数列1,1,2,3,5,8,13,21....3 list1 = []4 for i in range(1,13):5 if i in (1,2):6 list1.append(1)7 else:8 list1.append(list1[i-2]+list1[i-3])9 print(list1)古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
1 # 判断101-200之间有多少个素数,并输出所有素数。 2 # 素数只能被1或它本身整除 3 import math 4 num=0 5 flag = True 6 for i in range(101,200): 7 number = int(math.sqrt(i))+1 8 for j in range(2,number): 9 if i % j == 0:10 flag = False11 break12 else:13 flag =True14 if flag:15 num+=116 print(i)17 print(num)判断101-200之间有多少个素数,并输出所有素数。
1 # 打印出所有的"水仙花数", 2 # 所谓"水仙花数"是指一个三位数, 3 # 其各位数字立方和等于该数本身。 4 # 例如:153是一个"水仙花数", 5 # 因为153=1的三次方+5的三次方+3的三次方。 6 7 for i in range(100,1000): 8 hundreds=i // 100 9 ten = i%100//1010 bits = i%1011 12 if (hundreds**3 + ten**3 + bits**3) ==i:13 print(‘是素数>>‘,i)打印出所有的"水仙花数"enumerate函数
常见排序方法:
1 import random 2 list1 = [random.randint(1,100) for i in range(100)] 3 for i in range(len(list1)):#从小到大 4 for j in range(i,len(list1)): 5 if list1[i]>list1[j]: 6 list1[i],list1[j]=list1[j],list1[i] 7 print(list1) 8 for i in range(len(list1)):#从大到小 9 for j in range(i,len(list1)):10 if list1[i]<list1[j]:11 list1[i],list1[j]=list1[j],list1[i]12 print(list1)冒泡排序
1 import random2 list1 = [random.randint(1,100) for i in range(100)]3 4 for i in range(1,len(list1)):5 for j in range(i,0,-1):6 if list1[j]>list1[j-1]:7 list1[j-1], list1[j] = list1[j], list1[j-1]8 print(list1)插入排序
1 import random 2 list1 = [random.randint(1,100) for i in range(100)] 3 4 for i in range(len(list1)): 5 min_ = i 6 for j in range(i+1,len(list1)): 7 if list1[min_] > list1[j]: 8 min_ = j 9 list1[min_],list1[i]=list1[i],list1[min_]10 print(list1)选择排序
1 import random 2 list1 = [random.randint(0,1000) for i in range(1000)] 3 def kuaipai(list1): 4 if len(list1) < 5: 5 return list1 6 else: 7 start = list1[0] 8 first_lists = [i for i in list1[1:] if i<start] 9 mind_lists = [i for i in list1 if i == start]10 second_lists = [i for i in list1[1:] if i>start]11 return kuaipai(first_lists) + mind_lists + kuaipai(second_lists)12 print(kuaipai(list1)[-5:])13 print(kuaipai(list1))快速排序
1 def swap(a, b): # 将a,b交换 2 temp = a 3 a = b 4 b = temp 5 return a,b 6 7 def sift_down(array, start, end): 8 9 while True:10 11 # 当列表第一个是以下标0开始,结点下标为i,左孩子则为2*i+1,右孩子下标则为2*i+2;12 # 若下标以1开始,左孩子则为2*i,右孩子则为2*i+113 left_child = 2*start + 1 # 左孩子的结点下标14 # 当结点的右孩子存在,且大于结点的左孩子时15 if left_child > end:16 break17 18 if left_child+1 <= end and array[left_child+1] > array[left_child]:19 left_child += 120 if array[left_child] > array[start]: # 当左右孩子的最大值大于父结点时,则交换21 array[left_child], array[start] = swap(array[left_child], array[start])22 23 start = left_child # 交换之后以交换子结点为根的堆可能不是大顶堆,需重新调整24 else: # 若父结点大于左右孩子,则退出循环25 break26 27 print(">>", array)28 29 30 def heap_sort(array): # 堆排序31 # 先初始化大顶堆32 first = len(array)//2 -1 # 最后一个有孩子的节点33 # 第一个结点的下标为034 for i in range(first, -1, -1): # 从最后一个有孩子的节点开始往上调整35 print(array[i])36 sift_down(array, i, len(array)-1) # 初始化大顶堆37 38 print("初始化大顶堆结果:", array)39 # 交换堆顶与堆尾40 for head_end in range(len(array)-1, 0, -1): # start stop step41 array[head_end], array[0] = swap(array[head_end], array[0]) # 交换堆顶与堆尾42 sift_down(array, 0, head_end-1) # 堆长度减一(head_end-1),再从上往下调整成大顶堆43 44 45 46 if __name__ == "__main__":47 array = [16, 7, 3, 20, 17, 8]48 print(array)49 heap_sort(array)50 print("堆排序最终结果:", array)堆排序
python基础(五)
评论关闭