質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

1117閲覧

パスワードの強化検査 毎回同じ結果が出る エラーメッセージなし

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/19 15:00

編集2021/06/19 15:34

パスワードの強度を調べるプログラムで弱いのにInvalidとでないでValidと出てしまいます。
自分的にはこれで正しいように見えるのですが上手く行きません。
同じ出力になってしまうのです。
条件として
長さが6文字以上
英字と数字の両方を含む必要がある
同じ文字を3つ以上連続で使用してはいけない。

大文字と小文字の区別はいらないです。
この条件をすべて満たせばValidそうじゃない場合はInbvalidと出力したいです。

以下私が書いたプログラムです。 エラーメッセージはありませんでした。

python3

1t=list(input()) 2 3if len(t)<6: 4 print("Invalid") 5else: 6 for i in range(len(t)): 7 if t[i].isdecimal()==True: 8 s=1 9 10 else: 11 b=1 12 z=0 13 if s==1 and b==1: 14 j=0 15 y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0] 16 p=len(t)-1 17 for i in range(p): 18 19 if t[i]==t[i+1]: 20 y[j]+=1 21 else : 22 j+=1 23 z=0 24 for i in range(j): 25 if y[i]>2: 26 print("Invalid") 27 z=1 28 if z==0: 29 print("Valid") 30 else : 31 print("Invalid")

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yh1224

2021/06/19 15:21

作動しない、というのは具体的にどういう状況でしょうか? 特定の入力で正しい結果が出せないのであれば、その条件や例を示しましょう。:-) (間違いを全部探して!という質問は丸投げとみなされてしまいますので。)
退会済みユーザー

退会済みユーザー

2021/06/19 15:22

言い方が悪かったですね 全ての入力に対し同じ出力になってしまうのです。
yh1224

2021/06/19 15:32

とりあえず短い文字列は正しく結果が出るようです。 $ python test.py 123 Invalid
attakei

2021/06/19 15:43

> 全ての入力に対し同じ出力になってしまうのです。 > 以下私が書いたプログラムです。 エラーメッセージはありませんでした。 試しに手元で動かしてみた範囲では、そんなことはなかったのですが。 abced => Invalid abc123 => Valid abcdef => NameErrorで正常動作せず 123456 => NameErrorで正常動作せず aaaaaa => NameErrorで正常動作せず aaabbbcccdddeeefffggghhhiiijjjkkklllmmmoooppp111rrrssstttuuuvvvxxxwwwyyyzzz01932 => IndexErrorで正常動作せず aaabcdef1 => Valid
退会済みユーザー

退会済みユーザー

2021/06/19 16:03

エラーメッセージは作ったときのです 紛らわしくてすいません
TakaiY

2021/06/19 16:22

みなさんが言うのは、「全ての入力に対し同じ出力になってしまう」と書いてあるが、実際に提示されたコードを実行してみると、入力によって異なる結果が出るので、貴方の質問が成立していないということです。 提示のコードにはいろいろ問題があるのですが、まずは認識が合っていないと先に進めません。 こういう場合よくあるのは、実行しているファイルと修正したファイルが異なる場合です。 修正して保存してないとか、修正して名前を変えたのに実行するときに変えてないとか、他の場所に保存していたとか。
meg_

2021/06/20 04:20

> パスワードの強度を調べるプログラムで弱いのにInvalidとでないでValidと出てしまいます。 上記が発生した具体的な入力文字列は何ですか?
guest

回答1

0

python

1from itertools import groupby 2 3t=input() 4 5def chkpasswd(strng): 6 7 def chk_same(strng): 8 """3文字連続している場合True 9 https://docs.python.org/ja/3/library/itertools.html#itertools.groupby 10 """ 11 return sum([True for k, g in groupby(strng) for j in g if len(list(g)) >= 3]) 12 13 def digit_string(strng): 14 """数字と英文字が混在しているか確認 15 一方でも含まれていないと、len()が0となることで判定 16 """ 17 alph='abcedfghijklmnopqrstuvxyz' 18 alphabet=alph+alph.upper() 19 i , s =[int(i) for i in strng if ord(i) >=48 and ord(i) <= 57] ,[i for i in strng if i in alphabet ] 20 return True if len(i) * len(s) else False 21 22 # 判定本体 23 # 入力値が6文字以上 かつ 数字と英文字が含まれている かつ 同じ文字が3つ以上連続しない 24 if len(strng) >= 6 and digit_string(strng) and not chk_same(strng): 25 return 'Valid' 26 else: return 'Invalid' 27 28chkpasswd(t)

作ってみました。

あなたのプログラムだと
y=[0,0,0,0,0,0,0,0,0,0,0,0,0,0]によって暗黙的にパスワード長が14文字に制限されていますね。

python

1t=list(input()) 2 3valid = True 4s = b = j = 0 5 6if len(t)<6: # 六文字以上か 7 valid=False 8else: 9 for i in range(len(t)): # 文字列判定 10 if t[i].isdecimal()==True: 11 s=1 # 数字 12 else: 13 b=1 # 英文字 14 15 if s==1 and b==1: # 数字かつ英文字の場合 16 p=len(t)-1 17 for i in range(p): 18 19 if t[i]==t[i+1]: # 隣り合う文字が同じ場合 20 j +=1 21 if j == 2: # AAAとなった場合 22 valid=False 23 else : # 隣り合う文字が違う場合リセット 24 j = 0 25 26 else : # どちらか一方の場合 27 valid=False 28 29print('Valid') if valid else print('Invalid') # 全ての判定の結果により出力

条件式を生かしながら作り直すと、こんな感じでしょうか?
途中でprintすると直しづらいので、フラグを作ってやってみました。

私のより、綺麗ですね。????

投稿2021/06/26 01:15

toshikawa

総合スコア388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問