华东师范大学·《编程思维与人工智能实践》

2020年~2021第二学期(课堂测试-1)卷(本试卷答卷时间为 90分钟,满分100分)

特别注意:1.考试结束后不要关机;2.操作题结果必须保存在c:\ecnu_ks\root\中,否则没有分数。

一. 选择题(每小题2分,15题 共30分)

登录后完成15道选择题。

二. 程序填空(每空3分,4题(6+9+12+12) 共39分)

  1. 在Python环境下打开c:\ecnu_ks\root\fillblank_1.py程序源文件,并将其另存为“ans21-学号-姓名.py”,存放在c:\ecnu_ks\root中。 按下列要求对文件中的下划线进行填空(用填空内容代替下划线,除此之外,不能改动其它任何地方,也不得增删行),调试并运行之。
    1. 程序功能:程序功能:使用随机函数生成一个数值在20~60之间的4行5列的ndarray整数数组,找出数组元素中所有奇数,修改为-1。
    2. 原始程序如下图所示:
      #fillblank_1.py
      #给定代码不准删除修改,所有填空使用一个表达式完成。
      import numpy as np
      np.random.seed(int(input())) 
      #生成20~60之间,4行5列的ndarray整数数组arr1
      arr1=____________【1】_______
      print(arr1)
      #寻找数组元素中的奇数,置为-1
      ________【2】___________
      print(arr1)
      
    3. 程序运行结果示例如下图所示:
      
      100
      [[28 44 23 59 43]
       [35 30 50 54 22]
       [54 34 54 44 35]
       [56 36 29 49 42]]
      [[28 44 -1 -1 -1]
       [-1 30 50 54 22]
       [54 34 54 44 -1]
       [56 36 -1 -1 42]]
      
      
      

  2. 在Python环境下打开c:\ecnu_ks\root\fillblank_2.py程序源文件,并将其另存为“ans22-学号-姓名.py”,存放在c:\ecnu_ks\root中。 按下列要求对文件中的下划线进行填空(用填空内容代替下划线,除此之外,不能改动其它任何地方,也不得增删行),调试并运行之。
    1. 程序功能:利用随机函数模拟果汁生产线上每瓶饮料的实际装瓶容量。饮料装瓶核定容量为300ml,实际装瓶容量的标准差为5ml(服从均值为300、标准差为5的正态分布)。假设抽检5个批次,每次8瓶果汁样品。
      (1)生成5*8的数组保存每瓶的实际容量并显示;
      (2)输出每个批次装瓶容量的实际均值(输出小数位限制为2位);
      (3)找出装瓶容量最少的批次和容量。
    2. 原始程序如下图所示:
      
      #fillblank_2.py
      #给定代码不准删除修改,所有填空使用一个表达式完成。
      import numpy as np
      np.random.seed(int(input()) )
      #设置显示精度为两位小数
      np.set_printoptions(precision=2, suppress=True)
      #按照正态分布(均值300,标准差50)随机生成5*8的数组模拟装瓶容量,并输出
      arr = np.random.normal(______【1】______)
      print ("1. \n", arr)
      #输出每个批次装瓶容量的实际均值
      meanarr=arr.mean(______【2】______)
      print("2. \n", meanarr )  
      #找出装瓶容量最少的批次并输出。
      print("3.\n",f"装瓶容量最少是第{______【3】______}批,容量为{______【4】______:.2f}ml" ) 
      
    3. 程序运行结果示例如下图所示:
      >>>
      200
      1. 
       [[292.75 309.55 303.56 298.76 301.81 299.84 298.89 302.39]
       [296.54 303.96 300.37 306.52 301.07 305.09 309.56 297.35]
       [309.21 294.71 295.69 301.19 294.23 306.07 293.53 304.11]
       [298.34 293.59 301.09 310.42 298.76 301.34 303.56 296.73]
       [300.81 311.07 296.67 294.95 311.74 303.02 303.22 298.34]]
      2. 
       [300.94 302.56 299.84 300.48 302.48]
      3.
       装瓶容量最少是第3批,容量为299.84ml
      >>>    
      

  3. 在Python环境下打开c:\ecnu_ks\root\fillblank_3.py程序源文件,并将其另存为“ans23-学号-姓名.py”,存放在c:\ecnu_ks\root中。 按下列要求对文件中的下划线进行填空(用填空内容代替下划线,除此之外,不能改动其它任何地方,也不得增删行),调试并运行之。
    1. 程序功能:创建两个GDP的Series对象gdp1和gdp2,输入序号ch,ch为1时,取出gdp1中的第一、第四和第五个元素,并求gdp1的总和。ch为2时,取出gdp2中上海、江苏和浙江的GDP值,并输出GDP大于6的元素。
    2. 原始程序如下图所示:
      #fillblank_3.py
      import pandas as pd
      import numpy as np
      # 构造序列
      gdp1 = pd.Series([2.8,3.01,8.99,8.59,5.18])
      gdp2 = pd.Series({'北京':2.8,'上海':3.01,'广东':8.99,'江苏':8.59,'浙江':5.18})
      ch=int(input("输入序号1或2:"))
      if ch==1:
          # 取出gdp1中的第一、第四和第五个元素
          print("取出gdp1中的第一、第四和第五个元素:")
          print(_____【1】_______)
          print("gdp1的总和:",_______【2】__________)
      else:
          print("取出gdp2中上海、江苏和浙江的GDP值:")
          print(____________【3】________)
          print("GDP大于6的元素:")
          print(____________【4】__________)
      
    3. 程序运行结果示例如下图所示:
      输入序号1或2:2
      取出gdp2中上海、江苏和浙江的GDP值:
      上海    3.01
      江苏    8.59
      浙江    5.18
      dtype: float64
      GDP大于6的元素:
      广东    8.99
      江苏    8.59
      dtype: float64
      

  4. 在Python环境下打开c:\ecnu_ks\root\fillblank_4.py程序源文件,并将其另存为“ans24-学号-姓名.py”,存放在c:\ecnu_ks\root中。 按下列要求对文件中的下划线进行填空(用填空内容代替下划线,除此之外,不能改动其它任何地方,也不得增删行),调试并运行之。
    1. 程序功能:根据字典对象data创建dataFrame对象df,完成以下操作:
      (1)使用'temperature'列的最大值填充'temperature'列的缺失值。
      (2)增加一行["Sun.",8]。
      (3)将'temperature'列数据增加5%。
      (4)输出"temperature"列大于10的数据。
    2. 原始程序如下图所示:
      #fillblank_4.py
      import numpy as np
      import pandas as pd
      data = {"weekday":["Mon.","Tues."," Wed.","Thur.","Fri.","Sat."],\
              "temperature":[ 9,16,np.nan,14,11,5]}
      df=pd.DataFrame(data)
      df['temperature'].fillna(_______【1】_____,inplace=True)
      df=df.append(_______【2】__________,ignore_index=True)
      df['temperature']=__________【3】________
      print(df[________【4】_______])
      
    3. 程序运行结果示例如下图所示:
                    weekday  temperature
      1   Tues.        16.80
      2    Wed.        16.80
      3   Thur.        14.70
      4    Fri.        11.55
      
      

三. 程序编写(1-15分+2-16分,2题,共31分)

  1. 按照下列要求,设计完成一个程序。在Python环境下,用IDLE打开c:\ecnu_ks\root\pro1.py程序源文件,将程序源代码另存为“ans31-学号-姓名.py”,存放在c:\ecnu_ks\root中。
    1. 程序功能:文件jumpracedata.csv存放着某次比赛中7位选手的跳高成绩,每列为一个轮次,除第1行为轮次序号外,其余各行分别对应各位选手的跳高成绩(单位为cm),共有4轮比赛。 编程实现一下功能:
      (1)读入jumpracedata.csv,生成DataFrame对象,运动员列作为行索引。
      (2)列表s5是第5轮的成绩,添加到df对象中。
      (3)增加一列"最好成绩",值为每一个运动的最好成绩。
      (4)最好成绩大于等于150cm的队员出线,输出好成绩和运动员两列。
    2. 程序运行示例如下图所示:
      
        运动员  最好成绩
      0  张敏   152
      1  李娜   150
      4  朱迪   176
      
      

  2. 按照下列要求,设计完成一个程序。在Python环境下,用IDLE打开c:\ecnu_ks\root\pro2.py程序源文件,将程序源代码另存为“ans32-学号-姓名.py”,存放在c:\ecnu_ks\root中。
    1. 程序功能:文件smartphone.xlsx存放了各手机品牌的2019年四个季度的销售金额表,每张工作表存放一个城市的销售金额表,共有"上海"、"成都"、"青岛"三张表。 编程实现以下功能:
      (1)读入smartphone.xlsx的三张工作表,合并到一个DataFrame对象df,行索引号重新排列。
      (2)按“公司”分组统计每个公司各个季度的销售总额,得到新的DataFrame对象result。
      (3)为result对象新增一列“总计”,统计每个公司的年销售总额。
      (4)统计“总计”列销售额最高的金额。
      (5)统计本年度各季度和全年的销售额。 (对result对象的每一列汇总求和)
    2. 程序运行示例结果如下图所示:
      公司销售额最高是1915.80万元
      本年度销售汇总:
      第1季度    1986.8
      第2季度    2401.3
      第3季度    2331.7
      第4季度    2131.9
      总计      8851.7
      dtype: float64
      

注意:考试结束后千万不要关机!