计算机二级python真题



【计算机二级Python】综合题目-LMLPHP


一、简单应用题——年龄统计

描述

实现以下功能:

键盘输入一组人员姓名、年龄、性别等信息,信息间采用空格分隔,每人一行,空行回车结束录入,示例格式如下:

计算并输出这组人员的平均年龄(保留2位小数)和其中男性人数,格式如下:

平均年龄是20.67 男性人数是2

代码:

data = input()  # 姓名 年龄 性别
all_num = 0 
all_age = 0
man_num = 0
while data:
    all_num += 1
    ls = data.split()
    all_age += int(ls[1])
    if ls[2] == '男':
        man_num += 1
    data = input()
avg= all_age/all_num
print("平均年龄是{:.2f} 男性人数是{}".format(avg,man_num))

二、综合应用题——《星座三问》

本题对应三个问题,请按照文件内说明修改代码,实现以下功能:

二千多年前希腊的天文学家希巴克斯命名十二星座,它们是水瓶座、双鱼座、白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、魔蝎座。

给出一个CSV文件(PY301-SunSign.csv)内容示例如下:

序号,星座,开始月日,结束月日,Unicode

1,水瓶座,120,218,9810

2,双鱼座,219,320,9811

3,白羊座,321,419,9800

4,金牛座,420,520,9801

5,双子座, 521,621,9802

… (略)

以第1行为例,120表示1月20日,218表示2月18日,9810是Unicode码。

本题解答问题 1

读入CSV文件中的数据,获得用户输入。根据用户输入的星座名称,输出此星座的出生日期范围。

参考输入和输出示例格式如下请输入星座中文名称(例如,双子座):双子座

双子座的生日位于521-621之间

代码:

f = open("PY301-SunSign.csv", "r", encoding="utf-8") #正式考试可以不用指定编码,用系统默认。
x = input("请输入星座中文名称(例如,双子座):")
ls = []
for line in f:
    ls.append(line.strip('\n').split(','))
for row in ls:
	# 如果列表 row[1] 中包含元素 x,则执行下一步操作。
    if row[1].count(x) > 0:
        print("{}的生日位于{}-{}之间".format(x, row[2], row[3]))
f.close()

本题解答问题 2

在代码框中修改代码,读入CSV文件中数据,获得用户输入。用户键盘输入一组范围是112的证书作为序号,序号间采用空格分隔,以回车结束。屏幕输出这些序号对应的星座的名称、支付编码以及出生日期范围,每个星座的信息一行。本次屏幕显示完成后,重新回到输入序号的状态。

参考输入和输出示例格式如下:

请输入星座序号(例如,5) : 5 10

双子座(9802)的生日是5月21日至6月21日之间

天蝎座(9807)的生日是10月24日至11月22日之间

请输入星座序号(例如, 5):

代码:

fi = open("PY301-SunSingn.csv","r",encoding="utf-8")
lines = fi.readlines()
fi.close()

ls = []
for line in lines:
    ls.append(line.strip("\n").split(","))

while True:
    x = input("请输入星座序号(例如,5):")
    num = x.split()
    if i in num:
        for row in ls:
            if row[0] == i:
                if len(row[2]==2):
                    m1 = row[2][0:1]
                    d1 = row[2][1:3]
                else:
                    m1 = row[2][0:2]
                    d1 = row[2][2:4]
                if len(row[3]=3):
                    m2 = row[3][0:1]
                    d2 = row[3][1:3]
                else:
                    m2 = row[3][0:2]
                    d2 = row[3][2:4]
                print("{} ({}) 的生日是{}月{}日至{}月{}日之间".format(row[1],row[4],m1,d1,m2,d2))    

本题解答问题3

在问题2的基础上,在代码框中修改代码,对键盘输入的每个序号做合法性处理。如果输入的数字不合法,请输出"输入星座编号有误! " ,继续输出后续信息,然后重新回到输入序号的状态。

参考输入和输出示例格式如下:

请输入星座序号(例如, 5) : 51411

双子座(9802)的生日是5月21日至6月21日之间

输入星座序号有误!

射手座(9808)的生日是11月23日至12月21日

之间请输入星座序号(例如,5):

代码;

fi = open("PY301-SunSingn.csv","r",encoding="utf-8")
lines = fi.readlines()
fi.close()

ls = []
for line in lines:
    ls.append(line.strip("\n").split(","))

while True:
    x = input("请输入星座序号(例如,5):")
    num = x.split()
    if i in num:
        if 1<=int(i)<=len(ls):
            for row in ls:
                if row[0] == i:
                    if len(row[2]==2):
                        m1 = row[2][0:1]
                        d1 = row[2][1:3]
                    else:
                        m1 = row[2][0:2]
                        d1 = row[2][2:4]
                    if len(row[3]=3):
                        m2 = row[3][0:1]
                        d2 = row[3][1:3]
                    else:
                        m2 = row[3][0:2]
                        d2 = row[3][2:4]
                    print("{} ({}) 的生日是{}月{}日至{}月{}日之间".format(row[1],row[4],m1,d1,m2,d2))      else:
             print("输入星座序号有误!")           
05-14 20:11