Python全国计算机等级考试(2021)

目录

第二章Python语言基本语法元素

第三章 基本数据类型

第四章 程序的控制结构

第五章 函数和代码复用

第六章 组合数据类型

第七章 文件和数据格式化


第二章Python语言基本语法元素

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

N=eval(input("请输入一个整数N:"))
print(N**32)

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

str=input("请输入一句话:")
n=len(str)
for i in range(n):
       print(str[i])

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

print(eval(input("请输入一个合法算式:")))

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

num=eval(input("请输入一个小数:"))
print(int(num))

5.下面这段代码能够获得用户输入的一个整数N,计算并输出1到N相加的和。然而,这段代码存在多处语法错误,请指出错误所在并纠正。

n=eval(input("请输入整数N:"))
sum=0
for i in range(n):
       sum+=i+1
       print(n)
print("1到N求和结果:{}".format(sum))

第三章 基本数据类型

编程题

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

num=input('请输入一个整数:')
if len(num)<3:
       print('该整数无百位及以上的数字')
else:
       print(num[:-2])

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

str=input("请输入一个字符串:")
n=" ".join(str)
for i in n:
       print(i)

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

day=eval(input("请输入星期几的数字(1-7):"))
week=["星期一","星期二","星期三","星期四","星期五","星期六","星期日"]
print(week[day-1])

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

num=input("请输入任意一个5位数:")
if num[0]==num[4] and num[1]==num[3]:
       print("这个数字是回文数")
else:
       print("这个数字不是回文数")

或者

num=input("请输入任意自然数:")
n=num[::-1]
if num==n:
       print("这个数字是回文数")
else:
       print("这个数字不是回文数")

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

num=eval(input("请输入一个十进制整数:"))
print("十进制{0}转换为二进制数为{0:b},转换为八进制数为{0:o},\
转换为十六进制数为{0:x}".format(num,))

第四章 程序的控制结构

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

year=eval(input("请输入一个年份:"))
if year % 4 == 0 and year % 100 != 0:
       print("{}是闰年".format(year))
elif year % 400 == 0:
       print("{}是闰年".format(year))
else:
       print("{}不是闰年".format(year))

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

a=int(input("请输入第一个数:"))
b=int(input("请输入第二个数:"))
m=max(a,b)
n=min(a,b)
while m%n!=0:
       m,n=n,m%n
print("两个数字的最大公约数为{}".format(n))
print("两个数字的最小公倍数为{}".format(a*b/n))

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

str=input("请输入一行字符:")
m=n=o=p=0
for c in str:
       if "a"<=c<="z" or "A"<=c<="z":
              m+=1
       elif "0"<=c<="9":
              n+=1
       elif c==" ":
              o+=1
       else:
              p+=1
print("英文字符个数为{},数字字符个数为{},\
空格字符个数为{},其他字符个数为{}".format(m,n,o,p))

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

import random
targe=random.randint(1,1000)
count=0
while True:
       try:
              guess=eval(input("请输入一个整数:"))
       except:
              print("输入内容必须为整数")
              continue
       count+=1
       if guess>targe:
              print("猜大了")
       elif guess

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

import random
times=1000      #实验次数
guess_1_count=0              #改变的人猜中的次数
guess_2_count=0              #坚持的人猜中的次数
for i in range(times):
       car=random.randint(1,3)
       guess=random.randint(1,3)     
       if guess==car:                          #坚持选择的人始终选中的是车
              guess_2_count+=1
       if guess!=car:                          #改变选择的人能选中说明最开始选中的不是车
              guess_1_count+=1
     
print("坚持选择获胜的概率为{:.1%}".format(guess_2_count/times))
print("更换选择获胜的概率为{:.1%}".format(guess_1_count/times))

第五章 函数和代码复用

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

def isNum(x):
       try:
              x=eval(x)
              if type(x)==type(1) or type(x)==type(1.1) or type(x)==type(1+1j):
                     return True
              else:
                     return False
       except:
              return False
x=input("请输入一个字符串:")
print(isNum(x))

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

def isPrime(x):
       while True:
              try:
                     x=eval(x)
                     while type(x)!=int or x<=1:
                            x=eval(input("输入的不是大于1的整数!请重新输入:"))
                     if x==2:
                            return True
                     for i in range(2,x):
                            if  x%i==0:
                                   return False
                            else:
                                   return True
                            break
              except:
                     x=input("输入的不是大于1的整数!请重新输入:")
                     continue
x=input("请输入的一个大于1的整数:")
print(isPrime(x))

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

def num(str):
       a=b=c=d=0
       for i in str:
              if "0"<= i <="9":
                     a+=1
              elif "a"<= i <="z" or "A"<= i <="Z":
                     b+=1
              elif i==" ":
                     c+=1
              else:
                     d+=1
       print("数字{}个,字母{}个,空格{}个,其他字符{}个".format(a,b,c,d))
str=input("请输入一段字符串:")
num(str)

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

def n(x):
       for i in range(2,x):
              n=True
              for j in range(2,i):
                      if i%j==0:
                             n=False
              if n:
                     print(i,end=" ")
n(200)

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

def Fib(n):
       if n==1 or n==2:
              return 1
       else:
              return Fib(n-1)+Fib(n-2)
n=eval(input("请输入整数:"))
print(Fib(n))

第六章 组合数据类型

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

str=input("请输入一段字符串:")
a=str.lower()
b={}
for i in a:
       if "a"<=i<="z":
              b[i]=b.get(i,0)+1
c=list(b.items())
c.sort(key=lambda x:x[1],reverse=True)                    #对二维数据进行降序排列
for i in range(len(c)):
       character,count=c[i]
       print("{0:<3}{1:>5}".format(character,count))

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

str=input("请输入一段字符串:")
b={}
for i in str:
       b[i]=b.get(i,0)+1
c=list(b.items())
c.sort(key=lambda x:x[1],reverse=True)                             #对二维数据进行降序排列
for i in range(len(c)):
       character,count=c[i]
       print("{0:<3}{1:>5}".format(character,count))

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

import random
str=[]
password_list=[]
password=[]
for i in range(ord("a"),ord("z")):              #密码组成
       str.append(chr(i))
for i in range(ord("A"),ord("Z")):
       str.append(chr(i))
for i in range(10):
       str.append(i)
for i in range(10):                             #随机生成密码
       for j in range(8):
              j=random.randint(0,len(str)-1)
              password.append(str[j])
       password_list.append(password.copy())
       password.clear()
for i in password_list:                         #密码打印
       for j in i:
              print(j,end='')
       print(' ')

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

def repeat(list=[]):
      for i in range(len(list)):
             for j in range(len(list)):
                    if list[j]==list[i]:
                           return True
list=['e','d','f',1,4,5,6,6,4,3]
print(repeat(list))

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

def repeat(list=[]):
      set_list=set(list)
      if len(list)>len(set_list):
             return True
      else:
             return False
list=['e','d','f',1,4,5,6,6,4,3]
print(repeat(list))

第七章 文件和数据格式化

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

def repeatcount(text,a):
       text.lower()
       count=0
       for i in text:
              if i==a:
                     count+=1
       return count

def main(file):
       f=open(file,'r')
       text=f.read()
       f.close()
       return text

text=main("E:\\全国计算机二级考试\\书上练习\\file.txt")
a=input("请输入字符串:")
print("{}重复了{}次".format(a,repeatcount(text,a)))

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

def upper_lower(text):
       text_r=""
       for i in text:
              if 'a'<=i<='z':
                     text_r+=i.upper()
              else:
                     text_r+=i.lower()
       print(text_r)

def main(file):
       f=open(file,'r')
       text=f.read()
       f.close()
       return text

text=main("E:\\全国计算机二级考试\\书上练习\\file.txt")
upper_lower(text)

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

import random
def Matrix():
       matrix=""
       line=""
       for i in range(10):
              for j in range(10):
                     line+="{} ".format(random.randint(1,100))
              matrix+="{}\n".format(line)
              line=""
       return matrix
      
def output(a):
       a=Matrix()
       f=open("E:\\全国计算机二级考试\\书上练习\\matrix.csv","w")
       f.write(a.replace(" ",","))
       f.close

output(Matrix())

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

以下以6.5代码为例。

import keyword
kw=keyword.kwlist
other=["len","print","list","set"]
kw+=other
print(kw)
f=open("E:\\全国计算机二级考试\\书上练习\\习题6.5.py","r")
file=f.read()
print(file)
f.close
FILE=file.upper()
print(FILE)

for word in kw:
       if word.upper() in FILE:
              FILE=FILE.replace(word.upper(),word)
print(FILE)

f_new=open("E:\\全国计算机二级考试\\书上练习\\习题6.5 改.py","w")
f_new.write(FILE)
f_new.close()

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

def list_csv(file,list):
       f=open(file,"w")
       f.write(",".join(list)+"\n")
       f.close

def csv_list(file):
       f=open(file,"r")
       text=f.read().strip("\n").split(",")
       print(text)
       f.close

list=input("请输入任意字符串:")
list_csv("E:\\全国计算机二级考试\\书上练习\\7.5.csv",list)
csv_list("E:\\全国计算机二级考试\\书上练习\\7.5.csv")
       

你可能感兴趣的:(python)