汉语:Python 是工程开发中的利器。需要多加训练。
E-version:python is popular in project dev。so everyone should practice more.
如题:
AS-LIKE
l文件input.txt中的每一行包含英文字母、数字、标点符号的各种组合,请提取仅包含数字的行,并按照题目要求对文件内容进行处理后,将处理的结果输出到output.txt文件中
p提示:
p1. 数字0-9的ASCII码值为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这个数字中奇数为5和7,偶数为8和2,那么调整奇偶顺序后5和7在前,8和2在后;同时原数字中5在7之前,8在2之前,则调整后的数字为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:代码重复部分,请改写为函数的调用。