流程控制
举例子:猜数字排序算法
冒泡排序选择排序插入排序 二分查找时间复杂度
流程控制# 条件判断 if
# 单分支
if 表达式:
代码块
# 多分支
age = input('输入年龄')
age = int(age)
if age>=18:
print("成年")
elif age>=12:
print("少年")
elif age<12:
print("儿童")
# 猜数字游戏
num = 9
guessNum = input('please guess a num:')
guessNum = int(guessNum)
if guessNum==num:
print('猜对了')
else:
if guessNum
# 循环控制 while
num = 0
while num<5:
print('xiao')
num +=1
# 猜数字游戏
num = 9
n = 0
while n<5:
guessNum = int(input('please guess num:'))
if guessNum==num:
print('对了')
break
elif guessNum
# for 循环
# 遍历列表
list = [1,2,3,4,5]
sum = 0
for item in list:
sum += item
print(sum)
# 遍历字典
dic = {
'name':'xiao',
'age':22
}
for item in dic.items():
print(item)
for key,value in dic.items():
print(key,value)
for key in dic.keys():
print(f'{key,dic[key]}')
# 循环嵌套
i = 1
while i<=3:
j = 1
while j <=2:
print('xiao')
j +=1
i +=1
# 退出循环
# break,跳出整个循环
i =1
while i<=5:
if i==2:
break
print(i)
i +=1
#continue,跳出本次循环
list = [1,2,3,4,5]
for i in list:
if i==3:
continue
print(i)
举例子:猜数字
import random
score = 100 # 初始分数
count = 0 # 统计猜的次数
# 随机产生1-100数
num = int(random.random() * 100)
while True:
count += 1
guessNum = int(input('Pelase guess the num:'))
if guessNum == num:
print('对了')
break
elif guessNum < num:
if score <= 0: # 分数小于等于0退出
break
score -= 5 # 猜错扣5分
print('小了')
else:
if score <= 0:
break
score -= 5
print('大了')
print('一共猜了%d次,总得分为%d' % (count, score))
排序算法
冒泡排序
# 将序列中元素两两比较,找出最大值,将最大值移动到最后位置,层层偏移
# 第一次排序
list = [3, 7, 1, 4, 6]
for i in range(len(list) - 1 - j): # range(m),0->m的整数列表
if list[i] > list[i + 1]:
list[i], list[i + 1] = list[i + 1], list[i] # 两个元素交换位置
# n次排序,因为每次最大都已在最后,只需移动当前所剩的数最大值到后面即可,所以-j
list = [3, 7, 1, 4, 6]
for j in range(len(list) - 1):
for i in range(len(list) - 1 - j): # range(m),0->m的整数列表
if list[i] > list[i + 1]:
list[i], list[i + 1] = list[i + 1], list[i] # 两个元素交换位置
选择排序
# 将序列中元素两两比较,找出最大值,将最大值和序列中最后一个元素交换位置,非层层偏移,直接交换
# 第一次排序
list = [3, 7, 1, 4, 6]
max_index = 0 # 保存最大元素下标,开始默认为0
for i in range(len(list) - 1):
if list[max_index] < list[i + 1]:
max_index = i + 1 # 修改最大值下标位置
list[max_index], list[len(list) - 1] = list[len(list) - 1], list[max_index]
# n次排序,因为每次最大都已在最后,所以只需比较前面数就行,当然每次交换位置也需要就比较的数而改变
list = [3, 7, 1, 4, 6]
for j in range(len(list) - 1):
max_index = 0 # 保存最大元素下标,开始默认为0
for i in range(len(list) - 1 - j):
if list[max_index] < list[i + 1]:
max_index = i + 1 # 修改最大值下标位置
list[max_index], list[len(list) - 1 - j] = list[len(list) - 1 - j], list[max_index]
插入排序
# 将列表假象为两份:
list = [3, 7, 1, 4, 6]
# 一份有序:默认情况下,列表第一个元素为有序的部分 3
# 一份无序:默认情况下:列表除第一个元素外的元素为无序部分 7,1,4,6
# 无序向有序插入数据(从末尾开始比较)
# 例如上述列表,首先将7插入,和3比较后插入3的后一位;将1插入需要和7比较再和3比较...
# 代码思想
# 定义一个变量i,初始值为1,表示有序部分的元素个数
# 第一次排序,i=1,[3 7,1, 4, 6]
list = [3, 7, 1, 4, 6]
i = 1
# list[i] 是无序部分第一个元素
# list[i-1]有序部分最后一个元素
if list[i] < list[i - 1]:
list[i], list[i - 1] = list[i - 1], list[i]
# n次排序:i-1是为了循环比较;break是已找到合适位置所以停止
list = [3, 7, 1, 4, 6]
for i in range(1, len(list)):
while i > 0:
if list[i] < list[i - 1]:
list[i], list[i - 1] = list[i - 1], list[i]
i -= 1
else:
break
二分查找
# 也叫折半查找,仅作用在有序序列中
list = [1, 3, 4, 6, 7, 9]
number = 3 # 要被查找的数
number_exist = False # 该数是否存在,默认不存在
low = 0 # 第一个元素下标
high = len(list) - 1 # 最后一个元素下标
while low <= high:
mid = (low + high) // 2 # mid保存中间元素的下标
if number > list[mid]: # 查找元素在中间元素右侧
low = mid + 1
elif number < list[mid]: # 查找元素在中间元素左侧
high = mid - 1
else: # 查找元素等于中间元素
number_exist = True
break
print(number_exist)
时间复杂度
时间复杂度和空间复杂度都是衡量算法性能好坏优劣的指标,理想是时间短、空间小,但是目前主要是以时间复杂度作为评判的标准
时间复杂度:量化算法执行步骤的数量
n = 5 # 1
while n > 0: # 2n
print('xiao')
n -=1
print('succeed') # 1
# 上述执行步骤数量为 2+2n
# 时间复杂度通过大O记法来表示
# 也就是量化后的表达式取出最有意义的一项,放在大O括号内,上述就是O(n)
# 最小的就是O(1)



