第一次写python
这是一个在BJDP上学习Coding Kata的时候用到的一个练习,原来打算用Java写的,但是一想正好是学习的好机会。
就用Python了。第一次,写的有些复杂。
这个题目是关于购买图书的打折信息的。
题目来源:
http://codingdojo.org/cgi-bin/wiki.pl?KataPotter
1 class Strategy: 2 def __init__(self, items): 3 self.items = items; 4 self.rate = self.get_discount_rate(); 5 6 def get_discount_rate(self): 7 if len(self.items) == 5: 8 return 0.75; 9 if len(self.items) == 4: 10 return 0.8; 11 if len(self.items) == 3: 12 return 0.9; 13 if len(self.items) == 2: 14 return 0.95; 15 return 1.0; 16 17 def get_price(self): 18 return self.total_price() * self.rate; 19 20 def total_price(self): 21 price = 0.0; 22 for item in self.items: 23 price += item.book.price; 24 return price; 25 26 def count(self): 27 return len(self.items); 28 29 30 class StrategyOptimizer: 31 def optimize(self, strategies): 32 found = False; 33 while True: 34 found = self.replace_53_with_44(strategies); 35 if not found: 36 break; 37 return strategies; 38 39 def replace_53_with_44(self, strategies): 40 strategyMap = {}; 41 strategyMap.clear(); 42 for i in range(0, len(strategies)): 43 strategy = strategies[i]; 44 strategyMap[strategy.count()] = i; 45 46 if (strategyMap != None and len(strategyMap) != 0): 47 if (strategyMap.get(5, None) != None and strategyMap.get(3, None) != None): 48 self.move_book(strategies[strategyMap[5]], strategies[strategyMap[3]]); 49 return True; 50 return False; 51 52 def move_book(self, source, dest): 53 item = self.findAnyDiff(source, dest); 54 if item == None: 55 return; 56 source.items.remove(item); 57 source.rate = source.get_discount_rate(); 58 dest.items.extend([item]); 59 dest.rate = source.get_discount_rate(); 60 return; 61 62 def findAnyDiff(self, source, dest): 63 for item in source.items: 64 if item not in dest.items: 65 return item; 66 return None; 67 68 class Book: 69 def __init__(self, index, name, price): 70 self.index = index; 71 self.name = name 72 self.price = price 73 74 class Item: 75 def __init__(self, book, count): 76 self.book = book 77 self.count = count 78 79 class Cart: 80 items = []; 81 def add_item(self, item): 82 self.items.append(item); 83 84 def pick_most_books(cart): 85 items = []; 86 for i in range(0, len(cart.items)): 87 item = cart.items[i]; 88 if item.count == 0: 89 continue; 90 items.append(Item(item.book, 1)); 91 cart.items[i].count -= 1; 92 return items; 93 94 def is_empty(cart): 95 for item in cart.items: 96 if item.count > 0: 97 return False; 98 return True; 99 100 def count_price(strategies): 101 price = 0; 102 for s in strategies: 103 price += s.get_price(); 104 return price; 105 106 def find_best_solution(cart): 107 strategies = []; 108 price = 0.0; 109 while not is_empty(cart): 110 items = pick_most_books(cart); 111 strategy = Strategy(items); 112 strategies.append(strategy); 113 return strategies; 114 115 def count_best_price(cart): 116 strategies = find_best_solution(cart); 117 so = StrategyOptimizer(); 118 strategies = so.optimize(strategies) 119 price = count_price(strategies); 120 print(price); 121 122 if __name__ == '__main__': 123 item_1 = Item(Book("#1.", "Philosophy Stone", 8), 2); 124 item_2 = Item(Book("#2.", "Secret Chamber", 8), 2); 125 item_3 = Item(Book("#3.", "Prisoner of Azkaban", 8), 2); 126 item_4 = Item(Book("#4.", "Goblet of Fire", 8), 1); 127 item_5 = Item(Book("#5.", "The Order of Phoenix", 8), 1); 128 129 cart = Cart(); 130 cart.add_item(item_1); 131 cart.add_item(item_2); 132 cart.add_item(item_3); 133 cart.add_item(item_4); 134 cart.add_item(item_5); 135 136 count_best_price(cart);
转载于:https://www.cnblogs.com/stephen-wang/p/3229953.html
第一次写python相关推荐
- 第一次写,python爬虫图片,操作excel。
第一次写博客,其实老早就注册博客园了,有写博客的想法,就是没有行动,总是学了忘,忘了丢,最后啥都没有,电脑里零零散散,东找找,西看看,今天认识到写博客的重要性. 最近闲着看了潭州教育的在线直播课程,颇 ...
- Python paromiko每日生活学习感悟(第一次写,紧张hahaha)
Python paromiko每日生活学习感悟(第一次写,紧张hahaha) 学习篇 生活篇 学习篇 今天整天实习,解决了虚拟机通过SSH进行远程登录,需求还增加一项就是要采用多个接入多个设备,采用了 ...
- 携程航班信息爬取(python)---第一次写博客,不好请别见外!
1.航班信息接口 api="https://flights.ctrip.com/itinerary/api/12808/products",这个接口中包含了所要查询的航班信息. * ...
- 用Python代码自己写Python代码,竟如此简单
用Python代码自己写Python代码,竟如此简单 Python作为一门功能强大且使用灵活的编程语言,可以应用于各种领域,具有"无所不能"的特质. Python甚至可以代替人,自 ...
- termux使用教程python-神器Termux(二)——如何用安卓手机舒服地写Python
用惯了windows和图形化界面的大家,或多或少对命令行有些抵触,有没有好的解决方案呢?先看看在Termux上写Python是种怎样的体验吧. 一.Python shell交互模式体验 在命令行中输入 ...
- python 魔兽世界升级脚本_第一次用python:python脚本用来实现增量更新项目代码...
项目采用增量更新,每次更新需要将提交到svn的代码手动一一拖到本地文件夹再拖到服务器上,非常麻烦.正好学习python,就弄了个批量复制脚本,顺便熟悉下Python语法.第一次写,很多方法不熟,写的比 ...
- 写python爬虫的第一天,拿百度练手遇到 “ 被反爬遇到<title>百度安全验证</title> ” 的解决方案
博主第一次写博文,第一次学爬虫,就是想分享,大家见怪不怪, 首先我设置了一个自定义UA代理池并没有采用插件pip install fake-useragent形式进行随机获取print(ua.ie) ...
- vscode 搜索结果 整行_如何用VSCode愉快的写Python
在学习Python的过程中,一直没有找到比较趁手的第三方编辑器,用的最多的还是Python自带的编辑器.由于本人用惯了宇宙第一IDE(Visual Studio),所以当Visual Studio C ...
- python数据分析神器_牛逼啊!一个随时随地写Python代码的神器
作者: Leoxin 公众号:菜鸟学Python 现在学Python的人越来越多,很多小伙伴都非常有激情.利用碎片时间随时随地学习Python, 大家知道Python是一门编程语言,但是学语言光看不练 ...
最新文章
- OpenCV图像梯度(Sobel和Scharr)
- mongodb重命名集合、数据库
- 链表的基本操作(c++实现)
- Oracle 11g密码过期问题及解决方案
- Lock free queue 大比拼
- mysql加入新的从节点怎么配置_MySql主从复制配置
- 文巾解题 1179. 重新格式化部门表
- 朴素贝叶斯算法注意事项(有待完善)
- 阿里云@广东:让我们一起上云!
- python实现Prim算法求解加权连通图的最小生成树问题
- 携程瘫痪非偶然 国内互联网企业漠视数据管理
- 全网最全C盘清理攻略
- Nature重磅综述;关于机器学习应用单细胞组学+RNA-seq,你想知道的都在这
- Package inputenc Error: Invalid UTF-8 byte “A1;Improper alphabetic constant. <to be read again>
- 通过CSS实现 文字渐变色 的两种方式
- WSTMart二次开发目录说明
- WLS(适用于Windows的Linux子系统)的安装
- 20071011听力原文
- 3.4 Docker最新入门教程-Docker入门-共享应用程序
- 愿在以后的日子里,即使单枪匹马也能勇往直前
热门文章
- Vue 打包后打开为空白页面 并且控制台报错‘Failed to load resource: net::ERR_FILE_NOT_FOUND’
- [pytorch、学习] - 4.6 GPU计算
- 汇编 --- 初体验
- Linux网络/firewalld和netfilter/netfilter/iptables语法
- Tomcat 配置和spring-framework MVC配置简介
- 移动wabAPP 开发 viewport 注意事项
- MYSQL复制的几种模式
- RAID冗余技术的介绍AND实现
- C#:委托基础与事件
- halcon模板匹配测试流程