【问题标题】:I have to check if the string contains: alphanumeric, alphabetical , digits, lowercase and uppercase characters我必须检查字符串是否包含:字母数字、字母、数字、小写和大写字符
【发布时间】:2018-07-13 08:17:49
【问题描述】:
def fun(s):
    for i in s:
        if i.isalnum():
            print("True")
        if i.isalpha():
            print("True")
        if i.isdigit():
            print("True")
        if i.isupper():
            print("True") 
        if i.islower():
            print("True")
s=input().split()
fun(s)

为什么它只打印一次,即使它在 for 循环中

【问题讨论】:

  • 输入是什么?您是否只输入一个单词?输入后尝试打印s
  • 测试小函数意外程序行为的好工具是PythonTutor

标签: python string python-3.x


【解决方案1】:

如果您想检查整个字符串是否包含这些不同的字符类型,那么您实际上不必遍历字符串。您可以使用 any 关键字。

def fun(s):
    if any(letter.isalnum() for letter in s):
        print("Is alphanumeric")
    if any(letter.isalpha() for letter in s):
        print("Is alpha")
    if any(letter.isdigit() for letter in s):
        print("Is digit")
    if any(letter.isupper() for letter in s):
        print("Is upper")
    if any(letter.islower() for letter in s):
        print("Is lower")

s=str(input())
fun(s)

【讨论】:

  • 谢谢队友!!但是当我传递 s= integer 值时遇到问题,因为它会产生运行时错误。我应该怎么做才能同时使用 int 和 string 并为它们正常工作
  • 我现在已经编辑过了。所需要的只是将输入值转换为字符串。
【解决方案2】:
string = input()

print (any(c.isalnum() for c in s))
print (any(c.isalpha() for c in s))
print (any(c.isdigit() for c in s))
print (any(c.islower() for c in s))
print (any(c.isupper() for c in s))

【讨论】:

  • Python 有一个内置的 print(any()) 函数,它在给定的情况下返回 True 或 False
【解决方案3】:
if __name__ == '__main__':
    s = input()
    print(any(c.isalnum()  for c in s))
    print(any(c.isalpha() for c in s))
    print(any(c.isdigit() for c in s))
    print(any(c.islower() for c in s))
    print(any(c.isupper() for c in s))

使用任何函数为 python 3 更新代码,而不使用 if else

【讨论】:

    【解决方案4】:

    您将字符串方法应用于整个单词而不是单个字符。您没有应用 anyall 条件来检查每个单词中的 anyall 字符是否满足每个条件。

    例如,每个单词都有一个any 条件:

    def fun(s):
        for i in s:
            print('\n', i)
            if any(letter.isalnum() for letter in i):
                print('Alnum', True)
            if any(letter.isalpha() for letter in i):
                print('Alpha', True)
            if any(letter.isdigit() for letter in i):
                print('Digit', True)
            if any(letter.isupper() for letter in i):
                print('Upper', True) 
            if any(letter.islower() for letter in i):
                print('Lower', True)
    
    s = input().split()
    fun(s)
    

    示例结果:

    One test 123
    
     One
    Alnum True
    Alpha True
    Upper True
    Lower True
    
     test
    Alnum True
    Alpha True
    Lower True
    
     123
    Alnum True
    Digit True
    

    【讨论】:

    • 但是如果我应用到每个单独的字符,那么 alnum 永远不会是真的,因为它必须有一个数字和字母。如果我检查每个字符,它们中的大多数会返回 false。我想我可以单独检查每个条件的单词(比如 one 或 test ),而不是像 ['o','n','e'] 这样的每个字符。欢迎提出建议。也告诉我我在这里无法理解的内容
    • @palak,您应该准确定义 in your question, not as a comment 您想要实现的目标。目前,还不清楚。我为每个单词提供了一种解释,即any
    【解决方案5】:
    if __name__ == '__main__':
        s = input()
        print (any([c.isalnum() for c in s]))
        print (any([c.isalpha() for c in s]))
        print (any([c.isdigit() for c in s]))
        print (any([c.islower() for c in s]))
        print (any([c.isupper() for c in s]))
    

    【讨论】:

    • 这个仅代码的答案似乎没有回答为什么 true 只打印一次的问题,尽管它确实显示了另一种方法。
    【解决方案6】:
    if __name__ == '__main__':
        s = input()
        print (any([c.isalnum() for c in s]))
        print (any([c.isalpha() for c in s]))
        print (any([c.isdigit() for c in s]))
        print (any([c.islower() for c in s]))
        print (any([c.isupper() for c in s]))
    

    使用 any 关键字,检查字母表中的所有字母并返回 true 任何一个字母满足它。

    【讨论】:

      【解决方案7】:

      any() 函数是 Python 中的一个内置函数,它返回 true 如果给定迭代的任何元素 (列表、字典、元组、集合等)为 True,否则返回 False。

      if len(s) > 0 and len(s) < 1000:
          print(any([i.isalnum() for i in s]))
          print(any([i.isalpha() for i in s]))
          print(any([i.isdigit() for i in s]))
          print(any([i.islower() for i in s]))
          print(any([i.isupper() for i in s]))
      

      【讨论】:

        【解决方案8】:
        if __name__ == '__main__':
            s = input()
            a1,a2,a3,a4,a5=False,False,False,False,False
          
            for i in s:
                a1=True if i.isalnum()==True else a1
                a2=True if i.isalpha()==True else a2
                a3=True if i.isdigit()==True else a3
                a4=True if i.islower()==True else a4
                a5=True if i.isupper()==True else a5
            
            print(a1,a2,a3,a4,a5,sep="\n")      
        

        【讨论】:

          猜你喜欢
          • 2012-02-06
          • 2017-03-13
          • 2018-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多