新手程序员在这里。我试图写一个程序,它将采取UID从用户和验证他们的基础上一定的规则。规则是:
1.必须包含至少2个大写英文字母字符。
1.它必须包含至少3位数字(0 - 9)。3.它只能包含字母数字字符(A-Z,a-z & 0 - 9)。
1.字符不应重复。
1.有效UID中必须正好有个字符。
我正在放代码。也为这个大代码道歉(我是新手)
# UID Validation
n=int(input()) #for iterations
uid=[]
# char=[]
valid=1
upper=0
numeric=0
# take input first of everycase
for x in range (0,n):
num=input()
uid.append(num)
# print (uid)
for i in uid:
# print (i)
# to count each word and number
count={}
for char in i:
count[char]=count.get(char,0)+1
for j in i:
if j.isupper():
upper=upper+1
elif j.isnumeric():
numeric=numeric+1
# print('numeric =', numeric)
# print('upper =', upper)
# Check conditions
while valid==1:
if len(i)!= 10:
valid= 0
# print('invalid for word count')
elif i.isalnum()== False: #alphanumeric
valid=0
# print('invalid for alnum')
elif upper<2: #minimum alphabet and numbers
valid=0
# print('invalid for min alphabet')
elif numeric<3:
valid=0
# print('invalid for min numeric')
else:
for k,v in count.items(): #no repitation
if v>1:
valid=0
# to check if given UID is valid or not
if valid==1:
print ('Valid')
elif valid==0:
print('Invalid')
valid=1
break
我已经写了代码,但似乎我面临的一个输入问题,只有这是检查UID标签:2TB1YVIGNM
这是一个无效的标签。我的程序显示相同的当我单独运行它或第一次在一批许多。但是,让我们说我运行程序和输入2个标签,与"2TB1YVIGNM"是第二个,它将显示为"有效"。请注意,这是只发生在这个特定的标签
还有其他几个标签运行良好,其中一些如下所述:77yS77UXtS d72MJ4参考OA778K96P22TB1YVIGNM "除此标签外" 9JC86fM1L7 3w2F84OSw5 GOeGU49Jdw 8428COZZ9C WOPOX413H2 1h5dS6K3X8 Fq6FN44C6P
输出应为:无效有效无效无效有效无效无效无效无效无效有效无效
我的输出如下:无效有效无效有效有效无效无效无效无效无效有效无效
2条答案
按热度按时间8zzbczxx1#
要解决这个问题,需要将每个uid的
upper
和numeric
设置回0:附言:对于你的新手,我建议你阅读PEP 8,它会使你的代码更具可读性和美观
P.S.S:不需要手动计算每个字符在字符串中相遇的次数,Python中已经实现了这样的操作,请查看计数器了解更多细节
我同意评论说,对于这种类型的任务,最好使用正则表达式
vdzxcuhz2#
你可以将逻辑片段提取到函数中并调用它们:
旁注:
is
检查True/False
True/False
而不是1/0
(如valid
变量)[可选/家庭作业]
is_proper_length
示例)all()
并将所有调用传递给它,但是if
将在不检查所有条件的情况下从函数短路(这一切取决于问题,如条件的数量,UID的长度,要检查的UID数量等),您可以随意调整检查顺序,例如,如果长度不正确,则无需检查其余部分(但在某种程度上,这是一种预优化,通常不鼓励这样做)