Hui... der Code ist... *grausam*! Sorry, harte Worte, aber man kann da nichts schön reden.
Aber zu erst einmal zum Fehler: Du versuchst auf einem Integerobjekt einen Indexzugriff - das kann nicht klappen. Hier einmal simuliert:
Code: Alles auswählen
In [1]: i = 123
In [2]: i[0]
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-ff44243e4b36> in <module>()
----> 1 i[0]
TypeError: 'int' object is not subscriptable
(Wenn Du übrigens einen Fehler postest, dann bitte immer den *kompletten* Traceback; dann hätten wir nämlich auch sofort die Codestelle gesehen, wo der Fehler auftritt.)
Ich kapiere aber auch nicht, wieso Du den Eingabestring in einen Integerwert umwandeln willst? Du willst Du eigentlich eher eine Liste von Integerwerten:
Code: Alles auswählen
value = "1100101"
digits = map(int, value)
list(digits)
>>> [1, 1, 0, 0, 1, 0, 1]
Das Durchnummerieren von Namen ist (fast) immer ein Zeichen dafür, dass man eigentlich eine Datenstruktur verwenden sollte, oftmals eine Listenartige.
Wie schreibst Du Dein Programm um, wenn Du 32-Bit Zahlen wandeln willst?
Das Binden der einzelnen Stellen an eigene Namen erschwert auch das Prüfen, ob nur gültige Werte eingegeben wurden! Auch das kann man viel eleganter mit *einem* Objekt lösen:
Code: Alles auswählen
# Elemente in eine Liste packen
digits = list(map(int, value))
# alternativ so:
digits = [int(v) for v in value]
# Menge daraus ableiten
set(digits)
>>> set([0, 1])
# Und nun der "Trick": Vergleich mit der erwarteten Menge
set(digits) == {1, 0}
>>> True
Damit wäre auch das erledigt
Selbst wenn Du als Anfänger `set` nicht kennst oder keine so elegante Idee gehabt hättest, so wärst Du zumindest zu diesem Konstrukt sicher in der Lage:
Code: Alles auswählen
value_is_valid = True
for value in digits:
if value not in (0, 1):
value_is_valid = False
break
# hier kannst Du dann abfragen, ob `value_is_valid` `False` oder `True` ist
Die Berechnung der Zahl lässt sich auch einfacher in einer Schleife erledigen:
Code: Alles auswählen
value = 0
for index, digit in enumerate(reversed(digits)):
value += 2 ** index * digit
value
>>> 101
`enumerate` erzeugt zu einem Iterable einfach einen Index. Damit hast Du die "Stelle" und den Wert (0 oder 1). Aus beidem kannst Du die entsprechende Potenz berechnen. Alles noch aufsummiert und fertig ist die Laube.
Auch das geht noch eleganter in einer List-Comprehension und der Funktion `sum`:
Code: Alles auswählen
sum(2**index for index, digit in enumerate(reversed(digits)) if digit == 1)
>>> 101
So, am Schluss dann noch der Demotivator: Python kann das schon von Hause aus: