1. 社团成员依据前期收集并整理后的数据,分析并统计食堂各菜品间的关联次数(关联次数指的是不同菜品同时出现在同一订单内的次数),编写Python程序实现:输入菜品名称,输出与其关联次数排名前三(不考虑并列情况)的菜品名称。提出合理的套餐搭配建议。程序运行结果如1图所示。

1 图

(1) 如2图所示,“序号”列中1~12为4位学生的订单信息,其中与“糖醋排骨”关联次数最多的菜品名称是,关联次数是

2 图

(2) 实现上述功能的部分Python程序如下,请在划线处填写合适的代码。

import pandas as pd

df=pd.read_excel ("数据集 A.xlsx")

cp=["小炒时蔬","红烧牛肉","黄焖鸡","红烧肉","粉蒸肉","梅菜扣肉","糖醋排骨 ","烧圆子","小炒肉","水煮肉片","香菇炒肉","鱼香肉丝","烤鸭","香酥鸭","烧 带鱼","炸小鱼","大锅菜","番茄鸡蛋","麻婆豆腐","凉拌黄瓜"]

cpdic={"小炒时蔬":0,"红烧牛肉":1,"黄焖鸡":2,"红烧肉":3,"粉蒸肉":4,"梅菜扣 肉":5,"糖醋排骨":6,"烧圆子":7,"小炒肉":8,"水煮肉片":9,"香菇炒肉":10,"鱼香 肉丝":11,"烤鸭":12,"香酥鸭":13,"烧带鱼":14,"炸小鱼":15,"大锅菜":16,"番茄 鸡蛋":17,"麻婆豆腐":18,"凉拌黄瓜":19}

a=[]

for i in df.values:

    # 列表 a 分别存储订单编号、菜品 id、菜品名称

    a.append([i[2],i[4],i[5]])

n,ncp=len(a),len(cp)

num=[0]*ncp

j=0

cpmc=input("请输入菜品:")

key=cpdic[cpmc]         # 通过菜品名称获取菜品 id

while j<n:

    if j==0 or a[j-1][0]!=a[j][0]:

        start=j

    if a[j][1]==key:

        while a[j][0]==a[start][0]:

            if start!=j:

                num[ ]+=1

            start+=1

            if start==n:

                break

              # 改错

    j+=1

for i in range(3):    # 输出三个套餐搭配建议

    for j in range(ncp-1,i,-1):

        if  :

            num[j-1],num[j]=num[j],num[j-1]

            cp[j-1],cp[j]=cp[j],cp[j-1]

print("建议套餐中包含",cpmc,"与",cp[i],",两个菜品关联次数为",num[i])

(3) 程序中加框处代码有错,请改正。
【考点】
分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 普通
能力提升
真题演练
换一批
2. 某高中高二年级一共16个班举行篮球比赛,每个班都与其他班级各进行一场比赛,赢一场比赛增加1点积分,平局或者输掉比赛不扣积分,以最后的积分决定冠军、亚军和季军。如果两个班级胜场数相同,则输场数更低的班级排名更高;如果胜场数和输场数都相同,则排名相同。小文想用python来模拟16个班级的比赛,首先初始化16个班级比赛积分情况,初始化界面(如图1所示),某次运行代码后,16个班级的比赛结果情况如下(如图2所示)

每个班级与其他班级的比赛结果随机生成,0表示平局,-1表示输掉比赛,1表示赢得比赛,第一行数据表示1班对战16个班的比赛结果(每个班和自己的对战结果都用平局表示)

代码如下,请完成代码填空:

import random

import pandas as pd

s=[[0 for i in range(16)]

for jin range(16)]     #生成16*16的二维列表(图1所示)

k=[];n=[]

m=[[1,0,0],[2,0,0],[3,0,0],[4,0,0],[5,0,0],[6,0,0],[7,0,0],[8,0,0],[9,0,0],[10,0,0],[11,0,0],[12,0,0],[13,0,0],[ 14,0,0],[15,0,0],[16,0,0]]

#m列表[1,0,0]中第一个元素表示第几班,第二个元素表示胜场数,第三个元素表示输场数以此类推

for i in range(1,16):

    for j in range(i):

        s[i][j]=random.randint(-1,1)

       

df=pd.DataFrame(s,index=["1班","2班","3班","4班","5班","6班","7班","8班","9班","10班","11 班","12班","13班","14班","15班","16班"],columns=["1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16"])

print(df)                    #生成16个班的对战结果

for i in range(16):

    for j in range(16):

        if s[i][j]==1:

            m[j][1]+=s[i][j]

        elif s[i][j]==-1:

           

#对生成的m列表里的16个班级的数据进行排序,以胜场数作为主要关键词进行降序排序,以输场数为次要关键词进行升序排序,使m列表中的元素按照班级排名从高到低的顺序依次排列。

代码略

i=0

while i<15:

    n.append(m[i][0])

    for jin range(i+1,16):

        if :

            n.append(m[j][0])

        else:

            break

    k.append(n)

    n=[]; i=j

print("获得冠军的班级有:",k[0],"班,获得亚军的班级有:",k[1],"班,获得季军的班级有:",k[2]," 班")

综合题 困难