我在我的代码中使用字典并将用户的输入与它进行比较,但是当用户输入任何内容并且只是点击进入时,程序会失败并给我一个关键错误。我尝试使用'尝试和除外'但是这样程序循环到我不想要的开头,我想让程序保持在子循环中,直到用户输入边界内的东西。
ftablet=open("tablet.txt").readlines() devicelist=["phone","tablet"]
dtablet = {}
for line in ftablet:
(key,val) = line.split(":")
dtablet[str(key)] = val.strip(",")
while True:
counter=0
device=""
while device not in (devicelist):
device=input(What is your device?: ").lower().replace(" ","")
print()
if device == "tablet":
usermodel=""
while usermodel != (dtablet["phonemodels"]):
print(dtablet["modelquestion"])
usermodel=input("Enter MODEL Here: ").lower().replace(" ","")
if usermodel in (dtablet["phonemodels"]):
name=""
while name != (dtablet[usermodel]):
print(dtablet["namequestion"])
print("Enter any of these : ",(dtablet[model]))
name=input("Enter NAME Here: ").upper().replace(" ","")
if name in (dtablet[usermodel]):
storage=""
while storage != (dtablet[name]):
print(dtablet["storagequestion"])
print("Enter any of these : ",(dtablet[name]))
storage=input("Enter STORAGE Here: ").upper().replace(" ","")
if storage in (dtablet[name]):
problem=input("What is the PROBLEM with your tablet?\nEnter Here: ").upper()
print()
for word in problem.split():
if word in (dtablet[storage]):
print(dtablet[word])
print("Thanks for using my troubleshooting program")
counter=1
if counter==0:
print("We dont have your keyword in out database")
else:
print("Sorry! We do not have that device in out database please choose from the ones listed above.")
这是我的文本文件,我将其转换为字典,称为' dtablet'。
modelquestion:你的平板电脑的型号是什么?
namequestion:平板电脑的名称是什么?
storagequestion:平板电脑的存储是什么?
问题:你的平板电脑有什么问题?
phonemodels:苹果,三星,索尼
苹果:IPAD1,IPAD2,IPAD3
三星:TAB1,TAB2,TAB3
索尼:XPERIAZ2,XPERIAZ3,XPERIAZ4
IPAD1:16GB,32GB,64GB
IPAD2:16GB,32GB,64GB
IPAD3:16GB,32GB,64GB
TAB1:16GB,32GB,64GB
TAB2:16GB,32GB,64GB
TAB3:16GB,32GB,64GB
XPERIAZ1:16GB,32GB,64GB
XPERIAZ2:16GB,32GB,64GB
XPERIAZ3:16GB,32GB,64GB
16GB:龟裂,破
32GB:龟裂,破
64GB:龟裂,破
CRACKED:问题=破解解决方案=带手机进行维修 店
BROKEN:问题=破解解决方案=将手机带到维修店
答案 0 :(得分:0)
您的问题是您没有在密钥"model"
周围加上引号。这意味着它无论如何也无法找到它。
另外,为什么不让它保持一个循环?它会更有效率。
答案 1 :(得分:0)
你们俩都有
dtablet[model] # the key is the model variable
和
dtablet["model"] # the key is the "model" string
在您的代码中,这是故意的吗?
如果用户按下'输入'然后model
将是一个空字符串,这个表达式:
model in dtablet[model]
如果dtablet [model]是一个字符串,将永远为真。
答案 2 :(得分:0)
首先,您的词典中没有“模型”键。您可以打印dtablet.keys()
并查找是否有“模型”。如果没有,则dtablet [“model”]将100%返回KeyError。
其次,当你输入while model != (dtablet["model"]):
时,因为model
是一个空字符串,如果dtablet [“model”]是一个字符串,那么它不会进入while循环,因为空字符串总是任何字符串的子字符串。
答案 3 :(得分:0)
您确实意识到while
循环同时包含break
选项和continue
选项吗?
如果您希望将程序保留在子循环中,直到用户输入边界内的某些内容为止。测试和continue
如果输入不是你想要的。