2014-11-05 78 views
1

我正在接受一個輸入文件,其中包含用空格分隔的不同語句的數字列表,並將這些數字相加,然後將兩個相鄰的數字相加,如果使用UTF-8則輸出一個單詞。所以如果數字列表是67 5 100 1 11 97 98 10 1 110,這些數字將變成72,101,108,108和111,它們在UTF-8中讀取Hello。排序列表輸出:UTF-8

目前,我有以下代碼:

file_name = input('Enter filename: ') 
input_file = open(file_name, 'r') 
word_list = [] 
count3 = 0 

for line in input_file: 
    count1 = 0 
    count2 = 1 
    count3 += 1 
    word_str = '' 
    line = line.split() 
    length = len(line) 

    while count1 < length: 
     num_char = int(line[count1]) + int(line[count2]) 
     count1 += 2 
     count2 += 2 
     word_str += chr(num_char) 
    word_list.append(word_str) 

print (word_list) 

例如輸入文件:

67 5 100 1 11 97 98 10 1 110 
15 72 10 101 47 67 88 20 94 6 22 11 

61 11 93 4 73 39 78 34 17 104 
23 43 11 93 65 52 20 96 66 31 86 24 40 61 102 13 50 51 
73 43 28 73 8 89 31 68 77 27 24 77 42 72 15 24 64 51 
25 75 7 90 10 111 17 16 

從這個代碼中,我得到的輸出:

['Hello', 'World!', '', 'Happy', 'Bhutanese', "teacher's", 'day!'] 

我的問題是,我需要將列表中的輸出與最後一條語句的第一條和最後一條語句的排序進行排序。

因此,對於所提供的數字所期望的輸出將是:

['Happy Bhutanese teacher's day!', 
'Hello World!'] 

任何幫助是極大的讚賞

+1

請張貼一個小例子,包括輸入,代碼,預期產出以及實際輸出......或者至少告訴我們,什麼是錯誤的與您當前密碼] – 2014-11-05 23:07:50

+2

排序列表通常用做'整理' – njzk2 2014-11-05 23:08:12

+0

確定你不想添加modulo 256?看起來***你不想排序,但重新排序***,顛倒了順序。 – Deduplicator 2014-11-05 23:13:17

回答

1

看來你不想要的個人列表 - 你想句子,在句子分開空行的列表。

爲了清楚起見,您應該將word_list重命名爲sentence_list。我從現在開始將它稱爲sentence_list

要構建句子,請在每個單詞之間留出空格。由於句子跨越多行,因此您不想在每個循環中重新初始化word_str - 您需要保留它。爲此,在循環之前將其初始化爲一次

word_str = '' 
for line in input_file: 
    ... 

而不是總是附加線的單詞列表,word_list.append(word_str),你會希望以不同方式處理它比一個空行字。

如果剛剛處理的行是單詞,請在結尾添加一個空格。

如果它是空行,請將當前的word_str添加到sentence_list,並將word_str重置爲空字符串。

您可以通過檢查行的長度來決定要執行的操作:空白行的長度爲0。

if length == 0: 
    sentence_list.append(word_str) 
    word_str = '' 
else: 
    word_str += ' ' 

既然你想最後一句首先出現在列表中,你需要反向列表可以在打印前。

sentence_list.reverse() 
print(sentence_list) 
+0

我真的很感謝你的幫助,並且喜歡你的想法。我的輸出只讀['Hello World! '],但是我放入你的修改。有什麼想法嗎? – Fischer 2014-11-06 03:12:34

+1

哈哈,哎呀。 'word_str'只會在找到一個空行時纔會附加到'sentence_list'中......您現在可以看到問題了嗎?提示:如果輸入有3個句子,輸出將只是前兩個。 – rosshamish 2014-11-06 03:36:03

+0

另外,請注意每個word_str末尾的尾部空格?在將它追加到'sentence_list'之前,您需要刪除它。你可以用切片來做到這一點:http://stackoverflow.com/questions/509211/explain-pythons-slice-notation?rq=1。尋找「最後兩個項目除外」的例子,頂部答案給出。 – rosshamish 2014-11-06 03:40:34

0

然後,而不是使用append,手工添加新詞的前面或使用insert

word_list = [] 
... 
for ...: 
... 
    while ...: 
     ... 
    word_list = [word_str] + word_list 
    #word_list.insert(0, word_str) 

print(word_list) 

還有012在list中有函數。你可以只說:

word_list.reverse() 
print(word_list) 
+0

這有助於一些,但我想反過來在輸入代碼中的空格的訂單基礎。在前兩行或數字開始一組新數字後,如果有空格,我希望這些數字組首先按照61 ...,23 ...,73 ...,25的順序處理。 。然後過程67 ...,15 ... – Fischer 2014-11-06 00:12:29