问题描述
【问题描述】
英文电影中参演人员名单一般以某种方式进行排版显示。给定一个未排版的文件listin.txt,该文件中每行参演人员名单由冒号':'分隔成前后两部分,但格式杂乱无章,单词(由除空格和水平制表符之外的其它字符构成)之间可能有多个空格或水平制表符分隔。编写程序,要求将其按如下排版规则排版输出到另一个文件listout.txt中:
1.从标准输入(即键盘)读取一整数,作为排版后所有各行冒号':'在一行中的固定位置;假设输入的整数肯定大于排版后所有各行冒号':'前的字符个数,位置从1开始计数;
2.冒号':'左边的单词串以行头为基准左对齐,左边的最后一个单词与冒号之间以空格填充;冒号':'右边的单词串以冒号':'为基准左对齐,最后一个单词后只有回车换行符,不再有其它字符;
3.冒号':'左右两边的单词间都只有一个空格分隔,并且要求冒号两边至少各有一个空格。
假设输入文件中每行字符个数不超过100。
【输入形式】
待排版的参演人员名单从当前目录下的listin.txt文件中读入;表示冒号':'位置的整数从标准输入读入。
【输出形式】
排版后的参演人员名单输出到当前目录下的listout.txt中
【输入样例】
假设文件listin.txt内容为:
Digital Intermediate by : EFILM
Supervising Digital Colorist : STEVEN J. SCOTT
Second Colorist :ANDREW FRANCIS
Digital Intermediate Producer:LOAN PHAN
Digital Intermediate Editor: DEVON MILLER
表示冒号固定位置的整数为:
40
整一个题目的逻辑就是读取文件中的每一行,然后提取其中的两个单词,最后将他们格式化输出。
分成流程就是
- 按行读取文件
- 对这一行去掉非单词之间的空格,并将 转化为空格,然后将每一个修改后的行元素添加到列表
- 对这个列表进行拼接成字符串
- 将字符串按照:分割
- 对分割后的每一部分去掉首尾的空格
- 最后按照输入的格式进行输出
#### 就是这道坑爹的题目嗷嗷嗷嗷嗷嗷
with open("listout.txt","w") as f:
f.write("")
loca = int(input())
with open(r"listin.txt", "r") as f:
data = f.readlines()
a = []
str_lens = []
for line in data:
# print(list(line))
flag = False
for i in line:
if i == " " or i == " ":
if flag == False:
if i == " ":
a.append(i)
flag = True
if i == " ":
a.append(" ")
flag = True
else:
continue
else:
flag = False
a.append(i)
# print(a)
cache_str = "".join(a)
# print(cache_str)
cache_list = cache_str.split(":")
print(cache_list)
for i in range(len(cache_list)):
cache_list[i] = cache_list[i].strip()
str_lens.append(len(cache_list[0]))
# print(len(cache_list))
with open("listout.txt","a") as q:
q.write(cache_list[0]+" "*(loca-len(cache_list[0])-1)+": "+cache_list[1]+"
")
a = []
print(str_lens)
我的操纵逻辑很复杂,而且这个肯定不是最好的做法,昨天写这道题的时候自己也写了半小时多,反思一下怎么连水题都做的这么慢了。