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基础(五)

评论关闭