首先,我们回顾以下运用学到的编程知识去做一个产品的大致步骤:
同时,也学了一种配合“产品思维”的思维工具:流程图。
例如:摩拜APP的流程图:
而且,还简单地过了一个职场中的例子:
根据以上表格,有需求: 制作一个自动统计考勤表数据并输出结果的程序
明确了需求后,通过拆解思维和解题步骤来完成技术方案和最终代码。
我们会通过今天的作业,用代码解决生活中实际的一种需求:选择困难,需要帮忙。
现今社会,每个人每天的生活都充满了各种各样的选择,导致许多人在选择面前纠结万分。
甚至,有不少人将“早饭吃什么?午饭吃什么?晚饭吃什么?”戏称为人生中的三大难题。
所以,我们今天的练习就会以“不知道吃什么”为例,让电脑来帮我们选,而我们只要做决策就好。
电脑推荐我们吃某种菜,我们拒绝后,它就继续推荐,直到我们满意为止。
根据生活经验,明确产品需求。
为了让产品更好用,我们可以先分析一下问题,将产品需求(即功能)明确一下。
由于选择困难症具体的症状不同,所以,我们需要同时针对不同的情况去一一分析需求,好保证产品的有效性。
假设“不知道吃什么”的主要原因有两种:
根据这个假设,明确产品需求:
注:假设你有想到不同的原因,可以自己想一想:要怎么用代码解决。
最终得出产品的三个功能:判断,随机推荐,特定选项中的随机推荐。
明确了需求之后,我们就可以运用学过的知识来定技术方案,可得:
首先先定义一下,目前可以去吃的饭店以及菜品都有哪些:
halls={'重庆鸡公煲':['鸡公煲','鸡块面条','鸡块土豆片'],'山西刀削面':['砂锅刀削面','土豆粉','蛋炒刀削面'],'沙县小吃':['排骨汤','飘香拌面']}
然后定义存放店名的变量和存放菜品的变量:
names=[]
dishes=[]
然后根据halls中的内容,将店名和菜品分别处理到定义好的变量中:
for i in halls:
names.append(i)
for j in halls[i]:
dishes.append(j)
然后咱们开始写主逻辑的代码:
userchoice = input('请选择模式:1.随机推荐 2.看列表指定饭店随机\n')
if userchoice == '1':
# 随机推荐模式下的代码
else:
# 看列表指定饭店随机模式下的代码
dish_radm()
函数来随机推荐一个菜品,然后使用find_name()
函数找到该菜品所属的饭店。while key:
a = dish_radm()
again()
print('选好了!吃' + str(a))
find_name(a)
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)
recommend_food()
的函数中,并在main()
函数中调用该函数。def recommend_food():
userchoice = input('请选择模式:1.随机推荐 2.看列表指定饭店随机\n')
if userchoice == '1':
# 随机推荐模式下的代码
else:
# 看列表指定饭店随机模式下的代码
def main():
print('欢迎使用 【今天吃什么】 小程序')
recommend_food()
print('感谢使用,欢迎下次再用!')
main()
通过以上整理,整个程序的框架已经搭建好了,接下来我们将需要调用的几个函数,分别进行实现。
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]
将菜品名称返回。
find_name()
函数的作用是根据菜品名称找到对应的饭店,并将信息打印出来。该函数的实现如下:def find_name(dish):
for i in halls:
if dish in halls[i]:
print('决定去{}饭店吃{}菜'.format(i, dish))
这个函数会遍历 halls
字典中的每个饭店,如果输入的菜品名称 dish
在饭店的菜品列表中出现,则打印出该菜品所属的饭店名称。
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
字典来提供用户选择时的映射关系。
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 关键字定义函数,使用函数名加括号调用函数 |
返回值的使用 | 函数可以通过返回值将计算结果或数据传递给调用者 |
本节完美结束,撒花~希望大家多多练习,早日成为大神!