如何让 python 将垃圾邮件识别为列表而不是字符串

How do I make python recognise spam as a list and not a string

我试图让我的程序接受用户输入的列表并将其用作 stringList 函数的参数,但它一直认为该列表只是一个字符串。我如何才能将其视为实际列表?

这是我目前的代码:


spam = ["apples", "bananas", "tofu", "cats"]
sillyList = []

def stringList(list):
    ending = len(list)
    
    try:
        print()
        for item in list[0: ending - 1]:
            print(item, end=", ")
        print("and " + list[ending - 1])

    except:
        print("Error: List contains no items. Do you wish to try again?")
        answer = input().lower()
        if answer == "yes" or "y":
            print()
            askListName()
        elif answer == "no" or "n":
            sys.exit()

def askListName():
    print("Enter the list name:")
    listName = input()

    try:
        stringList(listName)
    except:
        print("Error: Invalid list name.")

askListName()

如果输入由空格分隔或如下所示:

'apples oranges kiwi'

listName = input()
fruit = listName.split()
stringList(fruit)

如果输入由逗号分隔或如下所示:

'apples,oranges,kiwi'

listName = input()
fruit = listName.split(',')
stringList(fruit)

string.split 方法通过您提供的参数分隔字符串。所以 .split('|') 会用 '|' 分隔输入字符串特点。如果您省略该参数,则默认使用空格分割字符串。

程序中的变量名称是硬编码的 - Python 文件的一部分。 用户在运行时在“input”中键入的值,或程序为运行时从数据文件中读取的值是“data”。

这两者是两个截然不同的东西,你应该通过你的学习方式来了解它们的不同。

目前:Python是少数允许“变量名”和“数据”“桥接”的语言之一:有一种特殊的数据结构,即字典,Python 使用它们来保存变量名。 “globals()”调用将 return 一个包含程序中所有全局变量的字典,因此如果您从那里获取 spam 列表,则可以检索它。 只需更改此行:

stringList(listName)

stringList(globals()[listName])

并且您的程序将越过您遇到的问题。 (虽然我没有检查进一步的错误)

将来,如果您希望用户输入与程序中键入的名称进行交互,建议将此数据放在一个单独的、明确创建的字典中 - 如:mydata = {"spam": ["apple", ...], "sillyList": [...]} ,然后所有用户输入必须是 mydata 键之一,并且不能破坏您的程序。

此外,还有其他要点:您不应该在函数内部使用 sys.exit:只是从函数中使用 return,并最终让您的代码执行“掉落”在函数的底部你的主文件。此外,避免使用 common Python built-ins 作为变量名:这会让您的读者感到困惑,并且可能会阻止您使用这些结构。在这种情况下,在你的函数中你使用“列表”。更喜欢“lst”、“sequence”、“list_”或类似的,以免遮盖 Python 自己的“list”。