【问题标题】:Input is null, empty输入为空,为空
【发布时间】:2019-01-27 23:00:25
【问题描述】:

我有代码可以检查是否有任何空间或只是空的。我尝试重新制作 =,“”,'',==。但我没有成功。有什么问题?当我输入密码时,它总是说我在打印功能中遇到的错误。

while True:
    password = getpass.getpass("~ Please pick a password, for user - {n}\n".format(n=name))
    fontas = " "
    fontas2 = ' '
    if fontas and fontas2 in password:
        print("~ Password can't contain a spaces!\n")
        continue
    else:
        break

编辑* 我正在添加一个 GIF。当我稍微更改代码时,它向您展示了它现在是如何工作的。

第一次尝试我正在尝试腾出一个空格,在我没有输入任何内容之后,最后一次我输入了普通关键字 - ffawt

*我无法添加GIF文件,所以我在Gyazo平台上传链接。

链接-enter link description here

【问题讨论】:

  • 我不明白if fontas 的意思。值不能改变
  • 这完全没有意义。首先" "' ' 之间没有区别。其次,如果有,它应该是or 组合,而不是and。第三,您没有检查两个值是否都在密码中,密码应该是fontas in password and fontas2 in password
  • 如果密码是-“Rauna51”,那会因为空格而出错,对吧?但是如果输入为空怎么办? - ““ 空白的?我在代码中使用 Fontas = '' sorry for space beetwhen ' '。
  • 每个字符串中都有一个空字符串,不管是否为空:"" in """" in "password""" in "pass word"都是真的。

标签: python


【解决方案1】:

我希望这会有所帮助:

while True:
    Password = input('Enter a password: ')
    if " " in Password or len(Password) == 0:
        print("~ Password can't contain a spaces!")
        continue

    #if 'if' statement evaluates to True
    print(Password)
    break

编辑:

虽然这将“完成工作”,但还有其他方法可以评估 python 中的字符串是否为空!

空字符串将评估为布尔值 (False):

Password = ""
if not Password:
      print("isempty")
>>> isempty

话虽如此,上面的代码可以重构为:

while True:
      Password = input('Enter a password: ')
      #Make 'falsy' evaluation of password
      if not Password or " " in Password:
          print("~ Password can't contain a spaces!")
          continue

     #if 'if' statement evaluates to True
      print(Password)
      break

【讨论】:

  • len(Password) == 0 对空字符串的检查不是很好,并且生成的错误消息实际上与输入的问题不匹配。
  • @jonrsharpe 打印消息与逻辑不匹配 100%,但他想要一个块:检查密码字符串中是否有空格 ` if " " in Password`,只是空 @987654325 @。您将如何更新此块
  • 您没有向 OP 解释他的代码有什么问题。您不应该计算长度来检查是否为空。如果这被否决了,我不会感到惊讶
  • @BlueSheepToken,感谢您提请我注意 :)!我对 Falsy 评估而不是字符串长度上的字符串空虚逻辑进行了一些编辑。这应该更顺利地处理边缘情况
【解决方案2】:

您应该使用正则表达式。正则表达式可以检查字符串中的" "。例如

fontas = password.match(' ')
if fontas:
    print('Match found: ', fontas.group())
else:
    print('No match')

查看文档以获取更多信息。 https://docs.python.org/3/library/re.html

【讨论】:

  • 为什么有必要这样做? fontas2 in password 很好,而且比正则表达式更有效,问题在于其他一切。
  • 根本没有帮助。
  • 显然不是,否则你不会遇到这种问题。如果您正在处理密码,您可能想要检查的不仅仅是空格,所以正则表达式无论如何都会非常有用。
【解决方案3】:

要检查提供的字符串是否为空,或包含任何空格,请执行此操作

while True:

    password = getpass.getpass("~ Please pick a password, for user {n}\n".format(n=name))
    fontas = " "
    if fontas in password:
        print("~ Password can't contain a spaces!\n")
        continue
    elif password == '':
        print("~ Password cannot be empty!\n")
        continue
    else:
        break

【讨论】:

    【解决方案4】:

    我相信这就是你想要的:

    if password and (" " in password):
        print("BAD")
    else
        print("GOOD")
    

    它首先检查是否有密码,然后检查是否有空格

    【讨论】:

    • 该条件的第一部分没有意义;如果是空字符串,肯定不会有空格!
    • 别帮忙,我不明白这些代码背后的问题是什么。
    【解决方案5】:

    fontasfontas2是一样的,你可以这样做

    if ' ' in password:
        print("~ Password can't contain a spaces!\n")
        # ...
    

    一个完整的例子:

    import getpass
    
    # ...
    
    name = 'Alex' # considering a user called Alex
    
    while True:
        password = getpass.getpass(
            "~ Please pick a password, for user - {n}\n".format(n=name))
        fontas = " "
        if fontas in password:
            print("~ Password can't contain a spaces!\n")
            continue
        elif not password:
            print("~ Password can't be empty!\n")
            continue
        else:
            break
    

    【讨论】:

    • 你看,你做了一个代码,它看看是否有任何空间,但它不会检查代码是否为空,为空。
    • 如果要检查是否没有提供密码,请检查编辑后的答案。
    猜你喜欢
    • 2017-06-22
    • 2016-08-10
    • 1970-01-01
    • 2022-10-24
    • 2022-06-16
    • 2015-12-07
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多