whileの中でTypeErrorが出て処理が進まないのを解決したい


半加算と全加算を用いた２進数の計算を行いたいのですが,最後のwhile構文から下でエラーが表示され処理が進みません。どなたかご教示お願いします

**エラーメッセージ:**

[code]

    TypeError                                 Traceback (most recent call last)
    <ipython-input-30-1544c3673a72> in <module>
         39 goukei = ""
         40 while k >= 0:
    ---> 41   ha = int(a(k))
         42   fa = int(b(k))
         43   A,keta = fa(a,b,x)
    TypeError: 'str' object is not callable
    
[/code]

**コード:**

[code]

    from traitlets.config.application import logging
    def AND(a,b):
      A = a * b
      return A
     
    def OR(a,b):
       if a==1:
         if b==1:
            A=1
         else:
            A=0
    
    def NOT(a):
      if a==1:
        A=0
      if a==0:
        A=1
      return A
    
    def ha(a,b):
        A1 = OR(a,b)
        keta = AND(a,b)
        A2 = NOT(keta)
        A = AND(A1,A2)
        return A,keta
    
    def fa(a,b,x):
      A1,keta1 = ha(a,b)
      A,keta2 = ha(A1,x)
      keta = OR(keta1,keta2)
      return A,keta
    
    a = input("2進数の数字")
    b = input("2進数に足す方")
    k = len(a)
    k = k - 1
    x = 0
    goukei = ""
    while k >= 0:
      ha = int(a(k))
      fa = int(b(k))
      A,keta = fa(a,b,x)
      goukei = str(A) + goukei
      x = keta
      k = k - 1
      goukei = str(x) + goukei
      print(a,"+",b,"=",goukei)
    
[/code]




処理全体としては, 大きく 3箇所ほどの間違いがあり

  1. `OR` 関数が結果を返していない。そもそも判定が間違ってそう
  2. bit 文字列から要素取り出す指定が違う (後述)
  3. (元の記述のままのはずだが) インデントが違う。`goukei = str(x) + goukei` 以下はループの外のはず

要素の取り出し部分

[code]

    while k >= 0:
      ha = int(a(k))
      fa = int(b(k))
      A,keta = fa(a,b,x)
    
[/code]

取り出すなら **`a[k]`** , **`b[k]`** のはずで

  * `ha`, `fa` は関数名として使用しているので上書きしてしまう。別の変数名にすべき
  * 関数 `fa` に指定する値は, `a`, `b` ではなく, 直前の「取り出した値」のはず

