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

import random

#总时间和剩余时间

total_time=0 #花费的总时间,初始为0

left_time=30 #剩余时间,其实没有意义

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 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=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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值