美文网首页python3成长之旅PythonPython基础知识
全国计算机等级考试二级教程-Python语言程序设计(2018年

全国计算机等级考试二级教程-Python语言程序设计(2018年

作者: 巴尔扎克很忙 | 来源:发表于2018-12-05 21:40 被阅读15501次
Python教材

习题3-基本数据类型

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

i = input("请输入一个整数:")
print( i[:-2] )

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

i = input("请输入一个带空格的字符串:")
Is = i.split()
a = len(Is)
for i in range(a) :
    print(Is[i])

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

num = '1234567'
date = '一二三四五六七'

i = input("请输入任意数字1~7中的一个:")
if i in num:
    a = date[num.index(i)]

print("星期{}".format(a))

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

i = input("输入一个5位数字:")
a = i[::-1]
if a == i :
    print("恭喜,您输入的是回文数!")
else :
    print("很遗憾,您输入的不是回文数!")

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

i = eval(input("请输入一个十进制整数:"))
print("二进制:{:b}".format(i))
print("八进制:{:o}".format(i))
print("十六进制:{:x}".format(i))

习题4-程序的控制结构

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

i = eval(input("请输入一个年份:"))
if ((i % 4 == 0) and (i % 100 != 0)) or (i % 400 == 0) :
    print("闰年")
else :
    print("非闰年")

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

def gcd(a , b) :
    i = a % b
    if i == 0 :
        return b
    else :
        return gcd(b , i)
def main() :
    s1 = eval(input("请输入较大的数:"))
    s2 = eval(input("请输入较小的数:"))
    x = gcd(s1,s2)
    print("最大公约数:{},最小公倍数:{}".format(x , s1*s2/x))
main()

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

a = input("请输入一行字符:")
yw , sz , kg , qt = 0 , 0 , 0 , 0
for i in range(len(a)) :
    if a[i] in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTYUVWXYZ" :
        yw += 1
    elif a[i] in "0123456789" :
        sz += 1
    elif a[i] == " " :
        kg += 1
    else :
        qt += 1
print("英文字符:{},数字字符:{},空格字符:{},其他字符:{}".format(yw,sz,kg,qt))

4.猜数字游戏续。当用户输入的不是整数(如字母、浮点数等)时,程序会终止执行退出。改编题目1中的程序,当用户输入出错时给出“输入内容必须为整数!”的提示,并让用户重新输入。

import random
target = random.randint(1,1000)
count = 0
while True :
    try :
        guess = eval(input("请输入一个猜测的整数(1至1000):"))
    except :
        print("输入有误,程序已退出!")
        break
    count += 1
    if guess > target :
        print("猜大了!")
    elif guess < target :
        print("猜小了!")
    else :
        print("猜对了!好棒!~~~")
        print("此轮的猜测次数是:",count)
        break
while True :
    a = input("请输入一个年份:")
    if a.isdigit() :
        break
    else :
        print("输入内容必须为整数!")
b = eval(a)
if ((b % 4 == 0) and (b % 100 != 0)) or (b % 400 == 0) :
    print("闰年")
else :
    print("非闰年")

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

import random
x = random.randint(5000 , 10000)
change = 0
nochange = 0
for i in range(1 , x + 1) :
  a = random.randrange(1 , 4)
  b = random.randrange(1 , 4)
  if a == b :
    nochange = nochange + 1
  else :
    change = change + 1
print("不换,得到汽车的概率为{}".format(nochange / x))
print("换,得到汽车的概率为{}".format(change / x))

习题5-函数和代码复用

1.实现 isNum() 函数,参数为一个字符串。如果这个字符串属于整数、浮点数或者复数的表示,则返回 True,否则返回 False。

def isNum(i) :
    try:
        if type(eval(i)) == type(123) or\
           type(eval(i)) == type(12.3) or\
           type(eval(i)) == type(12.3+3j) :
            return True
    except :
        return False

def main() :
    i = input("请输入一个字符串:")
    print(isNum(i))
main()

2.实现 isPrime() 函数,参数为整数,要有异常处理。如果整数是质数,返回 True,否则返回 False。

def isPrime(mun) :
    while True : 
        try :
            if type(eval(mun)) != type(123) :
                mun = input("输入有误,请输入一个整数:")
            else :
                break
        except :
            mun = input("输入有误,请输入一个整数:")        
    n = eval(mun)
    if n == 1 :
        return False
    for i in range(2 , n) : 
        if n % i == 0 :
            return False
            break
    else : 
        return True

def main() :
    i = input("请输入一个整数:")
    print(isPrime(i))
main()

3.编写一个函数计算传入字符串中数字、字母、空格以及其他字符的个数。

def heFG(a) :
    sz , zm , kg , qt = 0 , 0 , 0 , 0
    for i in range(len(a)) :
        if a[i] in "0123456789" :
            sz += 1
        elif a[i] in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTYUVWXYZ" :
            zm += 1
        elif a[i] == " " :
            kg += 1
        else :
            qt += 1
    print("数字字符:{},字母字符:{},空格字符:{},其他字符:{}".format(sz,zm,kg,qt))
    
def main() :
    a = input("请输入一行字符串:")
    heFG(a)
main()

4.编写一个函数,打印200以内的所有素数,以空格分割。

def suSHU(n) :
    Is = ['2']
    a = eval(n)
    if a == 1 :
        print("1以内的素数是:(None)")
    elif a == 2 :
        print("2以内的素数是:2")
    else :
        for mun in range(3,a+1) :
            for i in range(2,mun) :
                if mun % i == 0 :
                    break
            else :
                Is.append(str(mun))
        m = " ".join(Is)
        print("{}以内的素数是:{}".format(n,m))
def main() :
    a = input("请输入一个整数以确定素数范围:")
    suSHU(a)
main()

5.编写一个函数,参数为一个整数 n。利用递归获取斐波那契数列中的第 n 个数并返回。

def guiFEI(n) :
    if n == 1 :
        return 1
    elif n == 2 :
        return 1
    else :
        return guiFEI(n-1) + guiFEI(n-2)
def main() :
    n = eval(input("请输入整数n:"))
    print("斐波那契数列中第{}个数为:{}".format(n,guiFEI(n)))
main()

习题6-组合数据类型

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

txt = input("请输入一段英文文本:")
txt = txt.lower()
counts = {}
for i in txt:
    if i in 'abcdefghijklmnopqrstuvwxyz':
        counts[i] = counts.get(i, 0) + 1
ls = list(counts.items())
ls.sort(key=lambda x:x[1], reverse=True) 
#指定列表中那一列作为排序的列
for i in range(len(counts)):
    word, count = ls[i]
    print ("{0:<10}{1:>5}".format(word, count))

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

txt = input("请输入一段中文文本:")
counts = {}
for i in txt:
    counts[i] = counts.get(i, 0) + 1
ls = list(counts.items())
ls.sort(key=lambda x:x[1], reverse=True)
#指定列表中那一列作为排序的列
for i in range(len(counts)):
    word, count = ls[i]
    print ("{0:<10}{1:>5}".format(word, count))

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

import random
txt = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
ls = list(txt)
for i in range(10):
    a = ""
    for i in range(8):
        a = random.choice(ls) + a
    print(a)

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

def repeat(txt):
    ls = eval(txt)
    counts = {}
    for i in ls:
        counts[i] = counts.get(i, 0) + 1
        if counts[i] > 1:
            return True
def main():
    txt = input('请输入一个列表:')
    print(repeat(txt))
main()

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

def repeat(txt):
    ls = eval(txt)
    st = set(ls)
    if len(ls) != len(st):
        return True
def main():
    txt = input('请输入一个列表:')
    print(repeat(txt))
main()

习题7-文件的数据格式化

1.输入一个文件和一个字符,统计该字符在文件中出现的次数。

def countStr(fname, a_str, count):
    file = fname + '.txt'
    fo = open(file, 'r', encoding='utf-8')
    for line in fo:
    # 逐行读入,逐行处理
        for i in line:
            if i == a_str:
                count = count + 1
    print('“{}”字符在《{}》中出现的的次数是:{}次'.format(a_str, fname, count))

def main():
    fname = input('请输入txt文件名称:')
    a_str = input('请输入一个字符:')
    count = 0
    countStr(fname, a_str, count)

main()

2.假设有一个英文文本文件,编写一个程序读取其内容并将里面的大写字母变成小写字母,小写字母变成大写字母。

def SwitchTxt(fname):
    file = fname + '.txt'
    tem_fo = open(file, 'r', encoding='utf-8')
    new_fo = open('{}转化后.txt'.format(fname), 'w', encoding='utf-8')
    for line in tem_fo:
        for i in line:
            if i in 'abvdefghijklmnopqrstuvwxyz':
                i = i.upper()
            elif i in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ':
                i = i.lower()
            new_fo.write(i)
    tem_fo.close()
    new_fo.close()

def main():
    fname = input('请输入英文文本txt的名称:')
    SwitchTxt(fname)

main()

3.编写一个程序,生成一个10x10的随机矩阵并保存为文件(空格分隔行向量、换行分隔列向量),在写程序将刚才保存的矩阵文件另存为CSV格式,用Excel或文本编辑器打开看看结果对不对。

import random
def save_txt(low, high, file_txt):
    file = open('{}.txt'.format(file_txt), 'w', encoding='utf-8')
    for line in range(10):
        a = ''
        for row in range(10):
            b = str(random.randrange(start=low, stop=high))
            a = a + b + ' '
        file.write(a + '\n')
    file.close()
    print('已成功保存 {}.txt 文件!'.format(file_txt))

def save_csv(file_txt, file_csv):
    file_tem = open('{}.txt'.format(file_txt), 'r', encoding='utf-8')
    file_new = open('{}.csv'.format(file_csv), 'w', encoding='utf-8')
    for line in file_tem:
        a = line.replace(' ', ',')
        file_new.write(a)
    file_tem.close()
    file_new.close()
    print('已成功保存 {}.csv 文件!'.format(file_csv))
    
def main():
    low, high = eval(input('请输入随机数的取值范围<low , high>:'))
    file_txt = input('请将要保存的txt文件命名:')
    save_txt(low, high, file_txt)
    file_csv = input('请将要保存的csv文件命名:')
    save_csv(file_txt, file_csv)

main()

# 使用numpy库生成随机矩阵
mport numpy as np
def save_txt(low, high, file_txt):
    # np.random.seed(1)
    a = np.random.randint(low, high, (10,10))
    np.savetxt('{}.txt'.format(file_txt), a, fmt='%d')
    print('已成功保存 {}.txt 文件!'.format(file_txt))

def save_csv(file_txt, file_csv):
    b = np.loadtxt('{}.txt'.format(file_txt))
    np.savetxt('{}.csv'.format(file_csv), b, fmt='%d', delimiter=',')
    print('已成功保存 {}.csv 文件!'.format(file_csv))

def main():
    low, high = eval(input('请输入随机数的取值范围<low , high>:'))
    file_txt = input('请将要保存的txt文件命名:')
    save_txt(low, high, file_txt)
    file_csv = input('请将要保存的csv文件命名:')
    save_csv(file_txt, file_csv)

main()

4.编写一个程序,读取一个Python源代码文件,将文件中所有除保留字外的小写字母替换成大写字母,生成后的文件要能够被Python解释器正确执行。

  • 由于Python源文件对缩进有要求,且大小写敏感
  • 故先将文件保留字全部替换成其他字符,保存为字典
  • 再将源文件全部变为大写
  • 最后利用该字典,将替换后的保留字逐个换回来
  • p.s:由于python的大小写敏感,若源文件引入第三方库,此方法生成的Python文件解释器不能正确执行
  • p.p.s:由于笔者初学Python,暂时没能解决这个问题,如果大家有更好方法欢迎交流,共同学习进步~
keep_words =['and', 'as', 'assert', 'break', 'class', 'continue',
            'def', 'del', 'elif', 'else', 'except', 'finally',
            'for', 'from', 'global', 'if', 'import', 'in', 'is',
            'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise',
            'return', 'try', 'while', 'time', 'with', 'yield', 'True',
            'False', 'None']


def upper_word(fname_tem, num, keep):
    file_tem = open('{}.py'.format(format(fname_tem)), 'r', encoding='utf-8')
    file_new = open('{}_changed.py'.format(format(fname_tem)), 'w', encoding='utf-8')
    
    # 逐行读取,逐行处理,逐行写入
    for line in file_tem:
        for word in keep_words:
            if word in line:
                num = num + 1
                keep['编号%s'%str(num)] = word
                line = line.replace(word, '编号%s'%str(num))
            else:
                continue
        line = line.upper()
        for key in keep.keys():
            if key in line:
                line = line.replace(key, keep[key])
        file_new.write(line)
        
    file_tem.close()
    file_new.close()


def main():
    num = 100
    keep = {}
    fname_tem = input('请输入Python源代码文件名:')
    upper_word(fname_tem, num, keep)

main()

5.编写一个程序,要求能够将元素为任意Python支持的类型(包括含有半角逗号的字符串)的列表转储为CSV,并能够重新正确解析为列表。

def save_csv(ls, fname):
    # 向列表中逐个添加元素
    value = input('请向列表总添加一个元素:')
    while value != '':
        ls.append(value)
        value = input('请向列表总添加一个元素:')
    print('您输入的列表为:{}'.format(ls))
    
    # 若元素中有半角逗号,将其替换成点
    for i in range(len(ls)):
        if ',' in ls[i]:
            ls[i] = ls[i].replace(',', '.')

    file_csv = open('{}.csv'.format(fname), 'w', encoding='utf-8')
    file_csv.write(','.join(ls) + '\n')
    file_csv.close()
    print('恭喜!已成功保存<{}.csv>文件!'.format(fname))


def read_csv(lt, fname):
    f = open('{}.csv'.format(fname), 'r', encoding='utf-8')
    lt = f.read().strip('\n').split(',')
    
    # 将替换后的点换成半角逗号
    for i in range(len(lt)):
        if '.' in lt[i]:
            lt[i] = lt[i].replace('.', ',')
    f.close()
    print('<{}.csv>文件读取中...'.format(fname))
    print(lt)


def main():
    ls = []
    fname = input('请将列表文件命名:')
    save_csv(ls, fname)
    lt = []
    read_csv(lt,fname)

main()



1.此帖仅为学习笔记,答案仅供参考
2.有错误之处,欢迎指出,也欢迎学习交流
3.不定期更新(然而并没有人想看) 心塞.jpg (´-ωก`)

巴尔扎克很忙.jpg

相关文章

网友评论

    本文标题:全国计算机等级考试二级教程-Python语言程序设计(2018年

    本文链接:https://www.haomeiwen.com/subject/uslgcqtx.html