无论通过什么参数,最终条件都会继续发生

时间:2018-02-22 02:38:37

标签: python string

我有以下几行:

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语句中匹配小写字符串?是因为此方法会自动将字符串转换为小写吗?

4 个答案:

答案 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")