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

isdigitTrueまたはのみを返しますFalse

if ch.isdigit():

最初の 2 文字が数字かどうかを確認したい場合は、ループの外側で行います。

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

これにより、スペースやタブなど、あらゆる種類の空白がチェックされます

dig_count = 0forループの前に定義する数字について。

for ループ内:

if ch.isdigit():
    dig_count += 1

for ループの後:

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