为什么使用.insert()函数时列表会越来越大?

时间:2019-09-02 20:51:02

标签: python python-3.x

我正在尝试创建一个执行作业的子手游戏,我一直在努力弄清楚为什么我在将字母添加到正确的空格后将列表弄乱了。

对于我的子手游戏,我有两个列表,一个包含需要猜的单词,另一个包含玩家猜到的单词。我使用for循环来正确识别字母在“待猜单词”列表中的位置,并将其放入“被猜单词”列表中。

执行此操作,然后打印“猜测”列表时,该列表会变得混乱。

我并不是要对我的代码进行重大改进,因为我只是想学习基础知识(这是家庭作业),所以我只是想解决此特定错误。在完成此作业之前,我也从未使用过列表,所以我仍在学习如何使用它们。哈哈。

谢谢!

finished = False
selected_word = input("Can player one input a word?")
selected_word_list = list(selected_word)
length_of_word = len(selected_word_list)


guessed_word = []
for x in range(0, length_of_word):
    guessed_word.append('_')

while finished == False:
    place_of_x = -1
    guess = input("Please enter a letter: ")
    if guess in selected_word_list:
        print("Well done you have found a letter")
        for x in selected_word_list:
            place_of_x = place_of_x + 1
            if x == guess:
                guessed_word.insert(place_of_x,guess)      
        print(guessed_word)

我希望列表的长度仍然相同。 例如。如果我输入“香蕉”并猜测为“ a”,则输出为:

['_', 'a', '_', 'a', '_', 'a', '_', '_', '_']

当我想要它时:

['_', 'a', '_', 'a', '_', 'a']

2 个答案:

答案 0 :(得分:5)

您对insert的操作有误解。 insert在列表中第一个参数所指定位置的前面插入一个新元素。

您似乎想做的是替换一个项目。这可以通过简单的索引来完成:

guessed_word[place_of_x] = guess

答案 1 :(得分:0)

一些改进建议:

  • 考虑将输入转换为小写/大写,以便字母正确匹配。
  • 也许在猜测时检查用户是否输入了单个字母
  • 您可以使用for i, elem in enumerate(selected_word_list):代替手动增加place_of_x

这是一个可能的改进版本:

def func():
    # strip whitespaces from the beginning/end, make all lowercase
    selected_word_list = list(input("Input a word: ").strip().lower())

    length_of_word = len(selected_word_list)
    guessed_word = ['_', ] * length_of_word

    while True:
        print(guessed_word)

        # strip whitespaces from the beginning/end, make lowercase
        guess = input("Guess a letter: ").strip().lower()

        if guess in selected_word_list:
            print("Well done you have found a letter")

            for i, elem in enumerate(selected_word_list):
                if elem == guess:
                    guessed_word[i] = guess

        print(guessed_word)

        if '_' not in guessed_word:
            print("Finished")
            print(guessed_word)

            # exit the function, which exists the loop as well
            return