🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

Q&A

解決済

3回答

482閲覧

pythonの進数(?)処理をしたい

kanan_py

総合スコア7

Python

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

0グッド

1クリップ

投稿2021/01/27 15:25

pythonで進数(?)処理をしたいのですが、以下のように例えば10を受け取ったら1と表示させたいのですが
どのようにかけばよいかわかりませんif文で一つ一つ書こうかと思いましたがかなり非効率だと思い、質問させていただきました。よろしくお願いします。

10 = 1
20 = 2
30 = 3

f0 = 15
11 = 16
12 = 17

1f = 30

試したコード

python

1a = 10 2if a == 10: 3 a = 1 4if a == 20: 5 a = 2 6

よろしくお願いします。

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

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

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

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

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

y_waiwai

2021/01/28 00:37

どういう法則でそうなるんでしょうか。 そこらへんの詳しい説明を追記しましょう
guest

回答3

0

元のaは文字列ですよね?
よくわからない規則ですが、深く考えなけば、2文字目で分岐して16進数変換するか、辞書型使うのがいいと思います。

py

1a = '1f' 2if a[1] == '0': 3 a = int(a[0], base=16) 4else: 5 a = 15 + int(a[1], base=16)

py

1a = 'a0' 2d = { 3 '10': 1, 4 '20': 2, 5~ 6 '1f': 30 7} 8a = d[a]

投稿2021/01/28 14:43

編集2021/01/28 14:45
kairi003

総合スコア1332

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

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

0

ベストアンサー

これで合ってますかね。

変換前変換後
101
202
303
404
505
606
707
808
909
a010
b011
c012
d013
e014
f015
1116
1217
1318
1419
1520
1621
1722
1823
1924
1a25
1b26
1c27
1d28
1e29
1f30

変換前の値が2文字固定だとすると、

  • 2文字目が0なら、「1文字目を16進数と見なした値」になる。
  • (2文字目が0ではないなら)「2文字目を16進数を見なした値 + 15 * 1文字目を16進数と見なした値」になる。

かな。

補足: 2文字渡すと対応する整数を得る関数。

Python

1import re 2 3def convert(str): 4 if not re.match(r"^[\da-fA-F][\da-fA-F]$", str): 5 return None 6 if str[1] == '0': 7 return int(str[0], 16) 8 return int(str[1], 16) + int(str[0], 16) * 15

投稿2021/01/28 02:13

編集2021/01/28 14:25
Daregada

総合スコア11990

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

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

kanan_py

2021/01/28 10:02

おっしゃるとおりでございます。 これらをifやreplaceで一つ一つ処理をしていく (例:10ときたら1とおきかえる)というのはかなり非効率的なので、何かより効率的なコードの書き方はないかというのが今回の質問内容です。 わかりずらくてすいません。よろしくお願いします。
guest

0

これは16進→10進変換とかじゃなくて、前半と後半で不規則ですね。

aは文字列ですよね?あと、どれにも一致しなかった場合にどうするかとか。

そのあたりが明確になれば、前半か後半かを判断して、次に部分文字列を16進→10進変換して、その後補正すれば良いかと。

投稿2021/01/27 16:38

otn

総合スコア85888

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問