代码之家  ›  专栏  ›  技术社区  ›  Neel

如何修复python中的find(),因为它还为不存在的子字符串返回一个true条件?

  •  2
  • Neel  · 技术社区  · 7 年前

    如果整数是1或-1,打印出单数形式,否则打印出给定名词的复数形式。

    find() 用于检查字符串中是否存在子字符串的函数返回true,即使条件为false,也会导致错误的输出。

    我已经尝试过逐个检查角色,但这看起来并不是解决问题的一个真正聪明的方法。

    这是我的密码:

    def singularPlural(String1, String2):
       if String2.isnumeric():
        if(int(String2)==-1 or int(String2)==1):
            print(String1)
        else:
            if(String1[-1] == 'o' or String1[-1] == 's' or String1[-1] == 'x' 
               or String1[-1] == 'z' or String1.find("ch", len(String1)-3, len(String1))):   #My mistake is probably here.
                print(String1 + "es")
            elif(String1[-1] == 'y'):
                print(String1[:-1:]+"ies")
            elif(String1.find("um", len(String1)-3)):
                printf(String1[:-2:]+"a")
            else:
                print(String1 + "s")
       else:
        if String1 in String2:
            print("Singular : {}".format(String1))
            print("Plural : {}".format(String2))
        elif String2 in String1:
            print("Singular : {}".format(String2))
            print("Plural : {}".format(String1))
        else:
            print("Invalid Input")
    def main():
    Str1 = input("Enter a word: ")
    Str2 = input("Enter a word or a number: ")
    singularPlural(Str1, Str2)
       if __name__ == "__main__":
         main()
    

    投入1:

    Arch,2

    宝贝,2岁


    预期产出1:1

    实际产出1:拱门

    实际输出2:Babyes<&书信电报;失败

    3 回复  |  直到 7 年前
        1
  •  3
  •   Feelsbadman    7 年前

    find()在失败时返回-1,而不是false。 Reference

    所以你可以在哪里检查验证 find()
    String1.find("ch", len(String1)-3, len(String1)) > 0):

    或者您可以简单地使用切片来获取最后两个字符

    if((String1[-1] in ('o','s','x','z')) or String1[-2:] == "ch"):
        print(String1 + "es")
    
        2
  •  1
  •   VillageMonkey    7 年前

    find 您需要检查以下内容。
    String1.find("ch", len(String1)-3, len(String1))) != -1

        3
  •  1
  •   Feelsbadman    7 年前

    find() 方法返回 -1 . 您的代码应该是:

    if(String1[-1] == 'o' or String1[-1] == 's' or String1[-1] == 'x' 
    or String1[-1] == 'z' or String1.find("ch", len(String1)-3, len(String1)) != -1):   
                print(String1 + "es")