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

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

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

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

Q&A

解決済

4回答

1456閲覧

pythonで62進数から10進数への変換:a → 10, Z → 61

Rondon7251

総合スコア89

Python

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

0グッド

0クリップ

投稿2020/04/05 07:13

62進数4桁の値を上2桁(Xとする)と下2桁(Yとする)
に分解し、(Xの10進数表記, Yの10進数表記)での形式で出力するよう書きたいです。
※62進数から10進数への変換:a → 10, Z → 61
※62進数2桁の場合、62の0乗の位と62の1乗の位で構成される。
※出力例)a50Y → (625, 60)

以下プログラムを書いてみましたが出力がうまくいきませんでした。

何かわかる方いましたら教えてください

python

1test = ["0","1","2","3","4","5","6","7","8","9", 2 "a","b","c","d","e","f","g","h","i","j","k","l","m","n", 3 "o","p","q","r","s","t","u","v","w","x","y","z","A","B", 4 "C","D","E","F","G","H","I","J","K","L","M","N","O","P", 5 "Q","R","S","T","U","V","W","X","Y","Z"] 6 7 8 9for XZA in test: 10 for XZA2 in test: 11 for XZA3 in test: 12 for XZA4 in test: 13 x = XZA*62+XZA2 14 y = XZA3*62+XZA4 15 print(XZA+XZA2+XZA3+XZA4+"("+x+","+y+")")

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

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

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

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

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

guest

回答4

0

Python

1s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 2def g(x): return s.index(x[0]) * 62 + s.index(x[1]) 3def f(x): return g(x[:2]), g(x[2:]) 4 5a = "a50Y" 6x, y = f(a) 7print(a, " → (", x, ",", y, ")", sep="")

関数名などは適当に変更してください。

投稿2020/04/05 07:45

編集2020/04/05 07:48
kazuma-s

総合スコア8224

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

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

0

ベストアンサー

インデックスを取得してから掛け算してください。

python

1 x = test.index(XZA)*62+test.index(XZA2) 2 y = test.index(XZA3)*62+test.index(XZA4) 3 print(XZA+XZA2+XZA3+XZA4+"("+str(x)+","+str(y)+")")

投稿2020/04/05 07:35

SHOMI

総合スコア4079

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

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

0

for文はもっと簡単に書けます。
for c in value: sum = sum * 62 + s.index(c)

すみません。
shiketa さんへのコメントのつもりが間違って新規回答になってしまいました。
なぜか、回答を削除できません。

投稿2020/04/06 00:28

編集2020/04/06 00:35
kazuma-s

総合スコア8224

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

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

shiketa

2020/04/06 12:20 編集

なるほど。ご指摘を参考にしてreduceしてみました。勉強になりました。 `` from functools import reduce s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" def radix62(value): return reduce(lambda a, b: a * len(s) + s.index(b), value, 0) ```
guest

0

何桁でもいけるように、オーバースペックで...

python

1def radix62(value): 2 s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" 3 sum = 0 4 for (c, index) in zip(value, reversed(range(len(value)))): 5 sum += s.index(c) * pow(len(s), index) 6 return sum 7 8for text in ['0', '1', '9', 'a', 'b', 'y', 'z', 'A', 'B', 'Y', 'Z', '10', '19', '1a', '1z', \ 9 '1A', '1Z', '20', '21', 'ZY', 'ZZ', '100', '101', 'a5', '0Y']: 10 print("'%s' = %s" % (text, radix62(text))) 11 12# 13input = "a50Y" 14 15print("(%s, %s)" % (input[:2], input[2:])) 16print("(%s, %s)" % (radix62(input[:2]), radix62(input[2:]))) 17 18# '0' = 0 19# '1' = 1 20# '9' = 9 21# 'a' = 10 22# 'b' = 11 23# 'y' = 34 24# 'z' = 35 25# 'A' = 36 26# 'B' = 37 27# 'Y' = 60 28# 'Z' = 61 29# '10' = 62 30# '19' = 71 31# '1a' = 72 32# '1z' = 97 33# '1A' = 98 34# '1Z' = 123 35# '20' = 124 36# '21' = 125 37# 'ZY' = 3842 38# 'ZZ' = 3843 39# '100' = 3844 40# '101' = 3845 41# 'a5' = 625 42# '0Y' = 60 43# (a5, 0Y) 44# (625, 60)

投稿2020/04/05 08:08

shiketa

総合スコア4061

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問