我有以下几行:
text = str("")
while text != "q" or "quit":
print
print(" Select from the following menu")
print(" A. Add Employee")
print(" B. Remove Employee")
print(" C. Find Employee")
print(" D. Display the current directory")
print(" Q. Quit")
text = str.lower(input("Enter your selection: "))
print("Current selection is ", text)
if text == "a":
name_emp = input("Enter the name of employee: ")
num_emp = input("enter the 4 digit number of the employee: ")
employees[name_emp] = num_emp
continue
if text == "b":
del_emp = input("Enter the name of the empoyee to be removed: ")
del employees[del_emp]
continue
if text == "c":
find_emp = input("Enter the name of the employee to be searched: ")
if(find_emp in employees):
print(find_emp,"'s number is", employees[find_emp])
continue
else:
print ("NOT FOUND")
continue
if text == "d":
print("Current Directory")
print()
print(employees)
continue
if text == "q":
break
else:
print("Invalid Selection")
continue
最初,我无法匹配文本输入选择的大写和小写字母,直到我在输入字符串和我的“if”语句上添加str.lower函数,我将匹配更改为小写字母。在这种情况下,如果我输入“a”和“A”或b“和”B“,它可以正常工作。
此外,在此之前,我的if语句与“A”匹配,并且此程序无效。它保持匹配“else”部分的最后一个语句。
我想知道str.lower在这种情况下的行为以及为什么我需要在if语句中匹配小写字符串?是因为此方法会自动将字符串转换为小写吗?
答案 0 :(得分:0)
我认为你的问题中存在格式化问题,因为循环没有显示在代码块中。
我知道你在while循环中使用它,在每个continue
中使用if
语句管理独占条件,其中一些答案并未注意到。
最好不要在循环上委托管理if
语句的独占条件。
另外,请勿使用str.lower("A string")
但A string".lower()
。两者都做同样但前者是调用类函数将参数传递给self属性,后者调用字符串对象方法(没有任何参数)。两者都以小写形式返回字符串,因此"一个字符串",但对象应与其方法一起使用,而不是类方法。因为原因。
因此,输入函数返回一个字符串,该字符串在分配给文本变量之前转换为小写。该变量应符合您的一个案例。
答案 1 :(得分:0)
最初的问题是if/elif
,但我认为在重构代码时存在另一个改进的机会。
此解决方案有助于将代码分解为更可测试的块,而且责任更少,这总是很好。
这是使用字典来分派方法,这是你可以用一流函数做的很多(很多!)很酷的事情之一。这可以进一步增强,以减少while循环中发生的工作量,但我认为这可能是朝着正确方向迈出的一步。
def add_employee(employees):
name_emp = input("Enter the name of employee: ")
num_emp = input("enter the 4 digit number of the employee: ")
employees[name_emp] = num_emp
def remove_employee(employees):
del_emp = input("Enter the name of the empoyee to be removed: ")
del employees[del_emp]
def find_employee(employees):
find_emp = input("Enter the name of the employee to be searched: ")
if(find_emp in employees):
print(find_emp,"'s number is", employees[find_emp])
else:
print ("NOT FOUND")
def display_directory(employees):
print("Current Directory")
print()
print(employees)
text = str("")
while text not in ("q" or "quit"):
print
print(" Select from the following menu")
print(" A. Add Employee")
print(" B. Remove Employee")
print(" C. Find Employee")
print(" D. Display the current directory")
print(" Q. Quit")
text = str.lower(input("Enter your selection: "))
print("Current selection is ", text)
options = {
'a' : add_employee,
'b' : remove_employee,
'c' : find_employee,
'd' : display_directory
}
if text == "q":
break
else:
if text in options:
options[text](employees)
else:
print("Invalid Selection")
continue
答案 2 :(得分:-1)
必须是:input("Enter your selection: ").lower()
lower()
是字符串的函数,并且要返回该字符串的lowercase()
,它不需要提供任何参数。虽然,这只是语义和无益的。
答案 3 :(得分:-1)
lower()没有错。相反,整个脚本遍历所有选项,最终的if / else(检查是否" q")总是触发。因为在任何其他条件下," q"是假的,其他条件触发
你应该使用elif语句。
正确的代码是:
if text == "a":
name_emp = input("Enter the name of employee: ")
num_emp = input("enter the 4 digit number of the employee: ")
employees[name_emp] = num_emp
elif text == "b":
del_emp = input("Enter the name of the empoyee to be removed: ")
del employees[del_emp]
elif text == "c":
find_emp = input("Enter the name of the employee to be searched: ")
if(find_emp in employees):
print(find_emp,"'s number is", employees[find_emp])
else:
print ("NOT FOUND")
elif text == "d":
print("Current Directory")
print()
print(employees)
elif text == "q":
break
else:
print("Invalid Selection")