【问题标题】:Symbol-only string detection仅符号字符串检测
【发布时间】:2017-12-23 10:30:12
【问题描述】:

我对 Python(和一般编程)还很陌生,所以我经常会遇到非常愚蠢的问题,例如下面的问题。

我想要的是反复检查用户输入中的 all 字符是否是符号。当输入这样的输入时,我想打印那个字符串。

由于似乎没有专门测试符号的方法,我决定先测试字母,然后再测试数字,如果它们都为负数,那么它应该打印文本。

这是我的代码:

while True:

  symbols = input("Enter symbol string:")

  if symbols == symbols.isalpha():
    print (symbols.isalpha())
  elif not a == a.isalpha():
    print (a.isalpha())
    break

【问题讨论】:

  • “符号”是什么意思?你是指标点符号吗?你的意思是“除了字母和数字以外的任何东西”?空间?新线?重音字符?

标签: python python-3.x user-input symbols debug-symbols


【解决方案1】:

Farmer Joe 代码的略微更新版本。包括更好地处理输入。

symbols = input("Enter any characters:")

valid_symbols = "!@#$%^&*()_-+={}[]"

if symbols == '':
    print("None of characters have been entered. Please try again")
else:
    for ch in symbols:
        if symbols.isalnum() is True:
            print('No symbols have been detected in the input')
            break
        else:
            if ch not in valid_symbols:
                print('There are symbols mixed with other characters')
                break
    else:
        print('Your input contains symbols only')

【讨论】:

    【解决方案2】:

    我就是这样解决的..

    import re
    
    def start():
      global count
      for letter in SYMBOLS:
          if re.search(reg,SYMBOLS):
              count=count+1#just to count how many exist
              global S#if you want to store the result
              S=letter
              
          else:
              print(letter,': is not a symbol')
    
    
    count = 0
    SYMBOLS= input('Enter text\n')#INPUT
    reg =('[@_!#$£%^&*()<>?/\|}{~:]')#SYMBOL SEARCH
    start()
    

    【讨论】:

    • 你不必在循环外将 count 初始化为 0 吗?
    【解决方案3】:

    符号有点模糊,但这里有一个策略:

    symbols = input("Enter symbol string:")
    valid_symbols = "!@#$%^&*()_-+={}[]"
    
    has_only_symbols = True
    
    for ch in symbols:
        if ch not in symbols:
            has_only_symbols = False
            break
    
    if has_only_symbols:
        print('Input only had symbols')
    else:
        print('Input had something other than just symbols')
    

    上面的代码首先创建了一个符号列表,您希望确保该字符串是从名为valid_symbols 中创建的。接下来,它会创建一个名为has_only_symbols 的变量,该变量的初始值是True。接下来它开始检查输入字符串中的每个字符是否存在于valid_symbols 中。如果遇到无效字符,则将 has_only_symbols 的值更改为 False 并跳出 for 循环(无需检查字符串的其余部分)。循环完成后,它会检查 has_only_symbolsTrue 还是 False 并做相应的事情。

    另一方面,你的一些代码没有按照你的想法做:

    if symbols == symbols.isalpha():
        ...
    

    将测试您的输入字符串symbols 是否等于symbols.isalpha() 的结果,后者返回布尔值TrueFalse。你的意思可能只是:

    if symbols.isalpha():
        ...
    

    elif 语句也很奇怪。您已经开始引用一些名为 a 的变量,但您没有在发布的代码中的任何地方定义它。从您的描述和代码看来,您似乎打算让这个elif 语句也引用symbols 并调用isdigit 方法:

    if symbols.isalpha():
        ...
    elif symbols.isdigit():
        ...
    else:
        ...
    

    但是这在逻辑上并不完整,因为包含混合字母、数字和符号的字符串会漏掉。例如abc123!@# 将通过两个测试并被打印出来。你想要一些更独特的东西,比如我写的上面的代码。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      相关资源
      最近更新 更多