题一:冒泡排序
冒泡排序:是一种计算机科学领域的较简单的排序算法
它重复地走访过要排序的元素列 因此比较两个相邻的元素 如果顺序错误就把它们交换过来 走访元素的工作就是重复的进行直到没有相邻元素需要交换 也就是说该元素已经排序完成
这个算法的名字由来就是因为越小的元素经由交换慢慢浮到数列的顶端 (书序或降序) 就如同气泡一样称为冒泡排序
例如:使用冒泡排序对列表:
[3,1,3,4,5,6,76,4,3,7]进行排序
条件:输出每次的步骤
输出最终的结果
from time import sleep
tl=[3,1,4,5,9,7,2,7]
print("变换之前:",tl)
print("=================================================")
for i in range(0,len(tl)):
for j in range(0,len(tl)-i-1):
if tl[j] >tl[j+1]:
temp=tl[j+1]
tl[j+1]=tl[j]
tl[j]=temp
print("冒泡排序后",tl)
print("倒序排列")
升级版:封装成为函数
import random
from time import sleep
def mp(tl):
for i in range(0,len(tl)):
for j in range(0,len(tl)-i-1):
if tl[j] >tl[j+1]:
temp=tl[j+1]
tl[j+1]=tl[j]
tl[j]=temp
print("冒泡排序后",tl)
while True:
ins=input("请输入列表中整数的个数")
if ins.isdigit():
number=int(ins)
tl=[random.randint(1,10000) for _ in range(number)]
mp(tl)
else:
print("输入的数据异常请重新输入")
题二:123报数游戏
题目:n个稀有围城一个圈 然后循环做123报数 1 2 3 1 2 3 1 2 3...每次报到3的小朋友退出
当人数减少到1个的时候 游戏结束
求最后一个小朋友原来是第几位
条件:
1.n个小朋友 则题目的顺序就是从1到n
2.循环报数123 报数3的退出
3.每次循环到队尾 自动的接到队伍的第一位上
4.当队伍中的小朋友只有一个的时 游戏结束
例如:1 2 3->2退出
1 2 3 4 5 6 -->1退出
解:
def calculate_last(que:list):
num=0
while len(que)>1:
for i in que:
num=num+1
print("当前第{}号小朋友报数{}".format(i,num))
print(num,i)
if num==3:
que.remove(i)
print("---->",que)
num=0
else:
print(que)
while True:
ins=input("请输入玩游戏的人数(q退出)")
if ins.isdigit():
number=int(ins)
que=[i+1 for i in range(number)]
print(que)
calculate_last(que)
elif ins=='q':
print("程序退出")
break
else:
print("请重新输入")
题三:猜数字游戏
题:
程序启动 随机生成一个结果值(范围0-30) 让用户输入数值去才 在有限次数内 猜中并结束游戏 猜不中 程序停止并输出结果
条件:
1.取值只能是0到30中的一个
2.用户只能才5次 猜错后显示结束 并公布答案
3.用户每次才数字 都显示结果
a:数字大于结果值 输出你才高了
b:数字小于结果值 输出你猜地低了
当用户猜对了 输出你猜对了
代码示例:
import random
result=random.randint(0,30)
flag=False
for i in range(5):
quess=int(input("请输入整数:"))
print(i,quess)
if quess==result:
print("恭喜你猜对了 答案是{}".format(result))
flag=True
break
elif quess>result:
print("猜高了")
elif quess<result:
print("猜少了")
else:
print("猜错了 继续吧~")
if flag:
pass
else:
print("猜错了 正确的结果是".format(result))
print("程序结束")
题四:猜数字升级版
import random
result=random.randint(100,999)
def check_quess(result:int,quess:int):
result=str(result)
num=str(quess)
a=0
b=0
for i in range(num):
if result[i]==quess[i]:
a=a+1
else:
b=b+1
if a==num:
print("关系你猜对了")
return True
else:
return False
print("检测完毕")
print("随机数已经生成 游戏开始")
while True:
quess=input("第{}次猜的数值是 (q退出)")
if quess=='q':
print("游戏结束")
break
elif quess.isdigit():
if len(quess)==len(result):
status=check_quess(result,int(quess))
if status:
print("恭喜你猜对了{}".format(result))
pass
else:
print("请仔细看看 好好选选")
print("随机数为{}".format(result))
题五:打印九九乘法表
题目:
1.完整打印九九乘法表 2.打印完整的逆九九乘法表 3.注意整体格式 用空格隔开
for i in range(1,10):
for j in range(1,i+1):
print("{}*{}={}".format(j,i,i*j),end=' ')
print(end='\n')
print("****************************************************************")
for m in range(9,0,-1):
for n in range(9,m-1,-1):
print("{}*{}={}".format(n,m,n*m),end='')
print(end='\n')
题六:递归买汽水问题
题目:一瓶汽水一块钱 两个空瓶或三个瓶盖 可以换一瓶汽水 请问:如果我有20块钱 可以喝几瓶汽水?
编程中有个非常经典的词叫做递归 就是函数调用函数自己
条件:一块钱可以买一瓶水
两个空瓶可以换一瓶汽水
三个瓶盖可以换一瓶汽水
必须使用函数递归
练习点:函数 递归 循环
def get_drink(money,drink,bottle,cap):
if money>0:
tmp=money
drink=drink+money
bottle=bottle+money
cap=cap+money
money=0
print("当前花了{}瓶子 剩下多少{}元 手中瓶子有{}个 瓶盖有{}个 ".format(tmp,money,bottle,cap))
elif bottle>=2:
tmp=bottle//2
bottle=bottle%2
bottle=bottle+tmp
cap=cap+tmp
drink=drink+tmp
print("当前花了{}瓶子 剩下多少{}元 手中瓶子有{}个 瓶盖有{}个 ".format(tmp*2, tmp, money, cap))
elif cap>=3:
tmp=cap//3
cap=cap%3
cap=cap+tmp
bottle=bottle+tmp
drink=drink+tmp
print("当前花了{}瓶子 剩下多少{}元 手中瓶子有{}个 瓶盖有{}个 ".format(tmp, money, bottle, cap))
if bottle>=2 or cap>=3:
get_drink(money,drink,bottle,cap)
money=20
drink=0
bottle=0
cap=0
get_drink(money,drink,cap,cap)
题七:鸡兔同笼问题
鸡兔同笼:
将鸡兔关在一个笼子里 已知头有xx个 脚有xx只 求有几只鸡和及只兔
条件:
输入头的数量
输入脚的数量
定义函数 负责计算
函数返回兔子和鸡的数量
要有基本的数据处理
练习点:多返回值函数 字符串 判断 循环
def calculate_animal_num(head:int,leg:int):
rabbit=(leg-head*2)//2
chicken=head-rabbit
return rabbit,chicken
pass
while True:
while True:
print("鸡兔同笼程序")
head_str=input("请输入头的数量")
if head_str.isdigit():
head_num=int(head_str)
break
else:
print("数据异常 请检查 然后重新1输入")
while True:
leg_str = input("请输入脚的数量")
if leg_str.isdigit():
leg_num = int(leg_str)
break
else:
print("数据异常 请检查 然后重新1输入")
if head_num>leg_num:
print("头比脚多")
else:
chicken,rabbit=calculate_animal_num(head_num,leg_num)
print("{}个头{}条腿 答案是 {}兔子{}只鸡".format(head_num,leg_num,rabbit,chicken))
题八:录取率和录取线的计算
import random
def random_N_score():
score=[random.randint(200,750) for i in range(random.randint(3000,6000))]
return score
print(random_N_score())
def calculate_enroll_score(rate :int,score:list):
all_number=len(score)
enroll_number=int(round(all_number*rate/100))
scores.sort(reverse=True)
enroll_score=scores(enroll_number-1)
return enroll_score
def calculate_enroll_rate(score:int,scores:list):
all_number=len(score)
enroll_scores=[i for i in scores if i>=score]
enroll_number=len(enroll_scores)
enroll_rate=round(enroll_number/all_number,2)
return "{}%".format(int(enroll_rate*200))
pass
while True:
print("1.录取线 (200-750) 2.录取率(10-100)")
print("示例 1 530")
print("示例:2 40")
ins=input("请输入")
choice,number=ins.split(" ")
number=int(number)
if choice=='1':
scores=random_N_score()
enroll_raate=calculate_enroll_rate(number,scores)
print("录取线 {} 本届开始人数{}个 求得录取率".format(number,len(scores),enroll_raate))
elif choice=='2':
scores=random_N_score()
calculate_enroll_score(number,scores)
else:
print("数据识别异常")
题九:人物-地点-时间随机游戏
例如:小明 在 图书馆 吃饭
小红在卫生间 打游戏
条件:不属于10个角色
不少于8个地点
不少于8件事件
菜单控制 可以小红输出 和退出
import random
from faker import Faker
fake=Faker("zh_CN")
users=[fake.name() for i in range(20)]
address=[fake.street_address() for i in range(20)]
do_some_thing=['盗墓','吹牛逼','卖货','炸墓','吃鸡','听音乐','蹦迪']
while True:
choice=input("请输入")
if choice=='1':
text='{} 在 {} {}'
user=random.choice(users)
address=random.choice(address)
thing=random.choice(do_some_thing)
temp=text.format(user,address,thing)
print(temp)
elif choice=='q':
print("程序停止运行")
else:
print("命令无法识别 请重新选择")