【python基础知识】20.“午饭吃什么”的python实现(产品思维-实操篇)

简介: 【python基础知识】20.“午饭吃什么”的python实现(产品思维-实操篇)

前言

首先,我们回顾以下运用学到的编程知识去做一个产品的大致步骤:

1.png同时,也学了一种配合“产品思维”的思维工具:流程图

2.png3.png例如:摩拜APP的流程图:4.png而且,还简单地过了一个职场中的例子:5.png根据以上表格,有需求: 制作一个自动统计考勤表数据并输出结果的程序6.png7.png8.png9.png10.png明确了需求后,通过拆解思维和解题步骤来完成技术方案和最终代码。


愿你培养这三种能力,让编程真正可以为自己的生活和工作服务。11.png

练习介绍


练习目标


我们会通过今天的作业,用代码解决生活中实际的一种需求:选择困难,需要帮忙。


练习要求


现今社会,每个人每天的生活都充满了各种各样的选择,导致许多人在选择面前纠结万分。


甚至,有不少人将“早饭吃什么?午饭吃什么?晚饭吃什么?”戏称为人生中的三大难题。


所以,我们今天的练习就会以“不知道吃什么”为例,让电脑来帮我们选,而我们只要做决策就好。


电脑推荐我们吃某种菜,我们拒绝后,它就继续推荐,直到我们满意为止。


项目实操


明确目标


根据生活经验,明确产品需求。


为了让产品更好用,我们可以先分析一下问题,将产品需求(即功能)明确一下。


由于选择困难症具体的症状不同,所以,我们需要同时针对不同的情况去一一分析需求,好保证产品的有效性。


假设“不知道吃什么”的主要原因有两种:


一是完全不知道要吃什么


二是在几家店之间犹豫。


根据这个假设,明确产品需求:


1.刚进入产品时要做一个选择,在两个主要原因中选一个。


2.当完全不知道要吃什么时,需要产品在一些菜品当众随机推荐一个,让我们选要或不要。


3.当在几家店之间犹豫时,需要告诉电脑是哪几家,然后让电脑推荐一家,我们来做决策。


注:假设你有想到不同的原因,可以自己想一想:要怎么用代码解决。


最终得出产品的三个功能:判断,随机推荐,特定选项中的随机推荐。


形成技术方案


明确了需求之后,我们就可以运用学过的知识来定技术方案,可得:


判断: 判断语句(二选一)+input(下面两个功能也会用到,不重复写了)


随机推荐:random模块(前提:一个提前设好的菜品列表)+循环(不满意再选)+判断


特定选项的随机选项:列表添加(让我们将自己的选择添加进一个空列表)+random模块+循环+判断


编写程序代码


数据准备


首先先定义一下,目前可以去吃的饭店以及菜品都有哪些:

halls={'重庆鸡公煲':['鸡公煲','鸡块面条','鸡块土豆片'],'山西刀削面':['砂锅刀削面','土豆粉','蛋炒刀削面'],'沙县小吃':['排骨汤','飘香拌面']}

然后定义存放店名的变量和存放菜品的变量:

names=[]
dishes=[]

然后根据halls中的内容,将店名和菜品分别处理到定义好的变量中:

for i in halls:
    names.append(i)
    for j in halls[i]:
        dishes.append(j)

主流程逻辑搭建


然后咱们开始写主逻辑的代码:


1.首先,说明需要根据用户选择的模式进行不同的操作。可以使用一个if-else语句判断用户选择了哪种模式。

userchoice = input('请选择模式:1.随机推荐 2.看列表指定饭店随机\n')
if userchoice == '1':
    # 随机推荐模式下的代码
else:
    # 看列表指定饭店随机模式下的代码

2.在随机推荐模式下,可以使用dish_radm()函数来随机推荐一个菜品,然后使用find_name()函数找到该菜品所属的饭店。

while key:
    a = dish_radm()
    again()
print('选好了!吃' + str(a))
find_name(a)

3.在看列表指定饭店随机模式下,可以使用show_names()函数显示所有饭店的列表,然后使用ipt_rdm()函数获取用户选择的饭店,最后根据用户选择的饭店随机推荐一个菜品,并使用find_name()函数找到该菜品所属的饭店。

dic_name = show_names()
usr_choice_names = ipt_rdm()
while key:
    s = find_dishes(usr_choice_names)
    m = random.choice(s)
    print('吃{}这个菜怎么样?输入n退出,其他任意键继续推荐'.format(m))
    again()
print('选好了!吃{}'.format(m))
find_name(m)

4.最后,为了让代码更加模块化和可复用,可以将上述的代码封装到一个名为recommend_food()的函数中,并在main()函数中调用该函数。

def recommend_food():
    userchoice = input('请选择模式:1.随机推荐 2.看列表指定饭店随机\n')
    if userchoice == '1':
        # 随机推荐模式下的代码
    else:
        # 看列表指定饭店随机模式下的代码
def main():
    print('欢迎使用 【今天吃什么】 小程序')
    recommend_food()
    print('感谢使用,欢迎下次再用!')
main()

完善补充确实的功能


通过以上整理,整个程序的框架已经搭建好了,接下来我们将需要调用的几个函数,分别进行实现。


1.dish_radm() 函数的作用是从菜品列表中随机选择一个菜品,并返回该菜品名称。该函数的实现如下:

def dish_radm():
    dish_choice = random.choices(dishes)
    print('去吃{}菜可好?'.format(dish_choice))
    return dish_choice[0]

这个函数首先使用 random.choices() 方法从菜品列表 dishes 中随机选择一个菜品,并赋值给 dish_choice。然后,根据选择的菜品,在控制台上打印出推荐的菜品。最后,通过返回 dish_choice[0] 将菜品名称返回。


2.find_name() 函数的作用是根据菜品名称找到对应的饭店,并将信息打印出来。该函数的实现如下:

def find_name(dish):
    for i in halls:
        if dish in halls[i]:
            print('决定去{}饭店吃{}菜'.format(i, dish))

这个函数会遍历 halls 字典中的每个饭店,如果输入的菜品名称 dish 在饭店的菜品列表中出现,则打印出该菜品所属的饭店名称。


3.show_names() 函数的作用是显示所有饭店的列表,并返回一个字典,其中键为数字序号,值为饭店名称。这个函数的实现如下:

def show_names():
    print('去下面哪家吃比较好呢?请输入你的选择,可多选')
    dic_name = {}
    for i in range(len(names)):
        dic_name[i + 1] = names[i]
        print(str(i + 1) + '.' + names[i])
    return dic_name

这个函数首先在控制台上打印出提示信息。然后,使用一个循环遍历 names 列表,将每个饭店的序号与名称对应起来,并分别打印出来。最后,通过返回 dic_name 字典来提供用户选择时的映射关系。


4.ipt_rdm() 函数的作用是获取用户通过输入数字序号选择的饭店列表,并将所选饭店的名称以列表形式返回。这个函数的实现如下:

def ipt_rdm():
    dic_name={}
    for i in range(len(names)):
        dic_name[i+1]=names[i]
    chars=input('输入序号即可')
    inputnames=[]
    usr_choice_names=[]
    for i in chars:
        inputnames.append(int(i))
    for j in dic_name:
        if j in inputnames:
            usr_choice_names.append(dic_name[j])
    return usr_choice_names

这个函数首先创建一个空字典 dic_name,并通过循环将饭店的序号和名称对应起来。然后,等待用户输入数字序号,保存在字符串变量 chars 中。接下来,将数字序号转换为整数,并保存到列表 inputnames 中。最后,通过循环遍历 dic_name 字典,将用户选择的饭店名称添加到 usr_choice_names 列表中,并返回该列表。


最终代码整合:

# 请独立完成这个产品吧,我相信你可以的!
import random
halls={'重庆鸡公煲':['鸡公煲','鸡块面条','鸡块土豆片'],'山西刀削面':['砂锅刀削面','土豆粉','蛋炒刀削面'],'沙县小吃':['排骨汤','飘香拌面']}
names=[]
dishes=[]
key=1
for i in halls:
    names.append(i)
    for j in halls[i]:
        dishes.append(j)
def find_name(dish):
    for i in halls:
        if dish in halls[i]:
            print('决定去{}饭店吃{}菜'.format(i,dish))
def find_dishes(n_names):
    n_dishes=[]
    for i in halls:
        if i in n_names:
            for j in halls[i]:
                n_dishes.append(j)
    return n_dishes
def show_names():
    print('去下面哪家吃比较好呢?请输入你的选择,可多选')
    dic_name={}
    for i in range(len(names)):
        dic_name[i+1]=names[i]
        print(str(i+1)+'.'+names[i])
    return dic_name
def name_radm():
    name_choice=random.choices(names)
    print('去{}吃饭可好?'.format(name_choice))
    return name_choice[0]
def dish_radm():
    dish_choice=random.choices(dishes)
    print('去吃{}菜可好?'.format(dish_choice))
    return dish_choice[0]
def again():
        global key
        answer=input('是否继续推荐,n退出,任意键继续')
        if answer=='n':
            key=0
        else:
            key=1
def ipt_rdm():
    dic_name={}
    for i in range(len(names)):
        dic_name[i+1]=names[i]
    chars=input('输入序号即可')
    inputnames=[]
    usr_choice_names=[]
    for i in chars:
        inputnames.append(int(i))
    for j in dic_name:
        if j in inputnames:
            usr_choice_names.append(dic_name[j])
    return usr_choice_names
def main():
    print('欢迎使用 【今天吃什么】 小程序')
    userchoice=input('请选择模式:1.随机推荐 2.看列表指定饭店随机\n')
    if userchoice=='1':
        while key:
            a=dish_radm()
            again()
        print('选好了!吃'+str(a))
        find_name(a)
    else:
        dic_name=show_names()
        usr_choice_names=ipt_rdm()
        while key:
            s=find_dishes(usr_choice_names)
            m=random.choice(s)
            print('吃{}这个菜怎么样?输入n退出,其他任意键继续推荐'.format(m))
            again()
        print('选好了!吃{}'.format(m))
        find_name(m)
    print('感谢使用,欢迎下次再用!')
main()

总结


通过这个项目,你可以学习如何使用随机函数做出随机选择、处理用户的输入,以及使用循环、条件语句等控制流程。你还会学到如何使用字符串的格式化方法将变量的值插入到字符串中,并理解函数的定义和调用以及返回值的使用。


这些知识在编程中非常常见且实用,能够帮助你有效地处理数据和控制程序流程。


接下来将知识点罗列如下:

知识

实现方法

使用随机函数

random.choices() 方法可以从列表中随机选择元素

字符串格式化 使用字符串的 format() 方法可以将变量的值插入到字符串中

循环和条件语句

使用循环和条件语句可以根据条件执行特定的代码块

列表和字典的使用

可以使用列表和字典存储和处理数据
用户输入处理 使用 input() 函数获取用户的输入,并进行相应的处理
函数的定义和调用 使用 def 关键字定义函数,使用函数名加括号调用函数
返回值的使用 函数可以通过返回值将计算结果或数据传递给调用者

本节完美结束,撒花~希望大家多多练习,早日成为大神!

相关文章
|
7月前
|
JavaScript 前端开发 Android开发
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
203 13
【03】仿站技术之python技术,看完学会再也不用去购买收费工具了-修改整体页面做好安卓下载发给客户-并且开始提交网站公安备案-作为APP下载落地页文娱产品一定要备案-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
|
前端开发 JavaScript Java
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
本文介绍了一个结合SpringBoot和Python的实用功能,旨在监控iPhone 15的库存状态并通过邮件提醒用户。系统采用SpringBoot监听苹果官网API,解析JSON数据判断是否有货,并展示最近的库存记录。此外,还能自动触发Selenium+Python脚本实现自动化购买。文中详细介绍了技术栈、接口分析、邮件配置及自动化脚本的设置方法。该项目不仅适用于熟悉后端开发的人员,也适合回顾Layui和Jquery等前端技术。
210 0
【实操】SpringBoot监听Iphone15邮件提醒,Selenium+Python自动化抢购脚本
|
8月前
|
分布式计算 DataWorks 数据处理
产品测评 | 上手分布式Python计算服务MaxFrame产品最佳实践
MaxFrame是阿里云自研的分布式计算框架,专为大数据处理设计,提供高效便捷的Python开发体验。其主要功能包括Python编程接口、直接利用MaxCompute资源、与MaxCompute Notebook集成及镜像管理功能。本文基于MaxFrame最佳实践,详细介绍了在DataWorks中使用MaxFrame创建数据源、PyODPS节点和MaxFrame会话的过程,并展示了如何通过MaxFrame实现分布式Pandas处理和大语言模型数据处理。测评反馈指出,虽然MaxFrame具备强大的数据处理能力,但在文档细节和新手友好性方面仍有改进空间。
|
8月前
|
数据采集 人工智能 分布式计算
🚀 MaxFrame 产品深度体验评测:Python 分布式计算的未来
在数据驱动的时代,大数据分析和AI模型训练对数据预处理的效率要求极高。传统的Pandas工具在小数据集下表现出色,但面对大规模数据时力不从心。阿里云推出的Python分布式计算框架MaxFrame,以“Pandas风格”为核心设计理念,旨在降低分布式计算门槛,同时支持超大规模数据处理。MaxFrame不仅保留了Pandas的操作习惯,还通过底层优化实现了高效的分布式调度、内存管理和容错机制,并深度集成阿里云大数据生态。本文将通过实践评测,全面解析MaxFrame的能力与价值,展示其在大数据和AI场景中的卓越表现。
177 4
🚀 MaxFrame 产品深度体验评测:Python 分布式计算的未来
|
8月前
|
人工智能 分布式计算 大数据
MaxFrame 产品评测:大数据与AI融合的Python分布式计算框架
MaxFrame是阿里云MaxCompute推出的自研Python分布式计算框架,支持大规模数据处理与AI应用。它提供类似Pandas的API,简化开发流程,并兼容多种机器学习库,加速模型训练前的数据准备。MaxFrame融合大数据和AI,提升效率、促进协作、增强创新能力。尽管初次配置稍显复杂,但其强大的功能集、性能优化及开放性使其成为现代企业与研究机构的理想选择。未来有望进一步简化使用门槛并加强社区建设。
376 8
|
11月前
|
数据处理 iOS开发 MacOS
Python 虚拟环境安装使用(Anaconda 实操完整版)
【10月更文挑战第4天】Anaconda 是一个开源的 Python 发行版,集成了常用科学计算与数据处理库,并提供了方便的包管理工具 `conda`。虚拟环境则允许在同一台机器上创建多个独立的 Python 运行环境,避免库版本冲突。通过下载 Anaconda、创建与激活虚拟环境、安装软件包及管理环境,可有效支持 Python 项目开发。
1869 8
|
供应链 数据可视化 数据挖掘
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
本文详细介绍了第十一届泰迪杯数据挖掘挑战赛B题的解决方案,涵盖了对产品订单数据的深入分析、多种因素对需求量影响的探讨,并建立了数学模型进行未来需求量的预测,同时提供了Python代码实现和结果可视化的方法。
386 3
【2023年第十一届泰迪杯数据挖掘挑战赛】B题:产品订单的数据分析与需求预测 建模及python代码详解 问题一
|
机器学习/深度学习 自然语言处理 数据可视化
基于Python大数据的京东产品评论的情感分析的研究,包括snwonlp情感分析和LDA主题分析
本文探讨了基于Python大数据技术对京东产品评论进行情感分析的研究,涵盖了文本预处理、情感分类、主题建模等步骤,并运用了snwonlp情感分析和LDA主题分析方法,旨在帮助电商企业和消费者做出更明智的决策。
480 1
基于Python大数据的京东产品评论的情感分析的研究,包括snwonlp情感分析和LDA主题分析
|
消息中间件 安全 数据库
动手实操!Python IPC机制,打造高效协同的进程军团
【9月更文挑战第10天】在软件开发领域,进程间的高效协作对应用性能与稳定性至关重要。Python提供了多种进程间通信(IPC)机制,如管道、消息队列、套接字、共享内存等,帮助开发者构建高效协同的系统。本文将通过动手实践,使用`multiprocessing`模块演示如何利用队列实现进程间通信。示例代码展示了如何创建一个工作进程从队列接收并处理数据,从而实现安全高效的进程交互。通过实际操作,读者可以深入了解Python IPC的强大功能,提升系统的并发处理能力。
135 1
|
运维 Serverless 测试技术
函数计算产品使用问题之怎么使用python读取csv文件
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。

热门文章

最新文章

推荐镜像

更多