2014-11-14 32 views
-1

我有一個幾乎功能兩字櫃檯,但我堅持兩點:兩字組櫃檯幾乎完整的Python

一)打印鍵和值正確地爲我的關鍵是循環的代碼到一個元組

B)接受輸入的新線

到目前爲止我有:

bigrams = {} 

line = input ('Line: ').split() 
while len(line) > 1:      
    bigram_key = tuple(line[0:2])  
    if bigram_key not in bigrams:  
    bigrams[bigram_key] = 1   
    else:        
    bigrams[bigram_key] += 1   
    line = line[1:]      

for entry in bigrams.keys(): 
    print (entry,":",bigrams[entry]) 

輸入單行其中一期工程,雖然打印額外格賓斯(技術術語),我不想:

Line: The Big The Big Red Fox 
('Big', 'The') : 1 
('Big', 'Red') : 1 
('Red', 'Fox') : 1 
('The', 'Big') : 2 

當我後:

Line: The Big The Big Red Fox 
Big The: 1 
Big Red: 1 
Red Fox: 1 
The Big: 2 

然後,我需要用它來輸入多行的工作!

+2

對於你的第一個問題,研究字符串格式。對於第二個問題,瞭解循環。這些都不是合適的SO問題 - 這在任何Python教程中都有介紹。 – jonrsharpe

+0

那就是我說的!公平的呼喊,我在我的Python第一個月(確實是任何形式的編程),所以我相信你可以原諒人造假。這一切都相當模糊... – Mathmos

回答

1

對於你的第一個問題:

>>> for i in bigrams: 
...  print ' '.join(i),':',bigrams[i] 
... 
Big The : 1 
Red Fox : 1 
Big Red : 1 
The Big : 2 

對於你的第二個問題:

>>> bigrams={} 
>>> while True: 
...  print "Enter some text or enter `break` keyword to stop:" 
...  line = raw_input() 
...  if line.lower() == 'break': break 
...  line = line.split() 
...  for i,j in zip(line[:-1],line[1:]): # Keep taking two consecutive words (bigrams) until end of line 
...   bigrams.setdefault((i,j),0) 
...   bigrams[(i,j)]+=1 
+0

非常感謝! – Mathmos

+0

我喜歡使用文本文件的想法!雖然不是這樣的。雖然我需要處理它,因爲我必須接受用戶輸入,而不是文本文件輸入。也許我可以先獲得用戶輸入以寫入文件 - 儘管在每次執行代碼後都需要刷新文件以重置它。再次感謝 - 一個非常有用的觀點。 – Mathmos

+0

哦!我以爲你有一個文本文件。我已根據您的要求更新了我的答案。希望你喜歡。 –

0

這是我公司生產的最終代碼。感謝您的支持!

bigrams = {} 
while True: 
    line = input ('Line: ').lower().split() 
    while len(line) > 1:      
    bigram_key = tuple(line[0:2])  
    if bigram_key not in bigrams:  
     bigrams[bigram_key] = 1   
    else:        
     bigrams[bigram_key] += 1   
    line = line[1:] 
    if line == []: 
    break 
for entry in bigrams: 
    if bigrams[entry] > 1: 
    print(' '.join(entry)+':',bigrams[entry]) 
+0

我應該補充 - 分配只想打印一個頻率大於1的bigrams。只是在最後才注意到! – Mathmos