2015-10-06 48 views
-3

我有一個輕微的問題,其中一個變量似乎沒有被正確定義爲一個變量。當我嘗試print變量WordLetters的值時,它不會返回任何內容。當我嘗試print變量的長度時,它返回0變量不想被定義?

最初我在WordLetters變量方面有NameError,那麼我在try:函數之外定義了,現在它不返回任何值。難道try:有它自己的範圍嗎?如果是這樣,我將如何將值追加到WordLetters列表中?

RandomWord = random.choice(Words) 
try: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5], RandomWord[6], RandomWord[7], RandomWord[8], RandomWord[9]] 
except(IndexError): 
    pass 

print("Word: " + "".join(WordLetters)) 
print("The word is " + str(len(WordLetters)) + " letters long.") 
+2

什麼是單詞? –

+8

你*無言*忽略'RandomError'異常'RandomWord'。請刪除'try ... except',你會知道爲什麼'WordLetters'沒有設置。你隨機挑選了一個少於10個元素的RandomWord。 –

+1

你不只是想'WordLetters = list(RandomWord)'? – jonrsharpe

回答

5

你默默地用except IndexError: pass忽略指數的誤差。如果您隨機挑選的任何字詞短於10個字符,則會發生異常,並且不會設置WordLetters

要麼發生這種情況,要麼設置默認,要麼避免完全索引單個字符;你可以只用list()函數來創建一個列表字的所有單個字符:

WordLetters = list(RandomWord) 

,而不必知道了,前面有多少個字符中有字。

需要注意的是,除非你打算發生變異列表(修改元素或添加或刪除列表中的元素)你不需要把你的字符串轉換爲單個字符的列表。你總是可以遍歷一個單詞或獲得長度; len(RandomWord)工程,for character in RandomWord: print(character)也是如此。

-2

忽略IndexError沒有幫助。

我的解決辦法是檢查每個單詞的長度,像這樣:

if len(RandomWord) == 2: 
    WordLetters = [RandomWord[0], RandomWord[1]] 
elif len(RandomWord) == 3: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2]] 
elif len(RandomWord) == 4: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3]] 
elif len(RandomWord) == 5: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4]] 
elif len(RandomWord) == 6: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5]] 
elif len(RandomWord) == 7: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5], RandomWord[6]] 
else: 
    WordLetters = [RandomWord[0], RandomWord[1], RandomWord[2], RandomWord[3], RandomWord[4], RandomWord[5], RandomWord[6], RandomWord[7]] 

有些冗長,但它的作品。

+0

如果單詞超過8個字母,該怎麼辦? – Buzz

+3

或者你可以使用'WordLetters = list(RandomWord)',不需要索引每個單獨的字符。 –

+0

@buzz我的列表不包含任何超過8個字母的單詞。 – Medallyonify

-2

如何:

aword = 'hello world' 
randomWord = [] 
for i in range(len(aword)): 
    randomWord.append(random.choice(aword)) 

print ''.join(randomWord) 
print len(randomWord)