【问题标题】:Python- checking for letters, numbers, and underscore character.Python - 检查字母、数字和下划线字符。
【发布时间】:2016-02-09 10:13:51
【问题描述】:

我必须编写一个程序来检查用户的变量名是否有效。这些是我正在检查的规则:只允许使用字母、数字和下划线字符。第一个字符不能是数字。

我不确定我做错了什么。每次我运行程序时,它都会告诉我它是一个有效的变量,即使对于无效的输入也是如此。

这是我的程序:

import string

def valid(name):
    for character in (name):
        if name[0].isdigit():
            name==False
            break 
        else:
            if character.isalnum() and character is ('_'):
                name==True
            else:
                name==False
    return

def main():
    name=input("Enter your Python variable name: ")

    while name != "done":
        valid(name)

        if True:
            print("This is a valid variable name.")

        else:
            print("This is not a valid variable name.")

        name=input("Enter your Python variable name or 'done': ")

main()

这是一个示例输出(如果操作正确):

Enter your Python variable name: high_temp
This is a valid variable name.

Enter your Python variable name or "done": highTemp2
This is a valid variable name.

Enter your Python variable name or "done": 2_high_temp
This is not a valid variable name.

Enter your Python variable name or "done": done

提前谢谢你!

【问题讨论】:

标签: python string function


【解决方案1】:

我会这样写:

def valid(name):
    return not name[0].isdigit() and all(c.isalnum() or c == '_' for c in name)

但也许现在这会更有意义:

def valid(name):
    if name[0].isdigit():
       return False
    for c in name:
       if not (c.isalnum() or c == '_'):
          return False
    return True

def main():

    while True:

        name = input("Enter your Python variable name or 'done': ")

        if name == "done":
           break

        if valid(name):
            print("This is a valid variable name.")
        else:
            print("This is not a valid variable name.")

main()

【讨论】:

    【解决方案2】:

    另一个pythonic解决方案,

    import string
    
    def valid(name):
       if name[0].isdigit():
           return false
       accepted_chars=string.digits + string.ascii_lowercase + '_'
       return all(item for name if item.lower() in accepted_chars)
    

    【讨论】:

      【解决方案3】:

      看起来你可以用isidentifier方法逃脱

      return name.isidentifier()
      

      【讨论】:

      • 要符合 PEP 8,还要检查 name.islower()
      【解决方案4】:
      if True
      

      总是True。你的意思是说

      if valid(name)
      

      您只需拨打valid这一次电话

      【讨论】:

      • 啊,我明白了。我改变了它,但现在一切都无效了!
      猜你喜欢
      • 1970-01-01
      • 2013-06-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多