繁体   English   中英

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

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

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

这是我到目前为止的代码:


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 文件的一部分。 用户在运行时在“输入”中键入的值,或者程序运行时从数据文件中读取的值,都是“数据”。

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

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

stringList(listName)

stringList(globals()[listName])

你的程序将越过你被卡住的那一点。 (虽然我没有检查进一步的错误)

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

此外,还有其他几点:您不应该在 function 中使用sys.exit :只需从它返回,并最终让您的代码执行“脱离”主文件的底部。 此外,避免使用常见的 Python 内置函数作为变量名:这会让您的读者感到困惑,并且可能会阻止您使用这些结构。 在这种情况下,在你的函数中你使用“列表”。 更喜欢“lst”、“sequence”、“list_”或类似的,以免影响 Python 自己的“list”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM