欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程语言 > python >内容正文

python

小明一家过桥_【练习】用python解决小明一家过桥问题

发布时间:2025/3/15 python 49 豆豆
生活随笔 收集整理的这篇文章主要介绍了 小明一家过桥_【练习】用python解决小明一家过桥问题 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

import random

list1=[] #存放所有遍历的结果

#等待过桥的人员

bridge1={'小明':1,'弟弟':3,'爸爸':6,'妈妈':8,'爷爷':12}

#过桥后的人员

bridge2={}

#判断未过桥的人是否空了(全部过完后,程序停止,看总共用了多长时间)

len1=len(bridge1)

print(len1)

#while True:

print('初始情况:当前未过桥的人是:',end=' ')

print(bridge1)

print('初始情况:当前已过桥的人是:', end=' ')

print(bridge2)

print('*********************************')

#一次while,就完成一次一家人完整的过河流程;一次fow,就完成一次过河和回来的过程(2个人过河,一个人回来)

while True:

for i in range(1,10):

print('第%d次过桥和回来的过程如下:' % i)

#随机从未过桥的人员中取一个人出来(key),取出来是一个字符串型的数据

p1=random.choice(list(bridge1))

print(p1+'准备过桥')

#print(type(p1))

#取出后,将这个人对应的过桥时间取出来(value),取出来是一个整数型的数据

print(p1+'的时间为'+str(bridge1[p1]))

#print(type(bridge1[p1]))

time1=bridge1[p1] #将第一个人的所用时间存起来,用于后面比较取大值

#取出第一个人后,把这个人赋值给已过河的人,并且从未过河的人群中删除

bridge2[p1]=bridge1[p1]

del bridge1[p1]

print(bridge1)

#print('准备过桥:', end=' ')

#print(bridge2)

#同理,再从未过桥的人随机取一个人和对应的时间。此时发现一个问题,有可能和前一次取的人一样,所以前面应该取一次,删一次。

p2=random.choice(list(bridge1))

print(p2+'准备过桥', end=' ')

#print(type(p2))

#print(bridge1[p2])

#print(type(bridge1[p2]))

time2=bridge1[p2] #将第二个人的所用时间存起来,用于后面比较取大值

print(p2+'的时间为:'+str(bridge1[p2]))

#取出第二个人后,把这个人赋值给已过河的人,并且从未过河的人群中删除

bridge2[p2]=bridge1[p2]

del bridge1[p2]

print(bridge1)

print('已过桥:', end=' ')

print(bridge2)

#求上面两个值的最大值

time3=max(time1, time2)

print('过桥时间为:'+str(time3))

total_time=total_time+time3

#再将总时间减去第一次过河的最长时间

#left_time=30-time3

print('当前未过桥的人是:',end=' ')

print(bridge1)

print('当前已过桥:', end=' ')

print(bridge2)

#如果都过完河了,就没必要再返回啦!所以终止!

if len(bridge1)==0:

print('最终总时长为:%d' % total_time)

break

#print('当前剩余时间为:%d' % left_time)

#再从已过桥的人中选一个时间最短的人回来,再把这个人的所用时间取出来,再把这个人从已过桥的人中搬回未过桥的人中

p3=min(bridge2, key=bridge2.get)

#p3=random.choice(list(bridge2))

time4=bridge2[p3]

print(p3+'回来', end=' ')

#print(bridge2[p3])

print(p3+'的时间为:'+str(bridge2[p3]))

bridge1[p3]=bridge2[p3]

del bridge2[p3]

len1=len(bridge1)

print('当前已过桥:', end=' ')

print(bridge2)

print('当前未过桥:', end=' ')

print(bridge1)

total_time = total_time+time4

print('当前总花费时间:%d' % total_time)

##记录下这一轮完整过桥的时间

list1.append(total_time)

#print(list1)

if total_time<=30:

break

#执行完一轮之后,重新恢复初始状态,再跑一轮

bridge1={'小明':1,'弟弟':3,'爸爸':6,'妈妈':8,'爷爷':12}

bridge2={}

total_time=0

list1.sort()

print(list1)

运行结果:

总结

以上是生活随笔为你收集整理的小明一家过桥_【练习】用python解决小明一家过桥问题的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。