首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对"Geek and New job“问题的错误回答

对"Geek and New job“问题的错误回答
EN

Stack Overflow用户
提问于 2022-07-14 13:44:09
回答 2查看 46关注 0票数 -2
代码语言:javascript
复制
    #code
testcases=int(input())
while testcases!=0:
    s=input()
    lower,upper,numeric=0,0,0
    
    for i in s:
        if ord(i)>=49 and ord(i)<=57:
            numeric+=1
        elif ord(i)>=65 and ord(i)<=90:
            upper+=1
        
        elif ord(i)>=97 and ord(i)<=122:
            lower+=1
    
    if(upper>=1 and lower>=1 and numeric>=1):
        print("YES")
    else:
        print("NO")
    testcases-=1

问题是:给定一个字符串,我必须说明字符串是否有效。

要使字符串成为有效的密码,需要完全填充以下内容:1.至少有一个大写字母2.至少一个小写字母3.至少一个数字。

如果这是一个有效的pasword打印“是”,则打印"NO“

我无法理解为什么我得到“错误的答案”在提交在GFG。当我运行自定义测试用例时,我得到了想要的结果,但在提交时,它显示了“错误的答案”。有人能帮忙吗,我的密码出什么问题了?

我可以弄清楚,但是gfg的ide没有告诉错误号码背后的原因,它只是说错误的answer..how,我能找出吗?

制约因素:

1<=T<=10^4

1<=|S|<=4*10^5

所有tc的S之和不超过4*10^5

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-07-14 13:59:25

你不是在检查零。为了避免这种错误,请使用字符,这样代码所做的事情就更清楚了。

错误的原因是反模式“幻数”。程序员应该避免在代码中直接写数字,因为人类很难理解代码,而且容易出错,就像这样。

代码语言:javascript
复制
testcases = int(input())
while testcases != 0:
    s = input()
    lower, upper, numeric = 0, 0, 0

    for i in s:
        if ord(i) >= ord("0") and ord(i) <= ord("9"):
            numeric += 1
        elif ord(i) >= ord("A") and ord(i) <= ord("Z"):
            upper += 1
        elif ord(i) >= ord("a") and ord(i) <= ord("z"):
            lower += 1

    if upper >= 1 and lower >= 1 and numeric >= 1:
        print("YES")
    else:
        print("NO")
    testcases -= 1
票数 0
EN

Stack Overflow用户

发布于 2022-07-14 14:07:15

编辑:

我误读了测试案例部分,看到你想要测试多个.仍然将此代码留给任何认为有用的人:

您可以执行一个while True循环,然后在发生所需结果时执行break循环。这将停止双input(),因此您不必输入密码两次(就像在代码中所做的那样)。此外,如果使用isnumeric(), isupper(), and islower(),它看起来更干净:

代码语言:javascript
复制
while True:
    s=input()
    lower,upper,numeric=0,0,0
    for i in s:
        if i.isnumeric():
            numeric+=1
        elif i.isupper():
            upper+=1        
        elif i.islower():
            lower+=1
    if(upper>=1 and lower>=1 and numeric>=1):
        print("YES")
        break
    else:
        print("NO")
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72981558

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档