题目:一农夫带着一头狼,一只羊和一担草过河,小船只能一次装载农夫和一样货物,狼会吃羊,羊会吃草,只有农夫在时才安全。现欲让所有物品包括农夫都安全过道河对岸,使用程序实现求解。

学习完毕《Python编程:从入门到实践》一书,掌握的代码知识不是很多,看到这题偶然有了兴致,试着依靠书本内容完成该题目。代码水平低下,希望各位大佬不要介意,也非常感谢大家能够批评指正!

代码段

from random import choiceleft = ['W','S','V']
right = []
ship = []
wosh = {'W','S'}
shve = {'S','V'}# 检测程序,检测羊与狼、菜与羊的共存状态
def dect_program(det_list):if wosh.issubset(det_list) or shve.issubset(det_list):return Trueelse:return False# 函数1:从岸边取动物时保证岸上的动物能够共存
def load_ship(land_list,ship_list):global goods_1land_renew = land_list[:]while dect_program(land_renew):land_renew = land_list[:]goods_1 =choice(land_renew)land_renew.remove(goods_1)land_list.remove(goods_1)ship_list.append(goods_1)print(f'transport {goods_1} to right')# 函数2:判断船上的物品运送到对岸后,是否可以在对岸相互共存,如不能,则在对岸运输回导致无法共存的物品。
def sec_load_ship(land_list,ship_list,add_list,left_list):global goods_2land_renew = land_list[:]add_renew = add_list[:]while dect_program(add_renew):add_renew = add_list[:]goods_2 = choice(land_renew)add_renew.remove(goods_2)land_list.remove(goods_2)left_list.append(goods_2)print(f'transport {goods_2} come back')#卸载船上的货物到岸边
def unstall_ship(ship_list,land_list):global goods_3goods_3 = ship_list[0]land_list.append(goods_3)ship_list.clear()#运输程序
def transport(fst_land,ship_list,sec_list):global fst_currentif  len(fst_land) <= 2:                              #判断左岸是否已经运输一次货物,已经运输了货物。则执行以下程序goods_5 = choice(fst_current)                   #随机从左岸挑选一次货物进行运输   fst_land.remove(goods_5)ship_list.append(goods_5)print(f'transport {goods_5} to right')                if dect_program(fst_land):                          #判断左按是否为共存状态,如是,则执行函数1load_ship(fst_land,ship_list)ship_renew = ship_list[:]                             #在运送完毕前设置临时列表,目的是保证不会将刚运输的货物,再次运输rs_list = ship_list[:] + sec_list[:]fst_current = fst_land[:]    if dect_program(rs_list) and len(rs_list) != 3:         #判断船上与对岸货物状态,若存在无法共存,且未运输完毕。执行函数2sec_load_ship(sec_list,ship_list,rs_list,fst_land)elif len(rs_list) == 3:                              #判断船上与对岸货物状态,若可以运输完毕,进行卸货unstall_ship(ship_list,sec_list)else:print('empyty come back')                         #若船上货物与对岸货物可以共存,则空船返回if len(sec_list) !=3:                              #判断货物运输并进行卸货               unstall_ship(ship_renew,sec_list)ship_list.clear()while len(right) != 3:transport(left,ship,right)print(f'left land is {left}')print(f'right land is {right}\n')

结果

transport S to right
empyty come back
left land is ['W', 'V']
right land is ['S']transport W to right
transport S come back
left land is ['V', 'S']
right land is ['W']transport V to right
empyty come back
left land is ['S']
right land is ['W', 'V']transport S to right
left land is []
right land is ['W', 'V', 'S']

通过这个题目,我对while循环、if循环的用法加深了印象。

并且,也感受到,通过建立临时列表方式,解决一些问题。

通过Python的列表、while循环,穷举法解决农夫过河问题相关推荐

  1. C语言程序设计之编程求鸡和兔的只数,用穷举法解决

    CSDN论坛上网友的问题:有一群鸡和一群兔,两种动物只数相同.两种动物的脚的总数都是三位数,且这两个三位数的六个数字分别是0,1,2,3,4,5.编程求鸡和兔的只数是多少?它们的脚数各是多少? C语言 ...

  2. C++实验4-项目7穷举法解决组合问题-百钱百鸡问题

    一.问题及代码 文件名称: 项目7 作 者: 糜子越 完成日期: 2017年4月21日 版 本 号:v1.0 对任务及求解方法的描述部分:略 输入描述: 无 问题描述: 利用穷举法算出买鸡翁.鸡母.鸡 ...

  3. 第三周项目4:穷举法解决组合问题

    /* *Copyright (c) 2016,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:dfg.cpp *作 者:赵子琳 *完成日期:2016年3月15日 ...

  4. 第三周项目四-穷举法解决组合问题

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月15日 *版 本 ...

  5. 第三周项目四-穷举法解决组合问题(1)

    /* *Copyright(c)2016,烟台大学计算机与控制工程学院 *All rights reserved *文件名称:123.cpp *作 者:王蕊 *完成日期:2016年3月15日 *版 本 ...

  6. 穷举法解决鸡兔同笼问题

    #include<stdio.h> int main() {int a,b,i,j;printf("头数:");scanf("%d",&a) ...

  7. 第9周项目6穷举法解决组合问题之警察抓小偷

    /* *Copyright (c) 2014,烟台大学计算机学院 *All rights reserved. *文件名称:Annpion.cpp *作者:王耀鹏 *完成日期:2014年10月23日 * ...

  8. c语言穷举算法 枚举法,c语言枚举法 穷举法 ppt课件

    枚举法 穷举法 笨人之法 把所有可能的情况一一测试 筛选出符合条件的各种结果进行输出 分析 这是个不定方程 三元一次方程组问题 三个变量 两个方程 x y z 1005x 3y z 3 100设公鸡为 ...

  9. c语言变量相等问题穷举法,C语言穷举法经典例题.ppt

    <C语言穷举法经典例题.ppt>由会员分享,可在线阅读,更多相关<C语言穷举法经典例题.ppt(18页珍藏版)>请在人人文库网上搜索. 1.枚举法(穷举法),"笨人之 ...

最新文章

  1. POJ3608(旋转卡壳--求两凸包的最近点对距离)
  2. css 选择href属性值,巧用CSS属性值正则匹配选择器(小技巧)
  3. SpringCloud Gateway的组成结构
  4. 免安装Oracle客户端使用PL/SQL
  5. 源码 解析_最详细集合源码解析之ArrayList集合源码解析
  6. 从2013年下半年始计算机等级考试大纲有重要调整
  7. jpa 人大金仓数据库方言_人大金仓数据库(kingbase7d)操作入门指南 Windows
  8. trainning-----1
  9. java.io.InvalidClassException异常产生原因及解决方案
  10. linux:shell命令之软硬链接
  11. JavaScript 中 innerHTML 属性
  12. Java Obiect类--------11
  13. excel 重复方差分析_如何在Excel中运行方差方差分析的两种方法
  14. 【数据库MySQL】
  15. I'm a pc - I'm a mac :FIT
  16. 高血压患者禁吃葡萄柚
  17. 解决Ubuntu16.04软件商店无法加载
  18. iphone5刷机教程
  19. Bigemap下载的卫片如何原坐标插入CAD
  20. 杰理之动态调节混响效果【篇】

热门文章

  1. 王思聪喜提50台华为Mate RS保时捷设计手机!网友直呼:贫穷限制了我的想象力...
  2. i3处理器_intel十代酷睿i3正式上架!售价超千元,老款i7突然不香了
  3. 飞行机器人(七)仿真平台XTDrone + PX4编译
  4. HADOOP Exception in thread “main“ org.apache.hadoop.security.AccessControlException: Permission deni
  5. 图文版alexa网站登陆教程,手把手教你把网站提交到Alexa
  6. 数据分析面试【一】—— SQL基础知识
  7. [小黑科技] 破解一个电控升降桌,并改造成语音控制(上)—— 模拟中间人与控制手柄交互...
  8. 一图解析JavaScript快速排序原理,看了就不会忘~~
  9. unity3d,android平台下,高德地图定位
  10. 读书笔记之《Rework》