2013-05-13 78 views
0

我是編程和python的新手。我在網上尋找幫助,我按照他們的說法行事,但我認爲我犯了一個我無法理解的錯誤。 現在我所要做的就是:如果單詞與用戶在文件中輸入單詞的長度相匹配,請列出這些單詞。如果我用實際的號碼替換userLength,但它不適用於變量userlength。我以後需要這個名單來開發Hang子手。python中的長度函數不能按我想要的方式工作

任何關於代碼的幫助或建議都會很棒。

def welcome(): 
    print("Welcome to the Hangman: ") 
    userLength = input ("Please tell us how long word you want to play : ") 
    print(userLength) 

    text = open("test.txt").read() 
    counts = Counter([len(word.strip('?!,.')) for word in text.split()]) 
    counts[10] 
    print(counts) 
    for wl in text.split(): 

     if len(wl) == counts : 
      wordLen = len(text.split()) 
      print (wordLen) 
      print(wl) 

    filename = open("test.txt") 
    lines = filename.readlines() 
    filename.close() 
    print (lines) 
    for line in lines: 
     wl = len(line) 
     print (wl) 

     if wl == userLength: 

      words = line 
      print (words) 

def main(): 
    welcome() 

main() 

回答

3

input()返回一個字符串py3.x,所以你必須轉換它首先到int

userLength = int(input ("Please tell us how long word you want to play : ")) 

而不是使用readlines您可以一次通過一條線路重複而且,它是內存使用效率。其次在處理文件時使用with聲明,因爲它會自動關閉文件。:

with open("test.txt") as f: 
    for line in f:   #fetches a single line each time 
     line = line.strip() #remove newline or other whitespace charcters 
     wl = len(line) 
     print (wl) 
     if wl == userLength: 
     words = line 
     print (words) 
+0

明白了。謝謝。 – AAA 2013-05-13 12:21:04

4

input函數返回一個字符串,所以你需要把userLengthint,像這樣:

userLength = int(userLength) 

正因爲如此,該行wl == userLength總是False


回覆:發表評論

這裏的建設的話這個詞列表與正確長度的一種方法:

def welcome(): 
    print("Welcome to the Hangman: ") 
    userLength = int(input("Please tell us how long word you want to play : ")) 

    words = [] 
    with open("test.txt") as lines: 
     for line in lines: 
      word = line.strip() 
      if len(word) == userLength: 
       words.append(word) 
+0

有道理。我正在打印它正在打印長度的用戶長度,所以我不確定。你能告訴我如何創建一個列表。 'Words'應該是一個列表,但它一次只給我一個單詞。 感謝您的幫助。 – AAA 2013-05-13 12:20:40

+0

@AAA您已經有了變量'lines'中的單詞列表,儘管每個單詞都以換行結束。要刪除它們,請執行'lines = [word.string()')。 – 2013-05-13 12:29:41

+0

由於這是推薦阿什維尼,我改變了代碼的那部分 張開( 「test.txt的」)爲f: #lines = filename.readlines() #filename.close() #PRINT(線) 線路f中: 線= [word.strip(),用於線的字] WL = LEN(線) 打印(WL) 如果WL == userLength: 詞語=行 打印(字) – AAA 2013-05-13 12:40:34

相關問題