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)
运行结果: