w
一、冒泡排序和选择排序
# 冒泡排序
li = [34, 32, 67, 23, 12, 7, 4, 1] # 原始排序
len1 = len(li) # 获取列表长度
for i in range(0, len1):
for j in range(1, len1 - i):
if li[j - 1] > li[j]: # 比较前后两元素哪个大
temp = li[j - 1] # 前一个大的放到临时暂存元素里
li[j] = temp # 把临时暂存元素里的大元素放到后面
print(li)
# 选择排序
li = [34, 32, 67, 23, 12, 7, 4, 1] #原始排序
for i in range(len(li)): #遍历所有元素的索引
max = i #定义已经完成排序的序列的最后一个数的索引
for j in range(i + 1, len(li)): #遍历没有排序过的所有元素的索引
if li[j] > li[max]: #在未排序的序列里找最大的数
max = j #保存未排序最大数的索引
li[i], li[max] = li[max], li[i] #将找到的最大的数放到排好的序列末尾
print(li) #打印已排序好的序列
二、
1.九九乘法表
for i in range(1,10):
for j in range(1,i):
print(f"{j}*{i}={i*j}",end=' ')
print()
2.完全数
num = int(input('please input a perfect number:'))
sum1 = 0
factor1 = []
for i in range(1, num):
if num % i == 0:
sum1 += i
factor1.append(i)
factor1.append(num)
print(f"all factors of {num} are {factor1}")
if num == sum1:
print(f'{num} is a perfect number')
else:
print(f'{num} is not a perfect number')
3.三位数
n = 0
li = []
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if i != j and j !=k and i != k:
li.append(100*i+10*j+k)
n+=1
print(li,n)
#推导式
li = [100 * i + 10 * j + k for i in range(1, 5) for j in range(1, 5) for k in range(1, 5) if i != j and j != k and i != k]
print(li, len(li))
# 疏影横斜水清浅
li = []
book = []
def dfs(step):
if (step == 4):
for i in range(3):
print(li[i], end='')
print()
return
for i in range(4):
if book[i] == 0:
li[step] = i + 1
book[i] = 1
dfs(step + 1)
book[i] = 0
return
if __name__ == '__main__':
for i in range(4):
li.append(0)
book.append(0)
dfs(0)