场景编程集锦 - 快乐时光咖啡屋

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了场景编程集锦 - 快乐时光咖啡屋相关的知识,希望对你有一定的参考价值。

1. 场景描述

  咖啡、可可和茶并称为世界著名的三大饮品。近十年来,咖啡倍受国人偏爱和追捧。因为咖啡文化与时尚生活、工作和休闲娱乐紧密地联系在一起,喝咖啡也似乎成为了小资生活与时尚生活的象征与标配。然而大部分中国人真正接受咖啡,并逐渐养成喝咖啡的习惯,不过是从星巴克进入中国后才开始的,至今也不过十几年的时间。咖啡馆不同于其他餐饮场所,自有其独特的魅力,由于其环境优雅,营造出放松的氛围,让处于快节奏工作和生活状态下的人们,可以借此放松身心、消除疲惫。咖啡馆避免了一些餐饮和饮品店的噪杂,所以它成为了人们聚会、洽谈生意、闲暇小憩和男女约会的理想之地,甚至成为一些人打发休闲时光的一个好去处。现代社会,人们进出咖啡馆不仅是一种消费行为,也参杂了社交、商务等需求,成为人们生活中的另一个空间。   正因如此,在城市商圈或者写字楼周边,咖啡店犹如雨后春笋随处可见,快乐时光咖啡屋就是其中之一。这是一家连锁的咖啡屋,在全国拥有20多家连锁店,具有强大的美誉度和良好的口碑。其特色之一就是其官网上推荐的营销活动:“特价咖啡天天喝”。每一天都有一款打折咖啡,但是工作日和周末的打折力度不同。这个活动受到众多年轻消费者的青睐。本案例中我们将通过Python开发一个WEB网站程序,再现“特价咖啡天天喝”的营销活动场景。


2. 编程思路

  快乐时光网站要实现的核心功能就是根据工作日和周末,在网站上展示不同的咖啡价目单。

2.1 开发工具

  Python提供了多种网站Web程序开发的解决方案,主流的开发工具有Flask和Django。Django适合大型网站开发,而Flask则对于小型WEB程序开发更加简洁和灵活。结合本案例的实际需要,我们选择Flask来开发快乐时光咖啡屋的网站程序更为恰当。

2.2 程序构成

  我们的快乐时光网站由3个部分构成:   后台服务器程序:定义路由和试图函数,判断工作日和周末,生成不同的咖啡价目表。   模板程序:前端展示的网站页面,它包含支持Jinjia2的模板语句,实现动态数据的加载。我们需要创建目录templates,存放网站的模板文件。   静态资源:包含网站的图片文件、CSS网页格式文件。我们需要创建目录static存放网站静态资源,其下创建子目录images保存图片文件,创建子目录存放css文件。   有了以上的程序规划,我们就可以进行网站程序的编码工作了。


3. 程序代码

3.1 服务器程序 joytime.py

"""
  joytime.py : 欢乐时光咖啡屋
"""
from flask import Flask, render_template
import datetime

joy_menus = [
    (Cappuccino, 卡布诺奇, 32),
    (Vanilla Latte, 香草拿铁, 35),
    (Caramel Macchiato, 焦糖玛奇朵, 34),
    (Latte, 拿铁, 30),
    (Americano, 美式咖啡, 25),
    (Mocha, 摩卡, 33),
    (Brewed Coffee, 新鲜调制咖啡, 20)
    ]   # ①

DISCOUNT = 0.85
app = Flask(__name__)

@app.route(/)   # ②
def index():   # ③
    today = datetime.datetime.now()
    t_visit = today.strftime(%Y-%m-%d   %H:%M:%S %A)   # ④
    menus = []
    weekend = 0
    if today.weekday() >= 5:    # ⑤
        for item in joy_menus:
            menus.append((item[0], item[1], int(item[2]*DISCOUNT)))   # ⑥
        weekend = 1
    else:
        menus = joy_menus
    return render_template(joytime.html, today=t_visit, menus=menus, weekend=weekend)  # ⑦

if __name__ == __main__:
    app.run()   # ⑧

重要语句说明: 语句①定义菜单列表,列表元素是一个元组,包括咖啡英文名称,中文名称和价格。 语句②定义路由,代表在浏览器中访问:localhost:5000,将执行视图函数index()。 语句③定义视图函数index()。 语句④将当前日期转换成字符串。 语句⑤判断今天是否是周末。 语句⑥动态创建咖啡价目表。 语句⑦渲染模块,实现动态页面展示。 语句⑧启动快乐时光的后台服务程序。

3.2 模板文件:joytime.html

<!—joytime.html 模板文件 -->

<!doctype html>
<html>
<head>
  <meta charset=utf-8/>
  <title>快乐时光咖啡屋</title>
  <link rel="stylesheet" href="url_for(static,filename=css/joytime.css/)" />
</head>
<body>
<div id="header">
  Welcome to Joy Time
</div>

<div id="nav">
<ul>
  <li>Home</li>
  <li>Members</li>
  <li>About</li>
  <li>Join Us</li>
</ul>
</div>

<div id="section">
  <img src="url_for(static,filename=images/joytime.png/)"
    width=1300 height=300 alt=coffee picture/>
</div>

<div id="visit">
  % if weekend==1 %
  <h2>Today specials</h2>
  % endif %
  <p>Date: today</p>
</div>

<div id="item">
<ul>
  % for item in menus %
  <li>item[1] </li>
  % endfor %
</ul>
</div>

<div id="price">
<ul>
  % for item in menus %
  <li>...... ¥item[2]</li>
  % endfor %
</ul>
</div>

<div id="footer">
  <p>&copy;Copyright : Joytime.com.cn</p>
</div>

</body>
</html>

3.3 css格式文件

/* joytime.css : 欢乐时光咖啡屋 */
body 
  background-color: linen;


li 
  list-style: none;


#header 
  background-color: black;
  color: white;
  text-align: center;
  padding: 5px;


#nav 
  line-height: 35px;
  background-color: #dddddd;
  color: #700505;
  height: 300px;
  width: 150px;
  float: left;
  padding: 5px;


#section 
  width: 1100px;
  float: left;
  padding: 5px;
  text-align: center;


#visit 
  clear: both;
  float: left;
  margin-left: 680px;
  text-align: center;


#item 
  width: 200px;
  clear: both;
  float: left;
  padding: 5px;
  margin-left: 630px;
  line-height: 30px;


#price 
  width: 500px;
  float: left;
  padding: 5px;
  line-height: 30px;


#footer 
  background-color: black;
  color: white;
  clear: both;
  text-align: center;
  padding: 5px;

3.4 网站图片文件:joytime.png

图片效果如下:


4. 执行效果

4.1 环境安装

快乐时光网站运行,需要安装Flask第三方开发库。你可以在Windows的命令行窗口中执行以上命令: pip install flask -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

4.2 程序执行

第一步启动后台服务器程序:

D:\\cases\\快乐时光咖啡屋>python joytime.py
 * Serving Flask app joytime
 * Debug mode: off
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
 * Running on http://127.0.0.1:5000
Press CTRL+C to quit

第二步使用浏览器访问网站:127.0.0.1:5000或者localhost:5000,你将看到如下结果:   至此,大功告成。我们已经完成了快乐时光咖啡屋官网程序的开发。应该说这是一个功能非常简单的网站程序,但对于WEB网站开发的初学者来说,这是一个很好的起点,作为一个练手项目,是一个良好的开端。


5. 程序优化

我们建议对joytime.py进行两个方面的优化工作。具体说来就是: 1.咖啡价目表是以硬编码的方式写入程序,如果咖啡价格调整,我们需要手动修改程序,这种程序与数据构成方式我们称之为紧耦和; 2. 这一版程序目前仅实现了周末咖啡打折,并没有完全实现天天打折的业务需求。 为了解决以上两个问题,可有以下的解决方案。一是将咖啡价目表joy_menus列表内容以文本文件形式存放,在程序启动后进行一次性加载,实现程序与数据的分离;二是进一步优化视图函数index(),在条件分支语句中,针对今天是工作日的情况,随机选择一种咖啡打85折,以真正兑现“特价咖啡天天喝”这个庄严的营销承诺。具体工作如下:

5.1 咖啡价目表保存

将咖啡价目表保存到文本文件coffee_menu.txt中,内容如下:

Cappuccino	卡布诺奇	32
Vanilla Latte	香草拿铁	35
Caramel Macchiato		焦糖玛奇朵	34
Latte	拿铁	30
Americano	美式咖啡	25
Mocha	摩卡	33
Brewed Coffee		新鲜调制咖啡	20

每行数据代表一种咖啡,包含咖啡英文名称、咖啡中文名以及咖啡价格等三项数据,数据项之间使用tab键进行分隔。文件以UTF-8格式保存。你可以使用Windows notepad对这个文件进行编辑和修改。

5.2 在joytime.py模块中新增函数load_menu()

这个函数的主要作用是读取咖啡价目表文本文件。内容如下所示:

def load_menu(fname):
    """
    加载咖啡价目表内容
    """
    joy_menus = []
    with open(fname, encoding=utf8) as infile:
        lines = infile.readlines()
        for line in lines:
            items = line.strip().split(\\t)
            joy_menus += [(items[0], items[1], int(items[2]))]

return joy_menus

这个函数load_menu(fname)能够方便地将coffee_menu.txt读入一个Python的列表,列表的每一个元素是一个元组,其中包含了包含咖啡英文名称、咖啡中文名以及咖啡价格等内容。

5.3 修改joytime.py相关内容

"""
  joytime.py : 欢乐时光咖啡屋
"""
from flask import Flask, render_template
import datetime

def load_menu(fname):    # ①
    """
    加载咖啡价目表内容
    """
    joy_menus = []
    with open(fname, encoding=utf8) as infile:
        lines = infile.readlines()
        for line in lines:
            items = line.strip().split(\\t)
            joy_menus += [(items[0], items[1], int(items[2]))]   # ②
    return joy_menus

fname = coffee_menu.txt
joy_menus = load_menu(fname)    # ③
DISCOUNT = 0.85

app = Flask(__name__)

@app.route(/)
def index():
    today = datetime.datetime.now()
    t_visit = today.strftime(%Y-%m-%d   %H:%M:%S %A)
    menus = []
    weekend = 0

    if today.weekday() >= 5:
        for item in joy_menus:
            menus.append([item[0], item[1], int(item[2]*DISCOUNT)])
        weekend = 1
    else:
        for item in joy_menus:    # ④
            menus.append([item[0], item[1], item[2]])
        numbers = len(menus)
        idx = today.weekday() % numbers     # ⑤

        menus[idx][-1] = int(menus[idx][-1]*DISCOUNT)    # ⑥

    return render_template(joytime.html, today=t_visit, menus=menus, weekend=weekend)

if __name__ == __main__:
    app.run()

重要语句说明如下: 语句①定义加载咖啡价目表的函数; 语句②构建咖啡价目表的列表项; 语句③执行函数以从文本文件coffee_menu.txt读入咖啡价目表; 语句④循环体完成列表的内容复制,当然这个循环你也可以使用列表推导式代替; 语句⑤工作日选取一种咖啡打折,这里的idx代表某种咖啡在列表menus中的序号; 语句⑥对打折咖啡的价格进行进行调整。 以上就是程序优化部分的全部内容和代码实现。

以上是关于场景编程集锦 - 快乐时光咖啡屋的主要内容,如果未能解决你的问题,请参考以下文章

伽马主打咖啡介绍

第09课:生活中的工厂模式——你要拿铁还是摩卡

咖啡日常作为编程语言的“java”怎么就成了咖啡的代称?

作为编程语言的“java”怎么就成了咖啡的代称?

管理心得之六十三非正式沟通 ----- 一杯咖啡

天猫2月咖啡行业数据分析(咖啡品牌销量排行)