0

我正在尝试创建一个具有典型要求的密码,例如它至少有 1 个大写/小写等。如果密码根据要求无效,我们必须显示错误以便用户尝试获取它再次更正。

我从一个 while 循环开始,以便最终用户可以选择是否继续进行另一个测试。这些是我做的一般步骤。

最后,如果确定用户的文本输入无效,我必须显示他/她的错误是什么。这是我现在的主要问题。建议后代码更好。现在我只需要以某种方式显示错误。

这是我的代码的运行方式

while True:
   pw = input('Enter password to be tested if valid or not: ')
   correct_length = False
   uc_letter = False
   lc_letter = False
   digit = False
   no_blanks = True
   first_letter = False

   if len(pw) >= 8:
   correct_length = True

   for ch in pw:
      if ch.isupper():
         uc_letter = True

      if ch.islower():
         lc_letter = True

   if pw.isalnum():
      digit = True

   if pw[:1].isalpha():
      first_letter = True

   if not pw.find(' '):
      no_blanks = True


   if correct_length and uc_letter and lc_letter and digit and first_letter and no_blanks:
      valid_pw = True
   else:
      valid_pw = False
      #This is the part where I'm suppose to display the errors if the user gets it wrong. 
      #Initially, in the test for ch. above, I put in an else: with a print statement but because of the for- statement, it prints it out for every single character.


   answer = input('Try another password input? y/n ')
   if answer == 'y'
      answer = True
   else:
      break
4

2 回答 2

3

isdigit只返回Trueor False

if ch.isdigit():

如果要检查前两个字符是否为数字,请在循环外执行:

if pw[:2].isdigit():
    digit = True
for ch in pw:
    ...

并检查字符串中是否有空格:

if not pw.find(' '):
    no_blanks = True

或者,如果您想转义各种空格和空格,包括换行符:

import string
...
if not any(c in string.whitespace for c in pw):
    no_blanks = True
for ch in pw:
   ...
于 2013-12-02T13:40:48.447 回答
1

对于我会使用的空白(不要忘记导入字符串):

import string

for ws in string.whitespace:
    if ws in pw:
        no_blanks = False
        break

这会检查所有类型的空白,例如 Space 和 Tab

对于我dig_count = 0在你的 for 循环之前定义的数字。

在for循环内部:

if ch.isdigit():
    dig_count += 1

在for循环之后:

if dig_count >= 2:
    digit = True
于 2013-12-02T14:34:41.937 回答