小白的自我救赎:今日份python练习

练习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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值