- 《笑傲江湖》是金庸的重要武侠作品之一。这里给出一个《笑傲江湖》的网络版本,
- 文件名为“笑傲江湖-网络版.txt”。
问题1:请编写程序,统计该文件中出现的所有中文字符及标点符号的数量,每个字符及数量之间用冒号:分隔,
例如“笑:1024”,将所有字符及数量的对应采用逗号分隔,以CSV文件格式保存到“笑傲江湖-字符统计.txt”文件中。
注意,统计字符不包括空格和回车。
问题2:请编写程序,统计“笑傲江湖-网络版.txt”中出现在引号内所有字符占文本总字符的比例,
采用如下方式打印输出:
用程序运行结果的真实数字替换上述示例中数字,均保留整数,字符串中标点符号采用中文字符。
输出格式
问题一输出:
笑:1024, 傲:2048, 江:128, 湖:64
(略)
问题二输出:
占总字符比例:20%。
问题1参看代码
fi = open("笑傲江湖-网络版.txt", "r", encoding='utf-8') fo = open("笑傲江湖-字符统计.txt", "w", encoding='utf-8') txt = fi.read() d = {} for c in txt: d[c] = d.get(c, 0) + 1 del d[' '] del d[' '] ls = [] for key in d: ls.append("{}:{}".format(key, d[key])) fo.write(",".join(ls)) fi.close() fo.close()
问题2参考代码
fi = open("笑傲江湖-网络版.txt", "r", encoding='utf-8') txt = fi.read() cnt = 0 flag = False for c in txt: if c == "“": flag = True continue if c == "”": flag = False if flag: cnt += 1 print("占总字符比例:{:.0%}。".format(cnt/len(txt))) fi.close()
- 《射雕英雄传》是金庸的重要武侠作品之一。这里给出一个《射雕英雄传》的网络版本,
- 文件名为“射雕英雄传-网络版.txt”。
请编写程序,统计该文件出现的所有中文词语及出现次数(不要求输出),
并输出按照出现次数最多的8个词语,采用如下方式打印输出。
《射雕英雄传》下载
输出格式
词语1,词语2,词语3,词语4,词语5,词语6,词语7,词语8
参考代码
import jieba fi = open("射雕英雄传-网络版.txt", "r", encoding='utf-8') txt = fi.read() fi.close() ls = jieba.lcut(txt) d = {} for w in ls: d[w] = d.get(w, 0) + 1 for x in " ,。!“”:": del d[x] rst = [] for i in range(8): mx = 0 mxj = 0 for j in d: if d[j] > mx: mx = d[j] mxj = j rst.append(mxj) del d[mxj] print(",".join(rst))
- 《侠客行》是金庸的重要武侠作品之一,主要叙述一个懵懂少年石破天的江湖经历。
- 这里给出一个《侠客行》的网络版本,文件名为“侠客行-网络版.txt”。
基础中文字符的Unicode编码范围是[0x4e00,0x9fa5],请统计给定文本中存在多少该范围内的
基础中文字符以及每个字符的出现次数。以如下模式(CSV格式)保存在“侠客行-字符统计.txt”文件中。
示例输出中括号内是对应字符的十六进制Unicode编码形式,冒号后是出现次数,逗号两侧无空格。
《侠客行》下载
输出格式
侠(0x4fa0):888, 客(0x5ba2):666, 行(0x884c):111
(略)
参考代码
fi = open("侠客行-网络版.txt", "r", encoding='utf-8') fo = open("侠客行-字符统计.txt", "w", encoding='utf-8') txt = fi.read() d = {} for c in txt: if 0x4e00 <= ord(c) <= 0x9fa5: d[c] = d.get(c, 0) + 1 ls = [] for key in d: ls.append("{}(0x{:x}):{}".format(key, ord(key),d[key])) fo.write(",".join(ls)) fi.close() fo.close()
- 文件 sweb.html 保存了一个网页的源代码,其中,“href=”引导后面会有一个URL链接,
- 例如:href="http://news.sina.com.cn/feedback/post.html",其中,
- 有一种链接前后都有空格,且双引号内以“http://”开头。
请编写程序,解析这个文件,提取出现符合上述特征的URL链接,每个链接一行,保存到“text-urls.txt”文件中,
格式如下:
sweb.html 下载
输出格式
URL1
URL2
(略)
参考代码
fi = open("sweb.html", "r", encoding='utf-8') fo = open("text-urls.txt", "w", encoding='utf-8') txt = fi.read() ls = txt.split(" ") urls = [] for item in ls: if item[:5]=="href=" and item[6:13]=="http://": x = item.find(">",5) if x == -1: urls.append(item[6:-1]) else: urls.append(item[6:x-len(item)-1]) for item in urls: fo.write(item +" ") fi.close() fo.close()
- draw.py 是一个 turtle 绘图的 Python 程序,内部采用了 import turtle 模式引入 turtle 库。
- 请编写程序,以该文件为输入,修改源代码,输出对应的 import turtle as t 模式源代码,
- 名称为 draw2.py,要求 draw2.py 运行结果与 draw.py 一致。
draw.py 下载
输出格式
输出对应的 import turtle as t 模式源代码,名称为 draw2.py
参考代码
fi = open("draw.py", "r", encoding='utf-8') fo = open("draw2.py", "w", encoding='utf-8') txt = fi.read() txt = txt.replace("turtle", "t") txt = txt.replace("import t", "import turtle as t") fo.write(txt) fi.close() fo.close()
- 恺撒密码是古罗马恺撒大帝用来对军事情报进行加密的算法,
- 它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,
- 即循环左移3位,对应关系如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
基础中文字符的Unicode编码范围是[0x4e00,0x9fa5],共20902个字符。请以10451位循环移位数量,
编写中文文本的类恺撒密码加解密方法。
原文字符P,其密文字符C满足如下条件:
C = ( P + 10451 ) mod 20902
解密与加密方法一致,满足:
P = ( C + 10451 ) mod 20902
标点符号、英文字母不加密。
输入格式
输入一行包含中文的文本
输出格式
输出一段加密后的文本
输入输出示例
输入 | 输出 | |
示例 1 |
|
|
参考代码
s = input() d ={} c = 0x4e00 for i in range(20902): d[chr(i+c)] = chr((i+10451) % 20902 + c) print("".join([d.get(c,c) for c in s]))
- 《神雕侠侣》是金庸先生在武侠小说创作上的一个里程碑,叙述杨过与小龙女之间的故事。
- 这里给出《神雕侠侣》的网络版本,文件名为“神雕侠侣-网络版.txt”。
《神雕侠侣》中出现了很多人物,这里给出 6 个人物名字:杨过、小龙女、李莫愁、裘千尺、郭靖、黄蓉。
统计人物之间的关联关系,定义一种“亲和度”如下:如果某名字后的 100 个词语出现另外任何一个人名,
则该名字亲和度加1,如果之后不存在 100 个词语则停止检查。
《神雕侠侣》下载
输出格式
请输出每个名字的亲和度,采用“人名-亲和度”形式,亲和度之间采用逗号分隔,以CSV格式输出,保存文件名为“神雕侠侣-人名亲和度.txt”如下:
杨过-小龙女:1024, 杨过-李莫愁:20,(略), 小龙女-杨过: 2014
(略)
参考代码
import jieba fi = open("神雕侠侣-网络版.txt", "r", encoding='utf-8') fo = open("神雕侠侣-人名亲和度.txt", "w", encoding='utf-8') names = ["杨过", "小龙女", "李莫愁", "裘千尺", "郭靖", "黄蓉"] d = {} for item1 in names: for item2 in names: if item1 != item2: d[item1 + "-" + item2] = 0 txt = fi.read() ls = jieba.lcut(txt) for i in range(len(ls)-100): if ls[i] in names: for j in range(1,101): if ls[i+j]!=ls[i] and (ls[i+j] in names): d[ls[i]+'-'+ls[i+j]] += 1 break ols = [] for key in d: ols.append("{}:{}".format(key, d[key])) fo.write(",".join(ols)) #fo.write(", ".join(ols)) fi.close() fo.close()
- 1949年4月23日,中国人民解放军午夜解放南京,
- 毛主席在清晨获得消息后写下《七律 人民解放军占领南京》,全文如下:
七律 人民解放军占领南京
钟山风雨起苍黄,百万雄师过大江。虎踞龙盘今胜昔,天翻地覆慨而慷。
宜将剩勇追穷寇,不可沽名学霸王。天若有情天亦老,人间正道是沧桑。
问题1:这是一段由标点符号分隔的文本,请编写程序,以标点符号为分隔,将这段文本转换为诗词风格。
问题2:编写程序,以每半句为单位,保留标点符号为原顺序及位置。
输出格式
问题一输出:
每行30个字符,诗词居中,每半句一行,去掉所有标点。输出到文件“七律.txt”。
问题二输出:
输出全文的翻转形式。
人间正道是沧桑,天若有情天亦老。(略)
问题1参考代码
s = "钟山风雨起苍黄,百万雄师过大江。 虎踞龙盘今胜昔,天翻地覆慨而慷。 宜将剩勇追穷寇,不可沽名学霸王。 天若有情天亦老,人间正道是沧桑。" lines = "" for i in range(0,len(s),8): lines += s[i:i+7].center(30) +' ' print(lines) fo = open("七律.txt", "w") fo.write(lines) fo.close()
问题2参考代码
s = "钟山风雨起苍黄,百万雄师过大江。 虎踞龙盘今胜昔,天翻地覆慨而慷。 宜将剩勇追穷寇,不可沽名学霸王。 天若有情天亦老,人间正道是沧桑。" ls = [] for i in range(0,len(s),8): ls.append(s[i:i+7]) ls.reverse() n = 0 for item in ls: n = n + 1 if n%2 !=0 : print(item,end=",") else: print(item,end="。 ")
- 这里有一个中文文本片段:“今天北京有个好天气,大家一起去爬山。”
- 该句子分上下两部分,以逗号和句号分隔。请对该句子进行分词,并以8为随机种子,
- 在上下半句分别重新排列组合词语,并组合输出10种不重复的可能。
输出格式
上下半句词语不交叉,每个可能的组合单行输出,存储到“句子组合.txt”文件中,格式如下:
北京今天有个好天气,一起大家去爬山。
有个好天气今天北京,一起大家爬山去。
(略)
参考代码
import jieba import random s = "今天北京有个好天气,大家一起去爬山。" k = s.find(',') s1 = jieba.lcut(s[0:k]) s2 = jieba.lcut(s[k+1:-1]) random.seed(8) lines = [] while True: line = "" random.shuffle(s1) random.shuffle(s2) for item in s1: line += item line += "," for item in s2: line += item line += "。" if line in lines: continue else: lines.append(line) if len(lines) == 10: break f = open("句子组合.txt", "w") f.write(" ".join(lines)) f.close()
- 大胆预测 2018 年至 2020 年我国五个城市的房产价格走势如下所示,同时保存为“price2020.csv”文件。
- 其中,2018/2019/2020 年所列出的数值为当前年份与前一年份的涨跌比。例如,
- 2018 列数据是预测 2018 年房价以 2017 年价格为基数(100)的比值,
- 2019 列数据是预测 2019 年房价以 2018 年价格为基数(100)的比值,
- 2020 列数据是预测 2020 年房价以 2019 年价格为基数(100)的比值。
城市 2018 2019 2020
北京 112 130 140
上海 123 140 121
广州 99 95 130
深圳 101 129 94
沈阳 93 92 87
请编写程序,以 2017 年为基数,预测 2018/2019/2020 年房价涨跌比,生成一个类似文件,
名称为“price2020a2017.txt”,保留整数。
文件下载
输出格式
生成文件
参考代码
fi = open("price2020.csv","r",encoding ="utf-8") fo = open("price2020a2017.txt","w",encoding="utf-8") ls = [] for line in fi: line = line.replace(" ", "") ls.append(line.split(",")) for i in range(1,len(ls)): for j in range(1,len(ls[i])): if ls[i][j].isnumeric(): if j == 1: base = 100 else: base = float(ls[i][j-1]) ls[i][j]= "{:.0f}".format(base * float(ls[i][j])/100) for row in ls: fo.write(",".join(row) + " ") fi.close() fo.close()
- 《论语》是儒家学派的经典著作之一,主要记录了孔子及其弟子的言行。网络上有很多《论语》文本版本。
- 这里给出了一个版本,文件名称为“论语-网络版.txt”,其内容采用如下格式组织:
【原文】
1.11子曰:“父在,观其(1)志;父没,观其行(2);三年(3)无改于父之道(4),可谓孝矣。”
【注释】
(略)
【译文】
(略)
【评析】
(略)
《论语》下载
该版本通过【原文】标记《论语》原文内容,采用【注释】、【译文】和【评析】标记对原文的注释、译文和评析。
问题1:请编写程序,提取《论语》文档中所有原文内容,输出保存到“论语-提取版.txt”文件。输出文件格式要求:
去掉文章中原文部分每行行首空格及如“1.11”等的数字标志,行尾无空格、无空行。参考格式如下(原文中括号及内部数字是对应源文件中注释项的标记):
子曰(1):“学(2)而时习(3)之,不亦说(4)乎?有朋(5)自远方来,不亦乐(6)乎?人不知(7),而不愠(8),不亦君子(9)乎?”
有子(1)曰:“其为人也孝弟(2),而好犯上者(3),鲜(4)矣;不好犯上,而好作乱者,未之有也(5)。君子务本(6),本立而道生(7)。孝弟也者,其为人之本与(8)?”
子曰:“巧言令色(1),鲜(2)仁矣。”
(略)
问题2:请编写程序,在“论语-提取版.txt”基础上,进一步去掉每行文字中所有括号及其内部数字,保存为“论文-原文.txt”文件。参考格式如下:
子曰:“学而时习之,不亦说乎?有朋自远方来,不亦乐乎?人不知,而不愠,不亦君子乎?”
有子曰:“其为人也孝弟,而好犯上者,鲜矣;不好犯上,而好作乱者,未之有也。君子务本,本立而道生。孝弟也者,其为人之本与?”
子曰:巧言令色,鲜仁矣。”
(略)
问题1参考代码
fi = open("论语-网络版.txt", "r", encoding="utf-8") fo = open("论语-提取版.txt", "w") wflag = False #写标记 for line in fi: if "【" in line: #遇到【时,说明已经到了新的区域,写标记置否 wflag = False if "【原文】" in line: #遇到【原文】时,设置写标记为True 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 i in range(0,10): line = line.replace("{}*".format(i),"") line = line.replace("*","") fo.write(line) fi.close() fo.close()
问题2参考代码
fi = open("论语-提取版.txt", "r") fo = open("论语-原文.txt", "w") for line in fi: #逐行遍历 for i in range(1,23): #对产生1到22数字 line=line.replace("({})".format(i), "") #构造(i)并替换 fo.write(line) fi.close() fo.close()
- 《天龙八部》是著名作家金庸的代表作之一,历时4年创作完成。该作品气势磅礴,人物众多,非常经典。
- 这里给出一个《天龙八部》的网络版本,文件名为“天龙八部-网络版.txt”。
问题1:请编写程序,对这个《天龙八部》文本中出现的汉字和标点符号进行统计,字符与出现次数之间用冒号:分隔,
输出保存到“天龙八部-汉字统计.txt”文件中,该文件要求采用 CSV 格式存储,参考格式如下(注意,不统计空格和回车字符):
天:100, 龙:110, 八:109, 部:10
(略)
问题2:请编写程序,对《天龙八部》文本中出现的中文词语进行统计,采用 jieba 库分词,
词语与出现次数之间用冒号:分隔,输出保存到“天龙八部-词语统计.txt”文件中。参考格式如下(注意,不统计任何标点符号):
天龙:100, 八部:10
(略)
《天龙八部》下载
问题1参考代码
fi = open("天龙八部-网络版.txt", "r", encoding='utf-8') fo = open("天龙八部-汉字统计.txt", "w", encoding='utf-8') txt = fi.read() d = {} for c in txt: d[c] = d.get(c, 0) + 1 del d[' '] del d[' '] ls = [] for key in d: ls.append("{}:{}".format(key, d[key])) fo.write(",".join(ls)) fi.close() fo.close()
问题2参考代码
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[' '] ls = [] for key in d: ls.append("{}:{}".format(key, d[key])) fo.write(",".join(ls)) fi.close() fo.close()
- 请编写程序,生成随机密码。具体要求如下:
(1)使用 random 库,采用 0x1010 作为随机数种子。
(2)密码 abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890!@#$%^&* 中的字符组成。
(3)每个密码长度固定为 10 个字符。
(4)程序运行每次产生 10 个密码,每个密码一行。
(5)每次产生的 10 个密码首字符不能一样。
(6)程序运行后产生的密码保存在“随机密码.txt”文件中。
参考代码
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(" ".join(ls)) # 或写入文件 fo = open("随机密码.txt", "w") fo.write(" ".join(ls)) fo.close()
- 《命运》和《寻梦》都是著名科幻作家倪匡的科幻作品。这里给出一个《命运》和《寻梦》的网络版本,
文件名为“命运-网络版.txt”和“寻梦-网络版.txt”。
《命运》下载
问题1:请编写程序,对这两个文本中出现的字符进行统计,字符与出现次数之间用冒号:分隔,
将两个文件前 100 个最常用字符分别输出保存到“命运-字符统计.txt”和“寻梦-字符统计.txt”文件中,
该文件要求采用 CSV 格式存储,参考格式如下(注意,不统计回车字符):
命:90, 运:80, 寻:70, 梦:60 (略) |
问题2:请编写程序,对“命运-字符统计.txt”和“寻梦-字符统计.txt”中出现的相同字符打印输出。“相同字符.txt”文件中,字符间使用逗号分隔。
问题1参考代码
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[' '] 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()
问题2参考代码
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()
- 古代航海人为了方便在航海时辨别方位和观测天象,将散布在天上的星星运用想象力将它们连接起来,
有一半是在古时候已命名,另一半是近代开始命名的。两千多年前古希腊的天文学家希巴克斯命名十二星座,
依次为白羊座、金牛座、双子座、巨蟹座、狮子座、处女座、天秤座、天蝎座、射手座、魔蝎座、水瓶座和双鱼座。
给出二维数据存储CSV文件(SunSign.csv),内容如下:
星座,开始月日,结束月日,Unicode
水瓶座,120,218,9810
双鱼座,219,320,9811
白羊座,321,419,9800
金牛座,420,520,9801
双子座,521,621,9802
巨蟹座,622,722,9803
狮子座,723,822,9804
处女座,823,922,9805
天秤座,923,1023,9806
天蝎座,1024,1122,9807
射手座,1123,1221,9808
魔蝎座,1222,119,9809
SunSign.csv下载
请编写程序,读入CSV文件中数据,循环获得用户输入,直至用户输入 "exit" 退出。
根据用户输入的星座名称,输出此星座的出生日期范围及对应字符形式。
如果输入的星座名称有误,请输出“输入星座名称有误!”。
fo = open("SunSign.csv","r", encoding='utf-8') ls = [] for line in fo: line = line.replace(" ","") 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("输入星座名称有误!")