如何让 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”。
我试图让我的程序接受用户输入的列表并将其用作 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”。