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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

2864閲覧

python: sys.exitで終了できない

alice4649

総合スコア17

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2021/03/23 17:14

前提・実現したいこと

python始めたばかりです。
とりあえず問題を解いてたところ、どうするのだろうというところがあったので質問させていただきます。
問題は
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
A病院のシステムを解析します。
不正アクセスを試みるクラッカーからユーザーを守るために、ユーザーが設定するパスワードが十分に複雑であるようにしなくてはなりません。
A病院は、パスワードの複雑さの条件として以下の 3 つを定めました。

・長さが 6 以上
・英字と数字の両方を含む必要がある
・同じ文字を 3 つ以上連続で使用することはできない

なお、英字の大文字と小文字は区別する必要はありません。
パスワードの候補が入力として与えられるので、複雑さの条件をすべて満たす場合は "Valid"、そうでない場合は "Invalid" と出力してください。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
多分ifelifelseでしてればexit使う必要もないですが、
条件分岐の中にfor文どう入れるかわからないのでできませんでした。

発生している問題・エラーメッセージ

エラーメッセージはありません。
ですが、終了出来ないことによって違う答えが出てきてしまいます。

該当のソースコード

python3

1import sys 2t=input() 3if len(t)<6: 4 print("Invalid") 5 sys.exit() 6if type(t) is not str: 7 print("Invalid") 8 sys.exit() 9 10for i in (0,len(t)-3): 11 if t[i]==t[i+1]==t[i+2]: 12 print("Invalid") 13 sys.exit() 14 15print("Valid") 16 17

試したこと

とりあえず終了方法で調べて
exit()
sys.exit()
os._exit()
で試しましたができませんでした。

補足情報(FW/ツールのバージョンなど)

特になし

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

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

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

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

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

y_waiwai

2021/03/23 22:53

違う答えとは、どういう答えが出るんでしょうか
alice4649

2021/03/24 06:14

入力:7Caaad9 正答:Invalid 出力:Valid となります。
guest

回答1

0

ベストアンサー

sys.exitで終了できないためではないと思います。
もしそうなのだとするとログには2回結果が出るはずですが1回しか出てないのではないでしょうか。

間違った結果が出る理由は
「英字と数字の両方を含む必要がある」の判定が
typeではできないためと思われます。

正しい判定方法は以下の所で説明されていました。
python3 文字列に英数字が含まれてるのか判定

(追記)
見逃してました。
t[i]==t[i+1]==t[i+2]
こんな書き方出来るんでしたっけ
t[i]==t[i+1] and t[i+1]==t[i+2]
だと思います

投稿2021/03/23 20:03

編集2021/03/24 03:03
xail2222

総合スコア1497

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

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

xail2222

2021/03/24 03:02

失礼しました。 知らなかったです。コメントありがとうございます
alice4649

2021/03/24 06:21

ありがとうございます。見ました。コードはこんな感じでしょうか? import sys import re t=input() def check(x): return bool(re.search(r"[a-zA-Z]",x))and \ bool(re.search(r"[0-9]",x)) if len(t)<6: print("Invalid") sys.exit() if check(t)==True: print("Invalid") sys.exit() for i in (0,len(t)-3): if t[i]==t[i+1]==t[i+2]: print("Invalid") sys.exit() print("Valid") しかし、入力したところ出力はあっていましたがエラーコード(?)に An exception has occurred, use %tb to see the full traceback. SystemExit とでます。どうしたら良いでしょうか?
alice4649

2021/03/24 06:23

すみません。出力もInvalidにしかなりません。
xail2222

2021/03/24 06:59

if check(t)==True: checkの結果の判定が間違ってますね エラーはsys.exit()が理由だと思いますけどエラー処理でも追加しました? こっちは詳しくは分からないけど
xail2222

2021/03/24 07:08

for i in (0,len(t)-3): ここもまちがってました for i in range(len(t)-2): が正しいですね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問