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

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

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

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

Q&A

解決済

3回答

1042閲覧

python3で辞書を使った文字変換をする方法

bonji

総合スコア37

Python 3.x

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

0グッド

0クリップ

投稿2018/08/25 02:02

標準入力で得られた文字列をある規則に従って変更する暗号的なプログラムを書いています。
辞書のキーを取得し、それが標準入力のリストの文字と一致しない場合はそのまま、する場合は辞書の値を表示するものです。

pyton3

1lis = list(input_lines) 2dic ={ "A":"4", 3 "E":"3", 4 "G":"6", 5 "I":"1", 6 "O":"0", 7 "S":"5", 8 "Z":"2" } 9#print(lis) 10#k = dic.keys() 11print(k) 12for moji in lis: 13 if dic != moji: 14 print(moji) 15 else: 16 print(dic[moji])

このコードで実行するとキーがその標準入力にあっても標準入力のまま出力されます。
理由が分かりません。
回答の程よろしくお願い致します。

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

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

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

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

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

guest

回答3

0

問題設定がやや不明瞭ですが、str#translate の利用も検討できそうです。

Python

1from string import ascii_uppercase 2 3table = str.maketrans( 4 'AEGIOSZ', '4361052' 5) 6 7src = ascii_uppercase 8print(src) 9 10dst = src.translate(table) 11print(dst)

実行結果 Wandbox

plain

1ABCDEFGHIJKLMNOPQRSTUVWXYZ 24BCD3F6H1JKLMN0PQR5TUVWXY2

投稿2018/08/25 03:30

LouiS0616

総合スコア35660

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

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

bonji

2018/08/26 11:40

回答ありがとうございます。
guest

0

ベストアンサー

産駒として get() を使う例を示します。

python3

1lis = list(input()) 2dic = { 3 "A":"4", 4 "E":"3", 5 "G":"6", 6 "I":"1", 7 "O":"0", 8 "S":"5", 9 "Z":"2" 10} 11 12for moji in lis: 13 tr = dic.get(moji) 14 if tr is None: 15 tr = moji 16 print(moji, " -> ", tr)

追記:

コメントでの指摘を受けて...

python3

1transed = [dic.get(moji, moji) for moji in lis] 2print(lis, " -> ", transed)

投稿2018/08/25 03:24

編集2018/08/25 03:58
katoy

総合スコア22324

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

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

LouiS0616

2018/08/25 03:38

dict#getは第二引数にデフォルト値を与えられるので、それを利用すると行数が減りそうですね。
katoy

2018/08/25 03:51

ああ、そうでした!
bonji

2018/08/26 13:17

回答ありがとうございます。おかげで上手くいきました。
guest

0

if dic != mojiの部分が違います。辞書と文字なので常にFalseになってしまいます。
kを定義しているので、 if not moji in kのようにするとよいです。

投稿2018/08/25 02:07

編集2018/08/25 02:08
Udomomo

総合スコア1524

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

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

LouiS0616

2018/08/25 02:11

横から失礼します。 not a in b でももちろん誤りではないのですが、Pythonでは a not in b の方が好まれます。
Udomomo

2018/08/25 02:45

そうでした。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問