练习1:输出任意长度由字母和数字组成的验证码
import random
def code_generate(code_len):
all_char = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'
last_char_pos = len(all_char) -1
code = ''
for _ in range(code_len):
index = random.randint(0,last_char_pos)
code += all_char[index]
return code
print(code_generate(4))
练习2:双色球选号
from random import randint,sample
def select_balls():
red_balls = [x for x in range(1,36)]
select_ball = sample(red_balls,6)
select_ball.sort()
select_ball.append(randint(1,16))
return select_ball
def display_ball(ball):
l = len(ball)
for i in range(l):
if i == l-1:
print('|',ball[i])
else:
print(ball[i],end=' ')
print()
def main():
n = int(input('请输入机选组数:'))
for _ in range(n):
display_ball(select_balls())
if __name__ == '__main__':
main()
练习3:约瑟夫环问题
'''有15个基督徒和15个非基督徒在海上遇险,
为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,
报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9
的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,
15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置
是基督徒哪些位置是非基督徒。'''
def main():
person = [True] *30
pass_p,i,number = 0,0,0
while pass_p < 15:
if person[i]:
number += 1
if number == 9:
pass_p += 1
number = 0
person[i] =False
i += 1
i %= 30
for p in person:
print('基督徒' if p == True else '非基督徒',end=' ')
if __name__ =='__main__':
main()
练习4:选择排序
def fast_order(list1):
l = len(list1)
for i in range(l-1):
min_pos = i
temp = 0
for j in range(i+1,l):
if list1[min_pos] > list1[j]:
min_pos = j
if min_pos != i:
temp = list1[i]
list1[i] = list1[min_pos]
list1[min_pos] = temp
return list1
def main():
list1 = [1,3,6,7,2,5,9,0,8]
print(fast_order(list1))
if __name__ == '__main__':
main()
练习5:冒泡排序
def bubble_order(list1):
l = len(list1)
for i in range(l):
temp = 0
for j in range(l-1-i):
if list1[j] > list1[j+1]:
temp = list1[j]
list1[j] = list1[j+1]
list1[j+1] = temp
return list1
def main():
list1 = [4,7,9,1,3,0,5,8,2]
print(bubble_order(list1))
if __name__ == '__main__':
main()
外圈循环次数是元素的个数,内圈是元素个数-i-1,因为每一次循环都会冒出一个最大值,因此是-i
练习6:快速排序
def quick_sort(list1):
l = len(list1)
if l < 2:
return list1
else:
left,right = [],[]
mid = list1[l // 2]
list1.remove(mid)
for i in list1:
if i > mid:
right.append(i)
else:
left.append(i)
return quick_sort(left) + [mid] + quick_sort(right)
练习7:插入排序
def insert_sort(list1):
l = len(list1)
for i in range(1,l):
key = list1[i]
j = i - 1
while j >= 0:
if list1[j] > key:
list1[j],list1[j+1] = key,list1[j+1]
j-=1
return list1