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

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

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

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

Q&A

解決済

1回答

1515閲覧

pythonの辞書逆引きと、文字列変換について<discord.pyについても>

siroRabi

総合スコア5

Discord

Discordは、ゲーマー向けのボイスチャットアプリです。チャット・通話がブラウザ上で利用可能で、個人専用サーバーも開設できます。通話中でも音楽を流したり、PC画面を共有できるなど多機能な点が特徴です。

プログラミング言語

プログラミング言語はパソコン上で実行することができるソースコードを記述する為に扱う言語の総称です。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Python

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

0グッド

0クリップ

投稿2020/05/19 00:44

前提・実現したいこと

discord.pyでモールス信号を作っているのですが、モールス信号にすることはできたものの
複合ができません。どうやればできるのか教えてください。

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

python

1discord.errors.HTTPException: 400 Bad Request (error code: 50006): Cannot send an empty message 2#これは空のメッセージは送れないよという意味なので、送信過程ではなく、変換過程でミスをしていることがわかります

該当のソースコード

pyhton

1dict = {"a":"・-", "b":"ーーー・", "c":"ー・・","d":"・","e":"・・-・","f":"ー・・","g":"ーー・","h":"・・・・","i":"・・","j":"・---","k":"ー・-","l":"・-・・","m":"ーー","n":"ー・","o":"ーーー","p":"・--・","q":"ーー・-","r":"・-・","s":"・・・","t":"ー","u":"・・-","v":"・・・-","w":"・--","x":"ー・・-","y":"ー・--","z":"ーー・・"} 2 3#復元 4 if b == "!huku": 5 await message.channel.send("変換したいものを英字で打ってね!") 6 wait_message = await client.wait_for("message", check=check) 7 cdf_moto = wait_message.content 8 cdf = cdf_moto.replace(' ', ',') 9 cdf_i = len(cdf) + 1 10 i = 0 11 ans = "" 12 henkan_cdf = re.findall(r'\d+', cdf) 13    #辞書から逆引きをしたいがわからない 14 await message.channel.send(key) 15

###過程について
変換は、メッセージを持ってくる→空白と先頭と最後に,をいれる→カンマに挟まれてる文字を探す、それをリストに入れる→リストから一つずつ逆引きをする→送信するという流れです
・-の後に" "半角スペースが入るようにしています。”・- ・ー”など
もっと簡単にできるならアドバイスをください。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

discord.pyがよくわからないので、できないかもしれませんが、

Python

1dct = {"あなたの辞書"} 2dct2 = {v: k for k, v in dct.items()} 3data = "・- ・- ・-" 4data = map(lambda x: dct2[x], data.split()) 5print("".join(data)) 6# "aaa"

dictという名前は使わないでくささい。Pythonのもともとあるモジュール名です。
2行目: 辞書のkeyとvalueを反対にして、dct2に入れています。
4行目: 空白がある場所で分けて、リストにし、それぞれの辞書のvalueを返してリストにしています。

投稿2020/05/19 01:21

編集2020/05/19 05:25
ForestSeo

総合スコア2722

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

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

jeanbiego

2020/05/19 05:07

横から失礼します。ForestSeoさんのやり方、スマートで勉強になります。 ところで、dctとdct2の要素数が違っていて何故かと見てみると、質問者さんの辞書のcとfが同じ定義になってますね。どっちかが間違いなのでしょう。
ForestSeo

2020/05/19 05:26

本当ですね!確かに。 ---追記--- map型オブジェクトもjoinに使えたのでlist()をなくしました。
退会済みユーザー

退会済みユーザー

2020/05/19 05:27

wikipediaのモールス符号と比べてみると、元々の辞書とちょいちょい違っていますね。また、長点の部分に「-」と「ー」が混ざっているのも気になるところです。
siroRabi

2020/05/19 05:43 編集

#復元 if b == "!huku": await message.channel.send("変換したいものを英字で打ってね!") wait_message = await client.wait_for("message", check=check) cdf_moto = wait_message.content cdf = cdf_moto.replace(' ', ' ') data = list(map(lambda x: dct2[x], data.split())) await message.channel.send(data) こんなかんじにしました すると、このエラーが出ました UnboundLocalError: local variable 'data' referenced before assignment dataが先に参照される?とあるのですがその前にdataは使ってないはず...
siroRabi

2020/05/19 05:43

@kichirb3さん 修正しておきます!ありがとうございます
ForestSeo

2020/05/19 05:54

cdf → data じゃないですか? または data = list(map(lambda x: dct2[x], cdf.split()))
siroRabi

2020/05/19 06:26

出来ました!本当にありがとうございます!!! あと、一つお尋ねしたいのですが、このローマ字表記から平仮名に変換するのは難しいですかね? 漢字はさすがに無理だとは思うんですが...
ForestSeo

2020/05/19 06:40

pykakasiっていうのでけるらしいですよ。 https://qiita.com/MuAuan/items/0cb9cfebfede8eeb4ada まあ、siとshiとか、いろいろあるかもしれないので、時間があるのなら別ファイルに辞書型でアルファベットと平仮名を保存、関数を作り、importで持ってくるとかすればいいのでは?
siroRabi

2020/05/19 07:01

たしかにそれが無難ですね。さいごまで親切にどうもありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問