这里是新的,也是Python的新手。放轻松我。 我有一个.bat,允许用户输入IP或主机名,如果有效则会ping目标,然后允许执行某些操作。但是,它相当不灵活,我认为我已经达到了用这种方法做的极限。 我决定在python中创建相同的脚本以允许更灵活的方法,其中可以通过词典定义多个标准,而不是让用户逐个输入它们,这有望避免用户错误/拼写错误。
我已经完成了代码的第一步,即要求用户输入一个关键字,然后根据其中一个词典进行检查,如果正确设置了一些标准并允许用户继续输入他们的IP。
我的问题是: 1。 根据字典打印的顺序,将取决于接受哪些关键字。 例如,如果字典按顺序打印;
{'TestGame': ['test', 'testing', 'tst'], 'ZestGame': ['zest', 'zesting', 'zst']}
然后脚本只接受单词test,testing或tst。 如果' Zestgame'首先打印。
和2。 如果用户输入了不允许的单词,则应显示消息
The project or game you entered was not recognised.
然后循环以要求他们输入有效的关键字。但是它会跳过上述消息,immediatley要求用户
Enter your PROJECT or GAME
这些想法或解决方案?
完整代码:
import os, sys, ipaddress
# Allowed Project names with related keywords.
Projects = {
"ZestGame": ['zest', 'zesting', 'zst'],
"TestGame": ["test", "testing", "tst"]}
print(Projects)
# Email format tied to Project
ProjectEmails = {
"ZestGame": "zsti-zesty",
"TestGame": "tsti-testy"}
# Unique 32 character ID.
ProjectSCIDs = {
"ZestGame": "246zesty810scid12141618202224262",
"TestGame": "123testy456scid78910111213141516"}
# Step 1 Start - Set ActiveProject and associated information.
InputResult = "NOTFOUND"
while True:
if InputResult == "Valid":
break
ActiveProject = "NOTFOUND"
ActiveProject = "NOTFOUND"
ActiveSCID = "NOTFOUND"
UserInput = input("Enter your PROJECT or GAME:\n")
# Checks UserInput against Projects dictionary, loops if invalid.
for key, val in Projects.items():
if UserInput.lower() in val:
ActiveProject = key
# Sets ActiveProject, ActiveEmail and ActiveSCID if UserInput input result was OK.
for key, val in ProjectEmails.items():
if ActiveProject in key:
ActiveEmail = (val+"@email.com")
for key, val in ProjectSCIDs.items():
if ActiveProject in key:
ActiveSCID = val
InputResult = "Valid"
break
else:
print("The project or game you entered was not recognised.")
InputResult = "NOTFOUND"
print("\nThe user selected "+ActiveProject)
print(ActiveEmail+" "+ActiveSCID)
答案 0 :(得分:2)
请注意,Python dics未订购,更改代码并使用OrdererDict使用广告订单
让我举一个例子:
>>> d = {k:v for k,v in zip("asdfghjkl", range(10))}
>>> d
{'a': 0, 'd': 2, 'g': 4, 'f': 3, 'h': 5, 'k': 7, 'j': 6, 'l': 8, 's': 1}
>>> od = OrderedDict(zip("asdfghjkl", range(10)))
>>> od
OrderedDict([('a', 0), ('s', 1), ('d', 2), ('f', 3), ('g', 4), ('h', 5), ('j', 6), ('k', 7), ('l', 8)])
注意第一个词典中的's'
键是如何位于"最后位置"它,但在有序的词典中,它处于"第二个位置"因为它应该插入。
要检查用户输入是否在任何词典中,只需在该词典中使用.has_key(ActiveProject)
方法
示例:
检查1 dict:
if not Projects.has_key(ActiveProject):
print "The project or game you entered was not recognised."
检查所有dicts:
if not any(map(lambda x: x.has_key(ActiveProject), [Projects, ProjectEmails])):
print "The project or game you entered was not recognised."
else:
do whatever