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

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

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

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

Q&A

解決済

2回答

1446閲覧

pythonでn進数を10進数に変換するプログラムを条件付き作成

s_xyz

総合スコア1

Python

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

0グッド

0クリップ

投稿2020/06/20 07:29

編集2020/06/20 08:06

任意のn進数を10進数に変換するプログラムをpythonで作成しています。
使って良い関数は、input, len, while, if, int, str, floatです。
何かおかしいのか、解けません。
int("",n)を使わずない良い方法がありませんか?

python

1x=input("任意のn進数の数字を入力してください。") 2n=input("何進数ですか? 2から10までの整数を入力してください。") 3i=len(x) 4print("x=",x) 5print("n=",n) 6print("i=",i) 7 8a=0 9if a==0: 10 y=int(x[0])*(int(n)**int(i-1)) 11 print("y=",y) 12 13while a<=i: 14 a+=1 15 i-=1 16 y=int(x[a])*(int(n)**int(i-1)) 17 print("y=",y) 18

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

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

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

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

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

y_waiwai

2020/06/20 07:36

このままではコードが読めません。質問を編集し、<code>ボタンを押し、出てきた’’’の枠の中にコードを貼り付けてください
y_waiwai

2020/06/20 07:37

んで、現状のコードではどういう結果が出てくるんでしょうか
pepperleaf

2020/06/20 08:11 編集

問題点だけ、、 if a==0: =>直前にa=0 とあるので、必ず、真となります。このif の意味は? while a<=i: => 配列は、0から始まります。従って x[i]は、エラーとなります。 ... と思ったのですが、 iが一回毎に、 -1されているので、(それも問題) そして、 y=... も更新された a, i を使っているので、正しくないのでは? そして、y= なんで、最後の値のみ有効です。 また、int("",n) を使いたく無いとの事。 10進を越えた n進数の場合、int("")はどうなるでしょうか?
kabayan55

2020/06/21 00:13

質問文に、 ・x, n に具体的にどのような値を与えて動かしてみたのか ・その場合にどのような値が出力されるのが理想か ・今のコードではどんな値が出ている or エラーが出ているのか ・エラーが出ている場合はエラー全文 あたりを記載していただけますと、回答しやすいです。
guest

回答2

0

今更ですが、16進数まで対応としてみました。

Python

1print (int(x, int(n))) # 確認用 2 3a=0 4y=0 5x=x.upper() 6print(" x = ", x) 7 8numstr = "0123456789ABCDEF" 9a = 0 10j = i 11while a < j: 12 index = numstr.find(x[a]) 13 if (index > 0): 14 y += index * (int(n) ** (i - 1)) 15 print('a=', a, ', y=', y) 16 a += 1 17 i -= 1

少々、手抜きがあって、不正な文字があると、無視(0扱い)します。
他も色々ですが。

投稿2020/06/21 11:53

pepperleaf

総合スコア6385

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

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

0

ベストアンサー

コードの中に問題点を列挙してみました。

x=input("任意のn進数の数字を入力してください。") n=input("何進数ですか? 2から10までの整数を入力してください。") i=len(x) print("x=",x) print("n=",n) print("i=",i) a=0 # if文が常に正になるため不要 if a==0: y=int(x[0])*(int(n)**int(i-1)) print("y=",y) while a<=i:   # 先にインクリメントしているため、a<=iとwhile文の条件で設定しているのに実質a==iまでになっている a+=1 i-=1 # 最後の値しか保存されていないため、+=にする必要がある y=int(x[a])*(int(n)**int(i-1)) print("y=",y)

while文の中で、a==0の場合(yの最初の値の計算)をして、else文で足し合わせて、インクリメントを後ろ側に持ってくることによって、適切な範囲で計算の処理を行えるのではないでしょうか。
inputした直後のx, n, iの値はprintしているので確認していらっしゃると思うのですが、デバッグする際は、while文の中での各変数の値もチェックすると、どのような場合にエラーが出ているかわかると思います。
以下、動作確認済みの修正案です。

※コメント欄にて、間違えているとのご指摘をいただいたので、以下のコードを修正いたしました。

x=input("任意のn進数の数字を入力してください。") n=input("何進数ですか? 2から10までの整数を入力してください。") i=len(x) print("x=", x) print("n=", n) print("i=", i) a=0 y=0 while a<i: y+=int(x[a])*int(n)**(i-a-1) a+=1 print("y=", y)

投稿2020/06/21 00:36

編集2020/06/21 06:21
kabayan55

総合スコア389

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

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

pepperleaf

2020/06/21 00:42 編集

残念なことに、 > i-=1 だと、 whileが i を参照しているために、期待する結果となりません。 > if a==0: も必要ないですね。 (事前に、 y = 0とする) それとできれば、16進数位までは対応したい、、、でのは欲張り?
Q71

2020/06/21 03:26

whileで参照する変数をインクリメント・デクリメントしているので、期待している回数の半分しかループしないのでは?
kabayan55

2020/06/21 05:47

pepperleaf様 ご指摘ありがとうございます。試した例がたまたま全て通ってしまっていたのですが確かに反例ありますね。確認不足でした。 > if a==0: も必要ないですね。 (事前に、 y = 0とする) おっしゃる通りです。 > それとできれば、16進数位までは対応したい、、、でのは欲張り? 単純に n=input("何進数ですか? 2から10までの整数を入力してください。") とあったのを見て、問題設定としては無くてもいいのかなと思いました。対応しているに越したことはないと思います。
kabayan55

2020/06/21 05:47

Q71様 おっしゃる通りですね。たまたま用意したテストケースが全て通ってしまい、見逃していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問