【计算机二级Python】主观题(总结版)

二级备赛系列博文


一、小知识什锦

  • format相关的知识点
    • format的小细节:前面的格式控制符中一定要加引号
    • 注意format是先填充、对齐然后宽度,顺序不能乱的!
    • format带千分位分隔的效果,n = input() print("{:->20,}".format(eval(n)))
a = "python"
b = "="
c = ">"
print("{0:{1}{3}{2}}".format(a, b, 25, c)) #就相当于print("{0:=>25}".format(a))
  • 列表[]
    • ls = [3.5, "Python", [10, "LIST"], 3.6]然后print(ls[2][ –1][1])的运行结果是L

想成三维数组的索引

  • 字典{}

    • 对字典中元素统计的语句:d[word] = d.get(word, 0) + 1
    • d.items()返回字典中的所有键值对信息,返回结果是Python的一种内部数据类型dict_items。
  • 字符串

    • str.replace(old, new) 返回字符串str的副本,所有old子串被替换为new
    • str.strip(chars)从字符串str中去掉在其左侧和右侧chars中列出的字符。chars是一个字符串,其中出现的每个字符都会被去掉。
  • turtle相关

    • turtle库的fd函数绘制直线,seth函数用来设置对应于角度坐标系的绝对值方向(正值为逆时针);left函数用来在当前行进方向上向左转向。
    • 注意turtle开始就是自西向东的,向左还是向右是根据海龟目前的朝向而言的
    • turtle.circle (radius, extent=None)根据radius绘制extent角度的弧形
  • random相关

    • randint是生成一个[a,b]之间的整数,注意区间都是闭的。
  • time相关

    • time.strftime('%Y-%m-%d %H:%M:%S', startTime)time.strptime(timeString, "%Y-%m-%d %H:%M:%S")是一个刚好相反的过程,记住strftime是生成一个标准的格式即可
  • pyinstaller相关

    • 使用-i参数增加对打包文件图标的引入,使用-F参数用来生成单一的打包后可执行文件程序
    • pyinstaller -i a.ico -F a.py
  • jieba相关

    • jieba库的分词原理是利用一个中文词库,将待分词的内容与分词词库的内容进行对比,通过图结构和动态规划算法找到最大概率的词组
  • 其他

    • print( 0.1 + 0.2 == 0.3)的输出是False,原因是浮点数间的计算存在不确定尾数,不是bug。因为print(0.1 + 0.2)输出0.30000000000000004

二、通用代码


  • 统计字符串中的某字符个数
m = s.count(',') + s.count('?') #其中的标点符号个数
n = len(s) - m #其中的汉字个数
  • 统计N~N+100的所有奇数和
N = input("请输入一个整数: ")

sum = 0
for i in range(eval(N), eval(N)+100): #注意是eval(N)+100
    if (i % 2) != 0:
        sum += i
print(sum)

  • 统计列表中元素出现次数
ls = [...]
for word in ls:
    d[word] = d.get(word, 0) + 1
for j in d:
    print("{}:{}".format(j, d[j]))

  • 输入整数
def getInput():
    try:
        txt = input("")
        if eval(txt) != int(txt):
            print("")
    except:
        return getInput()
    return eval(txt)
print(getInput())

  • 输入字符串,宽度15,居中,不足15填充=,超过15只要前15个
  • [分析] 主要考察format的,①、关于=^前后位置,必须是是先填充然后居中②、当大于指定宽度的时候,format是全部输出的,所以我们手动截取前15个元素
s = input()
print("{:=^15}".format(s[0:15]))
  • 绘制三角形
  • [亮点]使用*,而不是+
import turtle as t
for i in range(3):
    t.seth(i*120) 
    t.fd(200)

  • 四片花瓣的绘制
import turtle as t
for i in range(4):
    t.seth(90 * (i + 1))
    #90,180,270,360
    t.circle(200,90)
    #-90,0,90,180
    t.seth(-90 + i * 90)
    t.circle(200,90)
  • 字典一个应用
  • 【亮点】注意添加、删除和添加的方法
d = {'数学':101, '语文':202, '英语':'203', '物理':204, '生物':206}
d['化学'] = 205
d['数学'] = 201
del d['生物']
for key in d:
    print("{}:{}".format(d[key], key))
  • 累加键盘输入且用逗号分隔的若干数字
    • 字符串split方法的使用,最后产生的是一个列表
    • eval将字符串变成表达式
n = input("")
nums = n.split(",")
s = 0
for i in nums:
    s += eval(i)
print(s)
  • 求最大公约数
    • 首先调置a和b的顺序,使得a > b,r的初值置为1
    • 当r!=0是就辗转相除
    • r = a % b
    • a = b
    • b = r;
def GreatCommonDivisor(a,b):
    if a > b:
        a,b = b,a
    r = 1
    while r != 0:
        r = a % b
        a = b
        b = r
    return a
m = eval(input())
n = eval(input())
print(GreatCommonDivisor(m, n))
  • 去除一个列表中的全部素数
    • 所谓素数是除1和它本身,无其他公因子的数…
def is_prime(n):
    for i in range(2, n):
        if n % i == 0:
            return False
    return True#此处可为多行函数定义代码
ls = [23,45,78,87,11,67,89,13,243,56,67,311,431,111,141]
for i in ls.copy():
    if is_prime(i)== True:
        ls.remove(i)   #此处为一行代码
print(len(ls))

易错的…

1、

x=10
y=3
print(divmod(x,y))

输出

(3,1) #注意是带括号的

2、

a = 10.99
print(complex(a))

输出

(10.99+0j) #注意:是带括号的

3、

s = "Alice"
print(s[::–1])

输出

ecilA

4、
注意: Python中字符串切片方法 字符串[开始索引:结束索引:步长]

5、

for i in range(6):
    print(chr(ord(9801)+i),end="")

系统输出会报错

6、

for i in range(12):
    print(chr(ord("♈")+i),end="")

输出:

♈♉♊♋♌♍♎♏♐♑♒♓

7、

s1 = "The python language is a scripting language."
s1.replace('scripting','general')
print(s1)

输出是

The python language is a scripting language.

8、
但是这个程序:

s1 = "The python language is a scripting language."
s2 = s1.replace('scripting','general')
print(s2)

输出是:

The python language is a general language.

9、

s = "The python language is a cross platform language."
print(s.find('language',30))

改程序的功能是输出language的出现的最小序号,从下标为30开始找,所以输出是:

40

10、

chr(13).isprintable() #输出False,13对应的ascii是转义字符,转义字符不可打印

11、

isinstance(255,int)
#Python 中的isinstance函数,isinstance是Python中的一个内建函数。是用来判断一个对象的变量类型。
#所以255是整型,输出True

12、

a = "alex"
b = a.capitalize()
print(a,end=",")
print(b)
#Python capitalize()将字符串的第一个字母变成大写,其他字母变小写。对于 8 位字节编码需要根据本地环境。
#所以输出alex,Alex

13、
在这里插入图片描述

14、
在这里插入图片描述

15、
在这里插入图片描述
16、
在这里插入图片描述
注意小数是无穷。

17、
在这里插入图片描述
18、
在这里插入图片描述

19、
在这里插入图片描述
20、
在这里插入图片描述
在这里插入图片描述
21、
在这里插入图片描述

22、
在这里插入图片描述
具体是什么啥类型是根据输入参数决定的。

23、
在这里插入图片描述
基本类型的局部变量是不能被改变全局变量的

在这里插入图片描述

24、
在这里插入图片描述
注意C选项输出是列表,列表输出需要加 [ ]

参数调用的几种类型:
按位置参数调用
按可变参数调用
参数按照名称传递

在这里插入图片描述

25、
for循环另一种新奇用法:
在这里插入图片描述
for 循环还可以这样用

l = [x for x in range(0, 10)]

26、
在这里插入图片描述
在这里插入图片描述
注意最后必须进行一次list转换!

27、
在这里插入图片描述
28、
在这里插入图片描述
29、
列表倒序输出的一个小技巧 [::-1]

在这里插入图片描述
在这里插入图片描述
这个除了要注意倒序输出,还要注意输入元组,输出也是元组(使用小括号)

30、不能生成空字典的是:
在这里插入图片描述

31、
在这里插入图片描述

32、
在这里插入图片描述
33、
在这里插入图片描述
34、
在这里插入图片描述
35、
在这里插入图片描述
36、
在这里插入图片描述
在这里插入图片描述
字典中的键不能重复

37、
在这里插入图片描述
zip也不失为一种创建字典的好方法

38、
在这里插入图片描述
当文件以文本文件方式打开时,读写按照字符串方式
当文件以二进制文件方式打开时,读写按照字节流方式

39
在这里插入图片描述
40、
在这里插入图片描述
41、
在这里插入图片描述
在这里插入图片描述
是有默认值的

42、
在这里插入图片描述
43、
在这里插入图片描述
44、
在这里插入图片描述
在这里插入图片描述
45、
在这里插入图片描述
join之后的列表就变成了一个字符串

46、
在这里插入图片描述
47、
在这里插入图片描述
48、
在这里插入图片描述
列表可以是1/2/多维,字典是高维的

49、
在这里插入图片描述
50、
在这里插入图片描述

51、
在这里插入图片描述


三、实例

实例1、《论语文本处理》

fi = open("论语-网络版.txt", "r", encoding = "utf-8")#注意encoding是不在引号里面的
fo = open("论文-clay.txt",'w')
wflag = False
for line in fi:
	if "【" in line:
		wflag = False
	if "【原文】" in line:
		wflag = True
		continue
	if wflag == True:
		for i in range(0,25):
			for j in range(0, 25):
				line = line.replace("{}·{}".format(i, j), "**")
		for i in range(0,10):
			line = line.replace("*{}".format(i), "");
		for j in range(0,10):
			line = line.replace("{}*".format(j), "")#注意是format(j)
		line = line.replace("*", "")
		fo.write(line)
fi.close()
fo.close()

fi = open("论文-clay.txt", "r")
fo = open("论文-clay-去注释.txt", "w")
for line in fi:
        for i in range(1, 23):
                line = line.replace("({})".format(i), "")
        fo.write(line)
fi.close()
fo.close()

实例2、天龙八部中的统计

  • 对其中的汉字和标点统计(不包括空格和换行)
fi = open("天龙八部-网络版.txt", "r", encoding = "utf-8")
fo = open("统计.txt", "w", encoding='utf-8')#为什么这里必须加 encoding='utf-8'呢?
txt = fi.read()
d = {}
for c in txt:
    d[c] = d.get(c, 0) + 1
del d[' ']
del d['\n']
ls = []
for key in d:
    ls.append("{}:{}".format(key, d[key]))
fo.write(",".join(ls))
fi.close()
fo.close()
  • 对其中的中文词语进行统计

大体类似上一个,不过加入了jieba进行切分

import jieba
fi = open("天龙八部-网络版.txt", "r", encoding = "utf-8")
fo = open("统计分词.txt", "w", encoding='utf-8')
txt = fi.read()
words = jieba.lcut(txt)
d = {}
for w in words:
    d[w] = d.get(w, 0) + 1
del d[' ']
del d['\n']
ls = []
for key in d:
    ls.append("{}:{}".format(key, d[key]))
fo.write(",".join(ls))
fi.close()
fo.close()

实例3、生成随机密码

import random
random.seed(0x1010)
s = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&*"
ls = []
excludes = ""
while len(ls) < 10:
    pwd = ""
    for i in range(10):
        pwd += s[random.randint(0, len(s)-1)]
    if pwd[0] in excludes:#密码的首字符是不一样的
        continue
    else:
        ls.append(pwd)
        excludes += pwd[0]

print("\n".join(ls))

fo = open("随机密码.txt", "w")
fo.write("\n".join(ls))
fo.close()

实例4、词频统计

  • 列出位于前100个的词语
names = ["命运", "寻梦"]
for name in names:
    fi = open(name+"-网络版.txt", "r", encoding="utf-8")
    fo = open(name+"-字符统计.txt", "w", encoding="utf-8")
    txt = fi.read()
    d = {}
    for c in txt:
        d[c] = d.get(c, 0) + 1
    del d['\n']
    ls = list(d.items())
    ls.sort(key=lambda x:x[1], reverse=True)
    for i in range(100):
        ls[i] = "{}:{}".format(ls[i][0], ls[i][1])
    fo.write(",".join(ls[:100]))
    fi.close()
    fo.close()
  • 在上一个词频统计基础上,再统计两个文件中相同字符
def getList(name):
    f = open(name+"-字符统计.txt", "r", encoding="utf-8")
    words = f.read().split(',')
    for i in range(len(words)):
        words[i] = words[i].split(':')[0]
    f.close()
    return words
def main():
    fo = open("相同字符.txt", "w")
    ls1 = getList("命运")
    ls2 = getList("寻梦")
    ls3 = []
    for c in ls1:
        if c in ls2:
            ls3.append(c)
    fo.write(",".join(ls3))
    fo.close()
main()

实例5、星座输出

  • 循环读取星座,并输出对应的日期范围以及字符对应形式
#读入CSV格式数据到列表中
fo = open("SunSign.csv","r", encoding='utf-8')
ls = []
for line in fo:
    line = line.replace("\n","")
    ls.append(line.split(","))
fo.close()

while True:
    InputStr = input() # 请输入星座名称,例如双子座
    InputStr.strip()
    flag = False
    if InputStr == 'exit':
        break
    for line in ls:
        if InputStr == line[0]:
             print("{}座的生日位于{}-{}之间。".format(chr(eval(line[3])),line[1],line[2]))
             flag = True
    if flag == False:
        print("输入星座名称有误!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ReCclay

如果觉得不错,不妨请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值