2012-11-08 65 views
1

作爲我在大學課程的一部分,我正在學習python。我一直在努力完成的一項任務是編寫一個程序,在「antidisestablishmentarianism」中打印隨機字母及其相應的位置。然後它將在一行上打印剩餘的字母。從字符串中提取隨機字符,然後打印餘數。

我一直在試圖做到這一點可能是一個瘋狂的怪異迂迴的方式 - 用選定的值填充列表並從原始中刪除這些字符。

我意識到我的程序可能都是錯誤的和破碎的;我今天才開始學習名單!

import random 
word = "antidisestablishmentarianism" 
wordList =["antidisestablishmentarianism"] 

print("The Word is:",word,"\n") 

lengthWord = len(word) 
usedValues=[] 
for i in range(5): 
    position = random.randrange(0,lengthWord) 
    print("word[",position, "]\t", word [position]) 
    usedValues=[position] 
for ch in wordList: 
    wordList.remove([usedValues]) 
print("The remaining letters are",WordList, sep='') 
+0

提取的字符需要按順序嗎? – Gizmo

回答

2

我認爲問題的一部分是,你創建和操縱不正確的worldListusedValues名單。

創建一個字符列表wordList使用list(word)。要將使用的索引添加到usedValues請使用usedValues.append(position)。如何從單詞列表中刪除使用的值也有一個問題。

這裏是你的代碼有固定的錯誤:

import random 
word = "antidisestablishmentarianism" 
wordList = list(word) 

print("The Word is:",word,"\n") 

lengthWord = len(word) 
usedValues=[] 
for i in range(5): 
    position = random.randrange(0,lengthWord) 
    print("word[",position, "]\t", word[position]) 
    usedValues.append(position) 

for index in usedValues: 
    wordList.pop(index) 

print("The remaining letters are",WordList, sep='') 

這將主要工作。但是,仍然存在邏輯錯誤。如果您在第一個循環中獲得兩次相同的隨機位置,則每次都會報告相同的字符。但是,稍後當您從列表中刪除它們時,最終會彈出兩個不同的字母。同樣,如果您從單詞開頭附近刪除一個字母,稍後刪除的索引將不正確。如果選擇的最後一個位置之一接近單詞的結尾,您甚至可以獲得IndexError

一個修復方法是在第一個循環內立即從列表中刪除選定的值。您需要每個循環顯式調用len(因爲它每次都會更改),但除此之外,所有內容都應該正常工作。

或者我可以解決這個問題。而不是挑選五個具體的索引,並從列表中刪除它們,我將random.shuffle列出所有索引,並拿到前五名。其餘的可以按照隨機順序打印出來,或者先排序以給出從原始單詞中刪除字母的印象。

import random 
word = "antidisestablishmentarianism" 

indexes = list(range(len(word))) 
random.shuffle(indexes) 

for i in indexes[:5]: 
    print("word[%d] is '%s'" % (i, word[i])) 

rest = sorted(indexes[5:]) # or just use indexes[5:] to keep random order 
print("The remaining letters are '%s'" % "".join(word[i] for i in rest))