現状のコードにはいくつかの問題があります。まず、この行:
wordList =["antidisestablishmentarianism"]
あなたが思うことをしません-それは実際に単一のアイテムを含むリストを作成します"antidisestablishmentarianism"
。文字列を文字のリストに変換するには、list()
-を使用できます。すでに変数を持っているのでword
、単語を再入力する必要はありません。
ちなみに、wordList
これはあまり良い変数名ではありません。よりpythonicのunderscore_separatedスタイルではなくcamelCaseを使用しているという事実とは別に、ここで実際に必要なのは、単語内の文字のリストです。
したがって、その行は次のように置き換えることができます。
characters = list(word)
次に進む...この行:
lengthWord = len(word)
冗長です-コード内で一度だけ参照lengthWord
するので、その参照を使用する場所に置き換えるだけでもかまいませんlen(word)
。
あなたのライン:
usedValues=[position]
また、あなたが思っていることをしていません。それは、ループ内の最新の位置のみを含むリストに完全に置き換えられています。 usedValues
リストに値を追加するには、次を使用しますlist.append()
。
used_positions.append(position)
(変数にもっと正確な名前を付けました)。次の問題はこのブロックです:
for ch in wordList:
wordList.remove([usedValues])
まず、単語内の各文字ではなく、以前に保存した各位置を確認する必要があります。の使用法list.remove()
も間違っています。そのように削除する値のリストを指定することはできませんが、とにかくlist.remove()
リストから値の最初のインスタンスを削除します。必要なのは、特定の位置にあるアイテムを削除することです。目的はlist.pop()
次のとおりです。
for position in sorted(used_positions, reverse=True):
characters.pop(position)
used_positions
アイテムを削除するときに、の残りの位置が[*]の残りの位置とずれused_positions
ないように、逆に並べ替えられたコピーを使用しています。characters
最後の問題は最後の行です。
print("The remaining letters are",WordList, sep='')
リストの内容をで区切って印刷したい場合''
、これはそれを行う方法ではありません。代わりに、次のものが必要ですstr.join()
。
print("The remaining letters are", "".join(characters))
これらの変更をすべて実践し、少し整理すると、次のようになります。
import random
word = "antidisestablishmentarianism"
characters = list(word)
print("The Word is:", word, "\n")
used_positions = []
for i in range(5):
position = random.randrange(0, len(word))
print("word[",position, "]\t", word[position])
used_positions.append(position)
for position in sorted(used_positions, reverse=True):
characters.pop(position)
print("The remaining letters are", "".join(characters))
[*]実際、これは別の問題を引き起こします。コードが同じ位置を2回選択した場合はどうなるでしょうか。私はあなたにそれについて考えさせます。