実現したいこと
Pythonで以下のようなプログラムを作りたいです。
文字列の1文字ずつの2進数の結果表示後に、2つの正整数 n,m を入力(カンマ区切りで入力)させて n番目の第mビットの値を表示させるようにせよ.但しn,mは0から始まるものとする.
実行例:
文字列: ABC
A : 01000001
B : 01000010
C : 01000011
m: 1
n: 3 (1番目(=B)の第3ビット 010[0]0010 を指定)
1番目の文字の第3ビットは 0 です
※注意:「n番目の文字のmビット目」に対応するプログラム内のデータは、「数字」の "0" "1" ではなく、「数値」の 0 または 1 を要素とする2次元のリストの形式にすること。
発生している問題・分からないこと
プログラム自体はできたのですが、上の「※注意」にある、「数字(文字列)」ではなく、「数値」を要素とする2次元のリストの形式にする方法が分かりません。
ご教授いただけたら幸いです。
該当のソースコード
Python
1str = input('文字列:') 2binary_representations = [] 3 4for s in str: 5 c=ord(s) 6 7 b=bin(c) 8 b=b[2:] 9 b="00000000"+b 10 b=b[-8:] 11 binary_representations.append(b) 12 print(s+":"+b) 13 14m = int(input('m:')) 15n = int(input('n:')) 16target_char_binary = binary_representations[n-1] 17ans = target_char_binary[m-1] 18print(f'{m}番目の文字の第{n}ビットは{ans}です')
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
Googleで「map関数」というものがあったので、以下のようにプログラムを作り変えました。
Python
1str = input('文字列:') 2binary_representations = [] 3 4for s in str: 5 c=ord(s) 6 7 b=bin(c) 8 b=b[2:] 9 b="00000000"+b 10 b=b[-8:] 11 binary_representations.append(b) 12 print(s+":"+b) 13 14m = int(input('m:')) 15n = int(input('n:')) 16binary_representations = list(map(int, binary_representations)) 17target_char_binary = binary_representations[n-1] 18ans = target_char_binary[m-1] 19print(f'{m}番目の文字の第{n}ビットは{ans}です')
しかし、以下のようなエラーが出てしまいました。
TypeError Traceback (most recent call last)
Cell In [12], line 18
16 binary_representations = list(map(int, binary_representations))
17 target_char_binary = binary_representations[n-1]
---> 18 ans = target_char_binary[m-1]
19 print(f'{m}番目の文字の第{n}ビットは{ans}です')
TypeError: 'int' object is not subscriptable
補足
特になし

回答2件
あなたの回答
tips
プレビュー