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解决小明一家过桥问题相关推荐

  1. 用python turtle画小黄人源码_怎么用python画小黄人

    怎么用python画小黄人? 前言: 还记得小黄人哪只蠢萌蠢萌的单眼小黄人?就是喜欢做什么事都喜欢逞能的那只,下面用Python来实现一下,正在逃跑的小黄人. 一.导入Turtle库 import t ...

  2. python财务预算分析_财码Python管理会计小实验—营运管理之多维度盈利能力分析...

    在上篇财码Python管理会计小实验中,我们学习了预算管理中的滚动预算vs定期预算,本篇我们继续学习营运管理中的多维度盈利能力分析. 知识点回顾 多维度盈利能力分析:是指企业对一定期间内的经营成果,按 ...

  3. python能制作游戏吗_如何用Python制作小游戏

    要想用Python制作小游戏,必须要安装一个插件Pygame 什么是Pygame Pygame是跨平台Python模块,专为电子游戏设计,包含图像.声音.建立在SDL基础上,允许实时电子游戏研发而无需 ...

  4. python财务预算分析_财码Python管理会计小实验—滚动预算vs定期预算

    在上篇财码Python管理会计小实验中,我们学习了预算管理中的弹性预算与固定预算,本篇将继续带大家学习--滚动预算vs定期预算. 知识点回顾 按照预算期的时间特征,预算编制方法分为滚动预算和定期预算. ...

  5. python复利终值_财码Python管理会计小实验—投融资管理之货币时间价值

    今天我们继续学习财码Python管理会计小实验之投融资管理篇,本章重点聊聊货币时间价值,望开卷有益. 知识点回顾 >>>货币的时间价值的含义 货币时间价值:指在不考虑风险和通货膨胀的 ...

  6. 如何用python画小黄人_怎么用python画小黄人

    怎么用python画小黄人?TB1免费资源网 前言:TB1免费资源网 还记得小黄人哪只蠢萌蠢萌的单眼小黄人?就是喜欢做什么事都喜欢逞能的那只,下面用Python来实现一下,正在逃跑的小黄人.TB1免费 ...

  7. python财务预算分析_财码Python管理会计小实验—弹性预算vs固定预算

    知识点回顾-预算管理 预算管理,是指企业以战略目标为导向,通过对未来一定期间内的经营活动和相应的财务结果进行全面预测和筹划,科学.合理配置企业各项财务和非财务资源,并对执行过程进行监督和分析,对执行结 ...

  8. python微信小程序后端开发_使用django开发微信小程序后端

    tips: 本文面向的对象是已经会使用django开发web后端的人员 微信小程序后端与普通web的区别 微信小程序的后端开发和普通的restful API 大致上相同,只不过要注意以下几点限制 必须 ...

  9. python爬取小说出现乱码_详解Python解决抓取内容乱码问题(decode和encode解码)

    一.乱码问题描述 经常在爬虫或者一些操作的时候,经常会出现中文乱码等问题,如下 原因是源网页编码和爬取下来后的编码格式不一致 二.利用encode与decode解决乱码问题 字符串在Python内部的 ...

最新文章

  1. handler消息机制
  2. ei指什么_SCI、EI、SSCI和ISTP的区别!
  3. NJUST4316(立体几何投影的面积交)
  4. LG化学和三星SDI宣布关闭美国电池工厂直至4月13日
  5. 6.3使用用户名或邮箱都能登录
  6. vue ajax 上传,vue中用ajax上传文件
  7. idea中创建jsp项目详细步骤
  8. 自由网络-去中心化分布式网络
  9. 华为工作10年,年薪80万。
  10. 哪个选项是python语言_关于Python语言的描述,错误的选项是______。???????????????????????????????????????...
  11. dsp gpip操作 data set 和clc
  12. 人造肌肉——双扭绳驱动结构
  13. 舞伴配对问题(顺序队列)
  14. DPDK 与DPDK-Pktgen 安装
  15. iOS自动订阅商品(Auto-Renewable Subscriptions)相关处理
  16. 计算机一级excel单元格,在Excel工作表中选择单元格及其内容
  17. oracle数据库学习 sql语言 --蔡广坤的笔记
  18. 【C语言】第一个C语言项目——“猜数字”游戏(内附源码)
  19. uni-app中使用video.js
  20. matlab函数hankel用法

热门文章

  1. Java 查看指定文件最后的修改时间
  2. 理查森外推法 matlab,数值代数–理查森外推法.doc
  3. c语言未声明的标识符什么意思_C语言中%d和%f是什么意思啊?
  4. 鸿蒙系统的变化,鸿蒙系统没变化的背后
  5. oracle中orand使用,Postgres兼容Oracle研究——orafce调研
  6. python list,str的拼接与转换
  7. 【Jmeter篇】1小时轻松搞定项目接口自动化测试与数据驱动
  8. 《剑指offer》第三十五题(复杂链表的复制)
  9. (转)Java atomic原子类的使用方法和原理(一)
  10. Oracle 表备份还原