1.选择排序
选择排序的思路是:
比如:25 14 43 36 7 28 按照升序进行排序 ----->7 14 25 28 36 43
第0轮:固定25,将25与14比较,14 25 43 36 7 28
将14与43比较,14 25 43 36 7 28
将14与36比较,14 25 43 36 7 28
将14与7比较, 7 25 43 36 14 28
将7与28比较, 7 25 43 36 14 28
第0轮结束后,将最小的7排了出来
第1轮:对于 7 25 43 36 14 28 ,固定25
将25与43比较,25 43 36 14 28
将25与36比较,25 43 36 14 28
将25与14比较,14 43 36 25 28
将14与28比较,14 43 36 25 28
第1轮结束后,将第二小14排了出来
第2轮:对于43 36 25 28,固定43
将43与36比较,36 43 25 28
将36与25比较,25 43 36 28
将25与28比较,25 43 36 28
第2轮结束后,将第三小25排了出来
第3轮:对于43 36 28,固定43
将43与36比较,36 43 28
将36与28比较,28 43 36
第3轮结束后,将第四小28排了出来
第4轮:对于43 36,固定43
将43与36比较,36 43
第4轮结束后,将第五小36排了出来,最后一个43也 排了出来
所以:按照升序排序后:7 14 25 28 36 43
用python实现:
list1 = [25,14,43,36,7,28]
#外层循环次数
for i in range(len(list1) - 1):
for j in range(i + 1,len(list1)):
if list1[i] > list1[j]:
list1[i],list1[j] = list1[j],list1[i]
print(list1)
-----------------
2019年7月13日11:49:21
程序运行结果为:
[7, 14, 25, 28, 36, 43]
-----------------
难点分析:
1.使用嵌套循环
2.外层循环次数分析,为什么range后面是len(list1 - 1)?
按照以上例子分析,i为轮数,6个数比较,比较了4轮,取值范围是0-4------>0- len-2------>0-range(len-1)-------->range(len-1)
3.内层循环次数分析,j为比较的次数,第0轮的时候比较了5次,参与比较的是第0个元素依次与第1个、第2个、第3个、第4个、第5个元素;第1轮的时候比较了4次,参与比较的是第1个元素依次与第2个、第3个,第4个,第5个元素……可以发现,每一轮第一次比较的数刚好为i(轮数)+1,最后一次的数刚好是list1的长度-1,所以用range表示的话就是range(i + 1,len(list1))。
2.质数判断
封装一个函数,判断是否是质数?
思路:给一个数a,你如果在2~(a-1)之间找到一个数能被a整除,这个数就不是质数。
a = int(input("请输入一个数:"))
def isprime(a):
if a <= 1:
return False
else:
result = True
for i in range(2,a):
if a % i == 0:
return False
return result
print(isprime(a))
难点分析:主要的思路就是将思路用代码写出来,然后就要想到用for循环去遍历直到a-1。
3.值传递和引用传递
(1)先总结一下python的数据类型:
数字型number,列表list,字典dict,元组tuple,集合set,字符串型string,布尔型boolean,空值None。
其中,不可变数据类型有:数字型number,元组tuple,字符串string,布尔boolean
可变数据类型有:列表list,字典dict,集合set
那什么又是可变数据类型,什么又是不可变数据类型呢?
可变的数据类型,可以增加、删除、修改其中的元素;
不可变数据类型,一旦被定义,则不能做任何改变,比如一旦需要对字符串进行修改,则一定表示生成一个新的字符串
(2)接着说一下什么是值传递,什么是引用传递?
值传递传递的是不可变的数据类型,引用传递传递的是可变的数据类型
在函数传参的过程中:
值传递:如果形参被修改,对实参没有任何影响
引用传递:如果形参被修改,则实参会随着被修改