作为我在大学课程的一部分,我正在学习python。我一直试图完成的一项任务就是编写一个程序,在“反建构主义”中打印出随机字母及其相应的位置。然后它会在一行上打印剩余的字母。
我一直试图以一种疯狂奇怪的迂回方式做到这一点 - 用所选值填充列表并从原始列表中删除这些字符。
我意识到我的程序可能全是错误的;我今天才开始学习名单!
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 :(得分:2)
我认为部分问题在于您错误地创建并操纵了worldList
和usedValues
列表。
要创建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))