Pythonで10進数を2進数に変換する関数を作りたいのですが以下のように作成した結果うまく作動してくれません
Pythonで10進数を2進数に変換する関数を作りたいのですが以下のように作成した結果うまく作動してくれません x=int(input("数字を入力してください")) keta=0 sinsu=[0]*10 if x>0 : #商が1以上なら以下の作業を実行 sinsu[9-keta] = x%2 #配列の右から9-keta番目にxの余りを代入 x=x//2 #xにxを2で割ったときの商を代入 keta=keta+1 #ketaを1つずらす print(sinsu) やろうとしていることは xを2で割っていってその余りをsinsuの右から順番に格納していきxが0に達するまで続けることです。つまりsinsuというものはxを2進数に変換した値になるはずでした。 もししっかりと完成していれば 例えばxに14を入力すると sinsu=[0,0,0,0,0,0,1,1,1,0]と表示されるはずですが 実際には sinsu=[0,0,0,0,0,0,0,0,0,0]と表示されてしまい困っています。 なにか思い違いをしてるとは思うのですがわかりませんでした。 どなたか間違っている点をご指摘いただけると幸いです。よろしくお願いします。
インデントが消えてしまったのでもう一度載せます。□をインデント箇所とみなしてください。 x=int(input("数字を入力してください")) keta=0 sinsu=[0]*10 if x>0 : #商が1以上なら以下の作業を実行 □ sinsu[9-keta] = x%2 #配列の右から9-keta番目にxの余りを代入 □ x=x//2 #xにxを2で割ったときの商を代入 □ keta=keta+1 #ketaを1つずらす print(sinsu)
ベストアンサー
[補足] コードを拝見して 「繰り返し」がありません。 if x > 0: #商が1以上なら以下の作業を実行 ↓ while x > 0: #商が1以上なら以下の作業を実行 で、動きました。
1人がナイス!しています
少しシンプルにしてみた。 ご参考まで。 x = int(input('数字を入力してください ')) sinsu = [] while x > 0: sinsu = [x%2] + sinsu x //= 2 print(sinsu) リスト操作はPythonの基本のひとつだと思う んで、あれこれやってみるといいです。 https://docs.python.org/ja/3/tutorial/introduction.html#lists
質問者からのお礼コメント
返信遅くなり申し訳ありません。 おかげさまで解決できました。本当にありがとうございます。 他のお二方にも感謝です。
お礼日時:2020/11/26 17:03