列表元素在返回后保持不变(python)

时间:2018-03-14 22:20:46

标签: python python-3.x

from os import system

def option_1(product_list):
    """
    :function prints the inputed list.
    :param product_list: inputed list.
    :type product_list: list.
    :return: none.
    :rtype: none.
    """
    print(product_list)

def option_5(product_list):
    """
    :function takes user input and deleted the element with the same name in the list.
    :param product_list: the inputed list.
    :param user_input_product: user input.
    :type product_list: list.
    :type user_input_product: string.
    :return: the list after changes.
    :rtype: list.
    """
    user_choice = str(input("Please Enter The Product You Want Tp Delete:"))
    product_list.remove(user_choice)
    return product_list

def option_6(product_list):
    """
    :function takes user input and addes it to the list as an element.
    :param product_list: the inputed list.
    :param user_input_product: user input.
    :type product_list: list.
    :type user_input_product: string.
    :return: the list after changes.
    :rtype: list.
    """
    user_input_product = str(input("Please Enter The Name Of The Product You Want To Enter:"))
    product_list += [user_input_product]
    return product_list

def option_8(product_list):
    """
    :function deletes the duplicates in a list.
    :param product_list: the inputed list.
    :type product_list: list.
    :return: the list after changes.
    :rtype: list.
    """
    product_list = set(product_list)
    return product_list

def option_manue():
    product_list = []
    user_choice = int(input("Please Enter A Number Between 1 To 9:"))
    if user_choice == 1:
        option_1(product_list)
        option_manue()
    elif user_choice == 5:
        product_list = option_5(product_list)
        option_manue()
    elif user_choice == 6:
        product_list = option_6(product_list)
        option_manue()
    elif user_choice == 8:
        product_list = option_8(product_list)
        option_manue()
def main():
    option_manue()
if __name__ == "__main__": 
    main()
system("pause")

此代码根据用户输入进行用户输入和选项。 有9个选项: 列出清单。 2.列出清单的长度。 3.检查元素是否在列表中。 4.列表中某个元素的多少次。 5.从列表中删除元素。 6.add元素到列表。 7.删除非法元素。 8.删除重复。 附加菜单9.退出。 我的问题是我发送给选项的列表5,6,8元素即使在我返回列表时也不会改变。 (顺便说一下,我知道我用错误的方式弄错了manu,我会在代码中发现错误之后改变它)

2 个答案:

答案 0 :(得分:1)

主要问题是option_manue的程序流程。每次运行时,option_manue都会将product_list重置为[],这是一个空列表。由于您在自己内部调用了option_manue,因此每次运行product_list函数时,它都会重置option_1, option_2, option_3, ...。这就是为什么当您尝试打印product_list时,您的所有修改都不会显示的原因;在自身内部调用option_manue时,数据会丢失。

解决此问题的方法是添加到代码的主要部分(不在函数内的代码部分)。保留option_manue功能,但不要在其中调用它。而是在主体中设置一个循环,根据需要多次调用option_manue

最后,除非你故意创建一个递归函数,否则最好避免在自身内部调用函数,因为这会产生意想不到的结果。

希望这有帮助!

答案 1 :(得分:0)

只需将product_list的定义移到函数option_manue之外。即使其成为全局变量

product_list = []

def option_manue():
  ...