問題描述
【問題描述】
英文電影中參演人員名單一般以某種方式進行排版顯示。給定一個未排版的文件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
整一個題目的邏輯就是讀取文件中的每一行,然后提取其中的兩個單詞,最后將他們格式化輸出。
分成流程就是
- 按行讀取文件
- 對這一行去掉非單詞之間的空格,並將\t轉化為空格,然后將每一個修改后的行元素添加到列表
- 對這個列表進行拼接成字符串
- 將字符串按照:分割
- 對分割后的每一部分去掉首尾的空格
- 最后按照輸入的格式進行輸出
#### 就是這道坑爹的題目嗷嗷嗷嗷嗷嗷
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 == "\t":
if flag == False:
if i == " ":
a.append(i)
flag = True
if i == "\t":
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]+"\n")
a = []
print(str_lens)
我的操縱邏輯很復雜,而且這個肯定不是最好的做法,昨天寫這道題的時候自己也寫了半小時多,反思一下怎么連水題都做的這么慢了。
