【问题标题】:How to make my output return True if a certain criteria is met?如果满足特定条件,如何使我的输出返回 True?
【发布时间】:2021-11-16 12:45:06
【问题描述】:

所以我编写了这段代码来查找我的字符串中是否有一个大写字母和一个数字,这就是我目前所拥有的

def passwordOK(password: str):
    for char in password:
        if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" and "1234567890":
            return True
        else:
            return False
print(passwordOK(password='roskaisHsodihf'))

但只有在第一个变量被修改时才会返回结果,因此只有在第一个变量是数字或大写字母时才会输出True 应该对我的代码进行哪些更改?

请不要使用 import 并尽量使用尽可能少的内置函数

【问题讨论】:

标签: python list


【解决方案1】:
def passwordOK(txt):
   return True if any(t.isupper() for t in txt) and any(t.isdigit() for t in txt) else False

【讨论】:

    【解决方案2】:

    3 个问题:

    1. 您总是从第一次循环迭代中返回
    2. if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" and "1234567890" 并不代表你认为的那样。
    3. 如果是这样,您的逻辑仍然是错误的。 char 不能同时是大写字母和数字。如果你的意思是or,那么两者中的一个仍然无法确认另一个位置的存在。

    你需要的逻辑应该遵循以下几行:

    def passwordOK(password: str):
        upper = digit = False
        for char in password:
            if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" and "1234567890":
                upper = True
            if char in "1234567890":
                digit = True
            if upper and digit:
                return True
        return False
    

    如果你要使用一些实用程序,你可以避免一些样板代码:

    from string import ascii_uppercase, digits
    
    def passwordOK(password: str):
        upper = any(c in ascii_uppercase for c in password) 
        digit = any(c in digits for c in password)
        return upper and digit
    

    甚至更短,使用测试方法:

    def passwordOK(password: str):
        return any(map(str.isupper, password)) and any(map(str.isdigit, password))
    

    【讨论】:

      【解决方案3】:

      根据您的代码判断,逻辑比较不会像您期望的那样工作。 and 关键字的左右各部分将返回 TrueFalse。因此,您需要重复 char 变量来检查您的第二个字符列表,如下所示:
      if char in "ABCDEFGHIJKLMNOPQRSTUVWXYZ" and char in "1234567890":

      这种情况下,非空字符串默认返回True

      编辑:
      您还必须使用or,因为and 只会在满足两个条件时返回True。单个字符不能同时位于两个分离集中。
      这里的一种方法是在满足任一条件时设置一个变量,并且一旦满足两个条件,您就会返回 True

      【讨论】:

      • 这只是答案的一半(或者,问题太宽泛了) - 代码仍然只会查看单词中的第一个字符。
      • 而且这个字符永远不会出现在这两个字符串中。
      猜你喜欢
      • 2021-01-15
      • 2010-11-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 2021-05-03
      • 2017-10-29
      • 1970-01-01
      相关资源
      最近更新 更多