码迷,mamicode.com
首页 > 编程语言 > 详细

python基础(五)

时间:2018-12-19 13:01:36      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:ccf   enumerate   字符   EAP   bsp   问题   swap   等于   pytho   

  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]没有5
  • step:步长,默认为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]  步长默认为1
8 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 # -8
5 # -6
6 # -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 = False
11             break
12         else:
13             flag =True
14     if flag:
15         num+=1
16         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//10
10     bits = i%10
11 
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 random
2 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+1
13         left_child = 2*start + 1  # 左孩子的结点下标
14         # 当结点的右孩子存在,且大于结点的左孩子时
15         if left_child > end:
16             break
17 
18         if left_child+1 <= end and array[left_child+1] > array[left_child]:
19             left_child += 1
20         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             break
26 
27         print(">>", array)
28 
29 
30 def heap_sort(array):  # 堆排序
31     # 先初始化大顶堆
32     first = len(array)//2 -1  # 最后一个有孩子的节点
33     # 第一个结点的下标为0
34     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 step
41         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基础(五)

标签:ccf   enumerate   字符   EAP   bsp   问题   swap   等于   pytho   

原文地址:https://www.cnblogs.com/lizhihoublog/p/10142213.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!