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

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

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

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

Q&A

0回答

424閲覧

python 辞書型のプライベート変数

TokyoNeetRazers

総合スコア18

Python

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

0グッド

0クリップ

投稿2022/06/25 05:18

python

1class Account(): 2 def __init__(self): 3 self.Account= dict() 4 5 def_root_password = "root" 6 self.Account.setdefault( 7 "root", 8 def_root_password, 9 ) 10 11 def register(self): 12 user_id = input("アカウント名を入力->") 13 user_password = input("パスワードを入力->") 14 15 self.Account.setdefault( 16 user_id, user_password 17 ) 18 return print("登録完了") 19 20 def update(self): 21 user_id=input("アカウント名を入力->") 22 23 if user_id in self.Account: 24 reg_password=self.Account[user_id] 25 old_password =input("旧パスワードを入力->") 26 new_password=input("新パスワードを入力->") 27 if old_password=="root": 28 return print("更新完了") 29 elif old_password !="root": 30 return print("パスワードが間違っています") 31 32 33 def delete(self): 34 user_id = input("アカウント名を入力->") 35 if user_id in self.Account: 36 reg_password = self.Account[user_id] 37 password = input("パスワードを入力->") 38 if reg_password == password: 39 self.Account.pop(user_id) 40 return print("削除完了") 41 else: 42 pass 43 44instAccount=Account() 45print("1.登録\n2.変更\n3.削除\n9.終了") 46while True: 47 a=input("処理を選択->") 48 if a == "1": 49 instAccount.register() 50 51 elif a == "2": 52 instAccount.update() 53 54 elif a =="3": 55 instAccount.delete() 56 57 elif a=="9": 58 print("終了") 59 break

辞書形のプライベート変数 __data を作成し、keyがID、valueがPasswordとなるようにし、
コンストラクタで初期アカウントの作成
・引数なし
・初期アカウント:ID が root Password が root としたいです。

1を入力した場合、アカウント名とパスワードを入力し登録します。

2を入力した場合、アカウント名と旧パスワードと新しいパスワードを入力します。もし、パスワード間違っていたら、パスワードが間違っていると表示します。

3を入力した場合、アカウント名とパスワードを入力しパスワードがあっていれば消去し、間違っていれば、パスワードが間違っていますと表示します。
このようなプログラムです。

辞書形のプライベート変数 __data を作成し、keyがID、valueがPasswordとなるようにし、
コンストラクタで初期アカウントの作成
・引数なし
・初期アカウント:ID が root Password が root としたいです。
どのように改良すればよいのでしょうか?

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

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

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

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

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

meg_

2022/06/25 10:52

> どのように改良すればよいのでしょうか? 現在の仕様はどのようなものでしょうか?
TokyoNeetRazers

2022/06/25 12:50

現在は登録してもしてもdictには入らず、削除が完了してもdictからは消えません
meg_

2022/06/25 13:59

デバッグはされましたか?
TokyoNeetRazers

2022/06/25 14:31

ごめんなさい、デバックって何ですか?
meg_

2022/06/25 14:58

> 現在は登録してもしてもdictには入らず Accountには追加されているようですが。意図した挙動とは違うということでしょうか?
TokyoNeetRazers

2022/06/25 15:48

はい。初期値のrootの場合はすべてうまくいくのですが、まず最初に1を選択して、パスワードを登録し、その登録したパスワードを使って2,3を実行すると意図したように動きません。原因はdictに代入していないからなんです。そこでどのように改良すれば1で登録したパスワードが辞書型のプライベート変数に入力されるのか知りたいです。
meg_

2022/06/25 18:03

具体的に何を入力したらどういう出力がされたのか示していただけませんか?
meg_

2022/06/25 18:11 編集

> その登録したパスワードを使って2,3を実行すると意図したように動きません update()の中に更新処理がないようですが? 3については処理されていると思いますが、何故されていないと思われるのでしょうか?
TokyoNeetRazers

2022/06/26 01:19

実行すると、処理を選択と出ます。 1を入力した場合、アカウント名とパスワードを入力し登録します。 2を入力した場合、アカウント名と旧パスワードと新しいパスワードを入力します。もし、パスワード間違っていたら、パスワードが間違っていると表示します。 3を入力した場合、アカウント名とパスワードを入力しパスワードがあっていれば消去し、間違っていれば、パスワードが間違っていますと表示します。
TokyoNeetRazers

2022/06/26 01:20

1で登録したパスワードをもとに2,3を実行すると意図したようにに行かないんです
meg_

2022/06/26 03:56 編集

> 1で登録したパスワードをもとに2,3を実行すると意図したようにに行かないんです 入力した文字列とその後の挙動(出力)を質問に追記しましょう。「意図したようにに行かない」では実際の状況が第三者には伝わりません。 また以前のコメントにも書きましたが、2(変更)についてはその処理がコードに書かれていません。処理をコードに追加しましょう。 3(削除)については削除処理は出来ていると思います。パスワードが間違っている際の処理については何も書かれていないので書きましょう。 また、何をもって”変更されない”とか”削除されない”と判断されているのでしょうか?質問のコードの出力からはその判断は出来ないかと思うのですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問