python二级考试部分细节整理

find()

用于检验字符串是否包含子字符串str,如果已经制定beg和end范围则将在指定范围内检验。
如果包含子字符串,返回开始的索引值,否则返回-1.
str.find(str, beg=0, end=len(string))

文件sweb.html保存了一个网页的源代码,其中,“href=”引导后面会有一个URL链接,例如:href=“http://news.sina.com.cn/feedback/post.html”,其中,有一种链接前后都有空格,且双引号内以“http://”开头。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

请编写程序,解析这个文件,提取出现符合上述特征的URL链接,每个链接一行,保存到“text-urls.txt”文件中,格式如下:。。。

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) #判断href是否是最后一个属性,如果是则需要删掉>
        if x == -1: #不是的情况
            urls.append(item[6:-1])
        else:
            urls.append(item[6:x-len(item)-1]) #是的情况。 以上都要不包含引号
for item in urls:
    fo.write(item+"\n")
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‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

标点符号、英文字母不加密。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

下面是一段测试文本:

输入(加解密前):全国计算机等级考试二级Python语言程序设计
输出(加解密后):稻翐拎勄逍剶嗔地挂睟嗔Python挚愭儸蝢拫拎

dict_0 = {}
#for x in [0x4e00, 0x9fa5]:
x = 0x4e00
for i in range(20902):
    dict_0[chr(x+i)] = chr((i+10451) % 20902 + x)
#print("".join([d.get(c,c) for c in s]))
s = input()
print("".join([dict_0.get(l,l) for l in s]))

人物亲密度

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(",\n".join(ols))
fi.close()
fo.close()

import jieba
fi = open("神雕侠侣-网络版.txt",'r',encoding='utf-8')
txt = fi.read()
names = ['杨过','小龙女','李莫愁','裘千尺','郭靖','黄蓉']
for name in names:
    jieba.add_word(name)
words = jieba.lcut(txt)
dict_0 = {}
for name in names:
    others = list(names)
    others.remove(name)
    print(others)
    flag = 0
    for word in words:
        if flag == 100:
            flag = -1
        if word == name:
            flag = 0
        if flag != -1:
            if word in others:
                guanxi = name +'-'+word
                dict_0[guanxi] = dict_0.get(guanxi,0) + 1
            flag+= 1
print(dict_0)       

问题一输出:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

 每行30个字符,诗词居中,每半句一行,去掉所有标点。输出到文件“七律.txt”。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

问题二输出:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

 输出全文的翻转形式。

str.center(width, fill_char)返回一个原字符串居中,以特定字符(默认空格) 填充至长度width的新字符串。

问题1

s = "钟山风雨起苍黄,百万雄师过大江。\
虎踞龙盘今胜昔,天翻地覆慨而慷。\
宜将剩勇追穷寇,不可沽名学霸王。\
天若有情天亦老,人间正道是沧桑。"
lines = ""
for i in range(0,len(s),8):
    lines += s[i:i+7].center(30) +'\n'
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="。\n")

str.upper() str.lower() 全部字符大写、小写

苏格拉底是古希腊著名的思想家、哲学家、教育家、公民陪审员。苏格拉底的名言部分被翻译为中文,部分内容分词结果由文件 sgldout.txt 给出。对文件 sgldout.txt 进行分析,输出词频排名前五的词(不包括中文标点符号)和次数到文件sgldstatistics.txt。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

参照输出格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

了:234
的:234
有:234
你:234
我:234‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
fo = open("sgldout.txt","r",encoding ="utf-8")
words = fo.readlines()
fo.close()
sym = ";。,“”:  "
DictWords = {}
for ls in words:
    if ls[:-1] not in sym:
        DictWords[ls[:-1]] = DictWords.get(ls[:-1], 0) + 1
        L = list(DictWords.items()) #对字典进行排序时若使用sort方法则需把dict_items对象转化为list
        L.sort(key = lambda s:s[1],reverse=True)
# 输出到文件
fo = open("sgldstatistics.txt", "w", encoding="utf-8")
for i in range(5):
    fo.writelines(L[i][0] + ":" + str(L[i][1]) + "\n")
fo.close()

记住open文件后要close,防止出现错误

69033141729

综合应用题(15)
文件ngchina.html保存了网页源代码,请将该页面中图片的URL提取出来,并输出所有图片的URL。输出格式如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

第1个URL:http://image.ngchina.com.cn/2018/0829/20180829012548753.jpg
第2个URL:http://image.ngchina.com.cn/2018/0823/thumb_469_352_20180823121155508.jpg

本题目前不支持在线评阅,请自行设计编码实现。

#读取HTML文件内容
def getHTMLlines(htmlpath):
    f = open(htmlpath,"r",encoding = 'utf-8')
    ls = f.readlines()
    f.close()
    return ls
#用于解析文件并提取图片的URL
def extractImageUrls(htmllist):
    urls = []
    for line in htmllist:
        if 'img' in line:
            url = line.split('src=')[-1].split('"')[1]
            if 'http' in url:
                urls.append(url)
    return urls
#将获取的链接输出到屏幕上
def showResults(urls):
    count = 1
    for url in urls:
        print("第{:2}个URL:{}".format(count,url))
        count += 1
# 主程序:1 读取文件;2 解析并提取其中的图片链接;3 输出提取结果到屏幕
def main():
    inputfile = "ngchina.html"
    htmllines = getHTMLlines(inputfile)
    imageUrls = extractImageUrls(htmllines)
    showResults(imageUrls)

先观察网页结构,可以适当模块化

算法平均数蕴含了“重心”的意思,中位数用于概括一组数据的位置,是高度耐抗的,有个别的极大值或者极小值,不会引起中位数的变化。在numbers.txt中给出了100个人的某月收入(单位:元),求100人月收入的算术平均数和中位数并参照如下格式输出:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

算术平均数为3428.96。
中位数为3966.5。

def Arithmetic(numbers):   #计算算法平均数
    sum = 0.0
    for i in numbers:
        sum = sum + float(i)
    return sum/len(numbers)
def Median(numbers):     #计算中位数
    numbers = sorted(numbers)
    size = len(numbers)
    if size % 2 == 0:
        med = (float(numbers[size//2-1]) + float(numbers[size//2]))/2
    else:
        med = numbers[size//2] #中位数的位置与索引值的关系
    return med

fo = open("numbers.txt","r",encoding ="utf-8")
ls = []
for line in fo.readlines():
    line = line.replace("\n","")
    ls.append(line)
print("算术平均数为{}。".format(Arithmetic(ls)))
print("中位数为{}。".format(Median(ls)))

注意考虑中位数的位置与索引值的关系

软文的诗词风将原有文章根据标点符号重新切分为短语并居中排版,对小屏幕阅读十分有利。使用程序将普通文章变成软文的诗词风十分有趣。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

原始诗词风格:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

          人生得意须尽欢,莫使金樽空对月。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

          天生我材必有用,千金散尽还复来。‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

软文风如下:‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

        人生得意须尽欢‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

        莫使金樽空对月‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

        天生我材必有用‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

        千金散尽还复来‪‬‪‬‪‬‪‬‪‬‮‬‪‬‭‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‭‬

#参照编程模板,完善代码。本题目前不支持在线评阅。

txt = '''人生得意须尽欢,莫使金樽空对月。\
天生我才必有用,千金散尽还复来。'''
print(txt)
linewidth = 30

def lineSplit(line):
    plist =[',','!','?',',','。']
    for p in plist:
        line = line.replace(p,'\n')
    return line.split('\n')

def linePrint(line):
    global linewidth
    print(line.center(linewidth,chr(12288)))

newlines = lineSplit(txt)
for newline in newlines:
    linePrint(newline)

注意换行符和标点的的处理方法,全局变量的使用

你可能感兴趣的:(python,python)