Python编码训练(其五)

汉语:Python 是工程开发中的利器。需要多加训练。

E-version:python is popular in project dev。so everyone should practice more. 

如题:

AS-LIKE

l文件input.txt中的每一行包含英文字母、数字、标点符号的各种组合,请提取仅包含数字的行,并按照题目要求对文件内容进行处理后,将处理的结果输出到output.txt文件中

p提示:

p1. 数字0-9ASCII码值为0x30-0x39

p2. 一行内有数字串或仅有的数字串前面或后面存在1个或多个空格的属于合法输入,但空格出现在数字中间则认为不合法

p3. 输入文件可能存在空白行(都是空格)

p4. 输入文件可能存在不可见字符

p5.数字的数量可能非常大,处理时请注意性能

p6.每行数字的长度不会超长,不必考虑分段存储单个数字行

level_1

提取合法的数字行,去掉每行数字开头的0(全0行按0算),再比较各行的数字去掉重复的,并按照每行数字在输入文件中第一次出现的顺序输出到输出文件中。

level_2

1.提取合法的数字行,去掉每行数字开头的0(全0行按0算),再比较各行数字去掉重复的

2.将剩余的数字行进行从小到大的顺序排列后输出到输出文件中

level_3

l1.提取合法的数字行,去掉每行数字开头的0(全0行按0算),再比较各行数字去掉重复的

l2.将剩余的数字行做奇偶调序之后形成新的数字行,并同样比较各行数字去掉重复

l3.按照每行数字从小到大的顺序排列并输出到输出文件中

l说明:奇偶调序指调整数字中每位数的位置,使得所有奇数在数字前半部分,所有偶数在数字后半部分,并且保持奇数或偶数内部之间的相对位置不变

例如:5827这个数字中奇数为57,偶数为82,那么调整奇偶顺序后57在前,82在后;同时原数字中57之前,82之前,则调整后的数字为5782(简单来说,就是奇数按照出现顺序排在前面,偶数按照出现顺序排在后面)

实现:

level_1

import re


def level_1(input_file, output_file):
    result = []
    with open(input_file , "r") as fi:
        line_value = fi.readline()
        while line_value:
            if len(re.sub("[^0-9]", '',line_value)) == len(line_value.strip()):
                if result.count(int(line_value)):
                    pass
                else:
                    result.append(str(line_value))
            line_value = fi.readline()
    with open(output_file, "w+") as fo:
         for i in result:
             fo.writelines(i)

 

level_2

import re


def level_2(input_file, output_file):
    result = []

    with open(input_file, "r") as fi:
        line_value = fi.readline()
        while line_value:
            if len(re.sub("[^0-9]", '', line_value)) == len(line_value.strip()):
                if result.count(int(line_value)):
                    pass
                else:
                    result.append(int(line_value))
            line_value = fi.readline()
    result = sorted(result)
    with open(output_file, "w+") as fo:
        for i in result:
            if i == result[-1]:
                fo.writelines(str(i))
            else:
                fo.writelines(str(i) + "\n")

 

level_3

import re


def level_3(input_file, output_file):
    result = []

    with open(input_file, "r") as fi:
        line_value = fi.readline()
        while line_value:
            if len(re.sub("[^0-9]", '', line_value)) == len(line_value.strip()):
                if result.count(int(line_value)):
                    pass
                else:
                    result.append(int(line_value))
            line_value = fi.readline()
    # 奇偶调序
    maps = []
    pos_f = ''
    pos_b = ''
    for i in result:
        a = str(i)
        for j in a:
            if int(j)%2 == 1:
                pos_f += j
            else:
                pos_b += j
        pos = int(pos_f+pos_b)
        if maps.count(pos):
            pass
        else:
            maps.append(pos)
        pos_f = ''
        pos_b = ''

    # sorted
    result = sorted(maps)
    with open(output_file, "w+") as fo:
        for i in result:
            if i == result[-1]:
                fo.writelines(str(i))
            else:
                fo.writelines(str(i) + "\n")

 

TIPs:代码重复部分,请改写为函数的调用。

你可能感兴趣的:(python)