全国计算机等级考试二级教程2019年版——Python语言程序设计(参考答案)

Python012

全国计算机等级考试二级教程2019年版——Python语言程序设计(参考答案),第1张

答案:C B B C A D B A D B

1.获得用户输入的一个整数N,计算并输出N的32次方。

2.获得用户输入的一段文字,将这段文字进行垂直输出。

3.获得用户输入的一个合法算式,例如1.2+3.4,输出运算结果。

4.获得用户输入的一个小数,提取并输出其整数部分。

5.获得用户输入的一个整数N,计算并输出1到N相加的和。

答案:C A A A B A C D A C

1.获得用户输入的一个整数,输出该整数百位及以上的数字。

2.获得用户输入的一个字符串,将字符串按照空格分割,然后逐行打印出来。

3.程序读入一个表示星期几的数字(1-7),输出对应的星期字符串名称。例如,输入3,返回“星期三”。

4.设n是一任意自然数,如果n的各位数字反向排列所得自然数与n相等,则n被称为回文数。从键盘输入一个5位数字,请编写程序判断这个数字是不是回文数。

5.输入一个十进制整数,分别输出其二进制、八进制、十六进制字符串。

答案:B A D C D D C A C D

1.输入一个年份,输出是否是闰年。#闰年条件:能被4整除但不能被100整除,或者能被400整除的年份,都是闰年。

2.最大公约数计算。获得两个整数,求出这两个整数的最大公约数和最小公倍数。最大公约数的计算一般使用辗转相除法,最小公倍数则使用两个数的乘积除以最大公约数。

3.统计不同字符个数。用户从键盘键入一行字符,编写一个程序,统计并输出其中英文字符、数字、空格和其他字符的个数。

4.改编题目1中的程序,当用户输入出错时给出“输入内容必须是整数!”的提示,并让用户重新输入。

5.羊车门问题。有三扇关闭的门,一扇门后面停着汽车,其余门后是山羊,只有主持人知道每扇门后面是什么。参赛者可以选择一扇门。在开启它之前,主持人会开启另外一扇门,露出门后的山羊。此时,允许参赛者更换自己的选择。请问,参赛者更换选择后能否增加猜中汽车的机会?——这是一个经典问题。请使用random库对这个随机事件进行预测,分别输出参赛者改变选择和坚持选择获胜的概率。

答案:B B B B A D D A D D

Tips:

2.字典类型的key只能是不可变数据类型;

3.Python中以下情况判断为False:

(1)None–>None值

(2)False–>False值

(3)0 --->数值零不管它是int,float还是complex类型

(4)‘’,(),[] --->任何一个空的序列

(5){} --->空的集合。

9.列表类型的pop(i)方法,如果不指定参数 i,则默认取出并删除列表中最后一个元素

1.英文字符频率统计。编写一个程序,对给定字符串中出现的a~z字母频率进行分析,忽略大小写,采用降序方式输出。

2.中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出。

3.随机密码生成。编写程序,在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。

4.重复元素判定。编写一个函数,接受列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和输出测试结果的程序。

5.重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本。

#!/usr/bin/env python

#coding=utf-8

import re

from datetime import datetime as dt, timedelta

import platform

if platform.python_version()[:1] == '2': #判断python版本是2还是3

    import sys

    reload(sys)

    sys.setdefaultencoding('utf8')

class Idcard(object):

    ''' 

    >>> m = Idcard('225122198611134730')

    >>> print(m.sex)

    男

    >>> m.birth

    '1986-11-13'

    >>> m.age

    30

    '''

    def __init__(self,idcard):

        self.idcard = idcard        

        if len(idcard) == 15:

            sex, birth = idcard[-1:], '19' + idcard[6:12]

        elif len(idcard) == 18:

            sex, birth = idcard[-2:-1], idcard[6:14]   

        else:

            raise Exception('len(idcard) is {} (15/18)'.format(len(idcard)))

        self._sex = int(sex) % 2

        self._birth = birth

    

    @property

    def sex(self):

        return u'男' if self._sex % 2 else u'女'

    @property

    def age(self):  

        now, bir = dt.now(), dt.strptime(self._birth, '%Y%m%d')

        beforebirth = (now - dt(now.year, bir.month, bir.day)).days < 0

        return dt.now().year - int(self._birth[:4]) - beforebirth

    @property

    def birth(self):

        return dt.strptime(self._birth, '%Y%m%d').strftime('%Y-%m-%d')

def alignment(str1, space, align = 'left'):

    length = len(str1.encode('gb2312'))

    space = space - length if space >=length else 0

    if align == 'left':

        str1 = str1 + ' ' * space

    elif align == 'right':

        str1 = ' '* space +str1

    elif align == 'center':

        str1 = ' ' * (space //2) +str1 + ' '* (space - space // 2)

    return str1

    

def main():

    fname = 'customer.txt'

    '''

    with open(fname, 'w') as f:

        f.write("""

        郑文杰 225122198611134730

        文萍 225122198912094740

        郑妈妈  225122590303476

        郑爸爸 225122560506471

        """)

    '''    

    newf = 'ourcustomers.txt'

    with open(fname) as f:

        s = f.readlines()

    L, newL = [re.split(r'\s+', i.strip()) for i in s], []

    for i in L:

        if len(i) == 2:

            g = Idcard(i[1])

            newL.append('{}{}{}'.format(

                alignment(i[0], 10), alignment(g.sex, 8), g.age))

    with open(newf, 'w') as f:

        f.write('\n'.join(newL))

    print('\n'.join(newL[:100]))

    print('Customer data has been write into {}'.format(newf))

if __name__ == '__main__':

    import doctest

    doctest.testmod()

    main()