【问题标题】:Always return false in python outright, it is true总是在 python 中直接返回 false,这是真的
【发布时间】:2022-06-13 21:02:59
【问题描述】:

我正在用 python 编写一个程序,它需要一些字符串并通过一些条件对其进行测试

  1. 字符串的前 2 个字符必须是字母

2 。转向必须最多 6 个字符且至少 2 个字符

3 .字符串中间不能使用数字;他们必须在最后。例如,AAA222 是可以接受的……; AAA22A 是不能接受的

4 。使用的第一个数字不能是‘0’。”

5 . [' ', ',', ';', '-', '_'] 不允许使用这些字符

这是我目前的代码

def main():
    plate = input("Plate: ")
    if is_valid(plate):
        print("Valid")
    else:
        print("Invalid")


def is_valid(s):
    total = is_N_1(s) + is_N_2(s) + is_N_3(s) + is_N_4(s) + is_N_5(s)
    if total  == 5:
        #print (total)
        return True
    else:
        #print(total)
        return False


def is_N_1(s):
    if len(s)<7 and len(s)>3:
        return 1
    else:
        return 0

def is_N_2(s):
    if s[0:2].isalpha():
        return 1
    else:
        return 0

def is_N_3(s):
    for i in s:
        if s[-1].isalpha() and i.isnumeric():
            return 0
        else:
            return 1

def is_N_4(s):
    t = []
    for i in s:
        if i.isdigit():
            t.append(i)

    if len(t)<=0:
        return 1
    else:
        if t[0] == '0':
            return 0
        else:
            return 1

def is_N_5(s):
    not_allow =[' ', ',', ';', '-', '_']
    for i in s :
        for _ in not_allow :
            if i == _:
                return 1
            else :
                return 0
main()

这是在输出中给出错误的输入

1 . input of "CS50" 
    expected "Valid", not "Invalid\n"

2 . input of "ECTO88"
    expected "Valid", not "Invalid\n"

3 . input of "NRVOUS"
    expected "Valid", not "Invalid\n"

任何人都可以看看这个并告诉我我做错了什么,我堆叠了2个小时,我没有找到解决方案?

【问题讨论】:

  • 向我们展示您为程序提供的输入,以及它产生的输出。
  • 您能否提供一个最小的测试用例,在该测试用例中您的脚本会产生错误的输出?
  • 由 Desty 和 @Piotr-Grzybowski 修复,非常感谢你们俩

标签: python


【解决方案1】:

下面是如何逐一检查s中的字符串是否有not_allow中不允许的字符。我认为只要修复这部分就可以解决它。

def is_N_5(s):
    not_allow =[' ', ',', ';', '-', '_']
    for i in s :
        if i in not_allow:
            return 0
    return 1

【讨论】:

  • 这不是真的。下划线是用于忽略值的约定,但下划线是完全有效的标识符。这不是他麻烦的原因。
  • 这完全不是真的,_是很好的python变量名。
【解决方案2】:

在第 5 个条件下,您应该反转返回值。现在,当使用不允许的字符之一时返回 1。

def is_N_5(s):
    not_allowed = [' ', ',', ';', '-', '_']
    for i in s: 
        if i in not_allowed:
            return 0
     return 1

【讨论】:

  • 是的,这是问题的一部分。另一部分是在他知道所有字符都正常之前,他不能返回“1”。现在,它只会检查第一个字符不是空格。他必须删除“else”,并在两个循环完成后在函数末尾添加“return 1”。
【解决方案3】:

您的函数 is_N_5 引用无效。 not_allwo 应更新为 not_allow

def is_N_5(s):
    not_allow =[' ', ',', ';', '-', '_']
    for i in s :
        for _ in not_allow :
            if i == _:
                return 1
            else :
                return 0

【讨论】:

    【解决方案4】:

    你可以在函数中使用这个方法 srt.isalum() is_N_5

    如果 s.isalum(): 返回 其他

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-27
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-20
      • 2021-11-05
      • 2018-11-05
      相关资源
      最近更新 更多