这是一个非常基本的片段加法器/查看器/移除器。我希望它工作的方式,用户将输入名称(字典键),然后输入文本正文(键的值),以添加条目。例如 - “Testsnippet”,它是值“这是一个测试文本片段”的关键。
我不知道它有什么问题。尝试使用“添加/修改”选项让我输入我想要输入的片段文本作为键的值,但它给了我这个错误:TypeError:'type'对象不支持项目分配
另外,尝试使用remove选项只会给我添加/修改选项,而不是remove选项。使用“视图”工作正常。
from sys import exit
clip_list = {'test':'whatever, this is a test'}
breaker = "--------------------"
while True:
print "What do you want to do?"
print "[view] [add/modify] [remove] [quit]"
action = raw_input("> ")
if action == "view":
view_choice = raw_input("Enter snippet name to view OR type 'all' for the entire list:\n> ")
if view_choice == 'all':
print clip_list
print breaker
else:
print clip_list[view_choice]
print breaker
elif action == "add" or "modify":
snippet_name = raw_input("Enter snippet name:\n> ")
snippet_input = raw_input("Text:\n> ")
dict[str(snippet_name)] = str(snippet_input)
print "Added!"
elif action == "remove":
snippet_name = raw_input("Enter snippet name to remove:\n> ")
del dict[snippet_name]
print "Deleted!"
elif action == "quit":
print "Goodbye!"
exit(0)
else:
print "What? Please enter a valid command!"
答案 0 :(得分:1)
我认为无论你在哪里写clip_list[str(snippet_name)]
,都意味着dict[str(snippet_name)]
。但是如果所有的键和值都相同,那么你应该使用一个集合。
答案 1 :(得分:0)
我同意Ignacio Vazquez-Abrams您应该使用全局字典clip_list。
顺便说一句:你的行动remove
也应该修改。
del clip_list[snippet_name]
或clip_list.pop(snippet_name)
答案 2 :(得分:0)
使用该代码,您会发现除“view”之外的任何命令都执行添加/修改操作。原因是您的添加或修改条件:
elif action == "add" or "modify":
您正在使用or
加入两个条件,因此如果其中一个子条件为真,则整体条件为真。第一个条件是action == "add"
,如果action
等于"add"
,则为真。 or
另一边的条件只是"modify"
。在if语句中,任何非空字符串都被视为true,因此该条件始终为true。它应该是:
elif action == "add" or action == "modify":