【问题标题】:Checking a string for punctuation using loops [duplicate]使用循环检查字符串的标点符号[重复]
【发布时间】:2018-10-19 15:23:37
【问题描述】:

如何使用循环检查字符串是否有标点符号。有人告诉我使用 in 运算符

string = input("Enter a string")

for char in string:
    if char in "'.,;:?!":
        print("that string contains  punctuation")
        break 
    else:
        print("that string contains punctuation")
        break

【问题讨论】:

  • @mindfolded break 是在找到标点符号后短路 for 循环所必需的。
  • 您的解决方案几乎是正确的。第一次休息很重要,但第二次休息是错误的。您应该将else 子句放在for 下面而不是if

标签: python


【解决方案1】:

您可以使用for-else 构造来打印字符串不包含标点符号的消息,如果它完成循环却没有找到一个:

string = input("Enter a string")

for char in string:
    if char in "'.,;:?!":
        print("that string contains punctuation")
        break 
else:
    print("that string does not contain punctuation")

【讨论】:

    【解决方案2】:

    那个代码是对的。

    if 部分是正确的,因为只要你找到任何标点符号,你的目标就达到了,你不需要继续寻找,所以你可以正确地 break 跳出循环。

    但是else 部分是错误的,因为如果当前字符不是标点符号,您仍然需要继续查找——字符串的其余部分可能有标点符号。消息也是错误的;它应该说字符串没有有标点符号。

    您可以重构代码以利用 for/else 构造:

    string = input("Enter a string")
    
    for char in string:
        if char in "'.,;:?!":
            print("that string contains punctuation")
            break
    else:
        print("that string does not contain punctuation")
    

    如果循环一直到字符串末尾而不调用break,则else 将执行。

    【讨论】:

      【解决方案3】:

      使用 string 模块的 punctuation 为您处理所有标点符号:

      import string
      
      if any(x in string.punctuation for x in s):
          print("that string contains punctuation")      
      else: 
          print("that string contains no punctuation")
      

      s 是你的字符串。

      【讨论】:

        【解决方案4】:

        考虑到字符串输入会比标点字符串长,或者反过来检查

        string = input("Enter a string")
        
        punch_string= "'.,;:?!"
        for char in punch_string:
            if char in string:
                print("that string contains punctuation")
                break
        else:
            print("that string does not contain punctuation")
        

        使用集合交集的较短版本

            if set(string).intersection(set("'.,;:?!" )):
                print("that string contains punctuation")
        else:
            print("that string does not contain punctuation")
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-10-19
          • 1970-01-01
          • 2013-12-09
          • 1970-01-01
          • 2021-10-06
          • 2018-06-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多