【问题标题】:Trying to append variable to list in loop if it doesn't exist already, but the result is empty将变量追加到循环列表中
【发布时间】:2022-01-10 05:43:00
【问题描述】:

如果数字不在列表中,我想将“输入数字”附加到“list_of_already_entered_numbers”。因此,您不应将相同的数字说出 2 次。我添加了“打印”以显示列表仍然是空的?即使“追加”应该在每次迭代期间将数字添加到列表中。别介意10次迭代。那么如何将数字附加到列表中,以便每次迭代都更新列表?

def ask_number():
    a = 0
    while a < 10:
        list_of_already_entered_numbers = []
        print("this is the list: " + str(list_of_already_entered_numbers))
        number = int(input("Type a number:"))
        if number in list_of_already_entered_numbers:
            print("the number is already in the list")
        else:
            list_of_already_entered_numbers.append(number)
        a+=1

ask_number()

【问题讨论】:

  • 您在循环的每次迭代开始时将list_of_already_entered_numbers 设置为一个空列表。尝试将其设置在 while 循环之外。
  • 每次循环执行时变量list_of_already_entered_numbers 被重新定义为一个空字符串。在循环外定义变量。
  • @match 打败了我!

标签: python loops if-statement append iteration


【解决方案1】:

像这样在循环外声明列表:

def ask_number():
    a = 0
    list_of_already_entered_numbers = []
    while a < 10:
        print("this is the list: " + str(list_of_already_entered_numbers))
        number = int(input("Type a number:"))
        if number in list_of_already_entered_numbers:
            print("the number is already in the list")
        else:
            list_of_already_entered_numbers.append(number)
        a+=1

ask_number()

【讨论】:

    【解决方案2】:

    您可以尝试仅将询问部分分解为它自己的函数。这样可以更轻松地自行尝试,并确保您获得预期的结果:

    from typing import List
    
    def enter_number(previous_numbers: List[int]) -> List[int]:
        print("These numbers have been guessed: {previous_numbers}" + str(list_of_already_entered_numbers))
        number = int(input("Type a number:"))
        if number in previous_numbers:
            print("That number has already been entered")
        else:
            previous_numbers.append(number)
        return previous_numbers
    
    def ask():
        previous_numbers = []
        for _ in range(10):
            previous_numbers = enter_number(previous_numbers)
    
    ask()
    

    通过这种方式,您可以封装起始状态,并且可以确保每次迭代都按照您的预期进行。

    【讨论】:

      猜你喜欢
      • 2018-01-19
      • 2013-09-22
      • 1970-01-01
      • 2018-03-10
      • 2018-11-16
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多