2016-10-09 6 views
2

Ich möchte, dass der Benutzer eine Ganzzahl (6 Ziffern lang, also 123456 und nicht nur 1) eingibt und diese Eingabe in eine Liste umwandelt, [1,2,3,4,5,6].Konvertieren von Eingabezeichenfolgen von Ganzzahlen in Liste, dann zu Ints in Python?

Ich versuchte dies:

user_input = list(input("Please enter an 8 digit number") 
numbers = [int(i) for i in user_input] 

Ich möchte mathematische Sachen mit der Nummernliste ausführen zu können, aber ich halte den Fehler bekommen „int ist nicht iterable“. Um ehrlich zu sein, bin ich nicht ganz sicher, was ich mache, oder sicher, dass die "Zahlen = [...]" sogar notwendig ist, oder ob es nur numbers = user_input sein sollte. Der Versuch numbers = [i for i in user_input] wird der gleiche Fehler.

Auch ich merke, dass ich entweder eine Schleife ausführen konnte, um jede Nummer vom Benutzer zu bekommen, oder sie bitten, Kommas dazwischen zu verwenden, um die .split(",") zu verwenden, aber ich würde lieber nicht, wie es dem unordentlich scheint Benutzer.

Edit: Ich habe Dinge zwischen den Versionen, so sorry für jede Verwirrung. Dies wurde in 2.7 geschrieben, obwohl ich beabsichtige, Python 3 zu verwenden.

+1

Bist du nicht in Python 2? Wenn ja, benutze raw_input anstelle von – Boud

+0

Dein Problem ist woanders, nicht im Code den du hier gezeigt hast. –

+0

Welche Version von Python? – dawg

Antwort

0

In Python 2.7 gibt input() eine Ganzzahl zurück. Um die Eingabe als String zu lesen, verwenden Sie stattdessen die Funktion raw_input(). Alternativ können Sie zu Python 3 wechseln und input() gibt immer eine Zeichenfolge zurück.

Auch Ihre Lösung ist nicht sehr ordentlich, wenn der Benutzer Zahlen mit mehr als 1 Ziffern zur Verfügung stellt. Zum Beispiel kann die Zeichenfolge "123" als [1, 2, 3], [12, 3] usw. interpretiert werden.

Eine saubere Lösung ist, den Benutzer zu bitten, die Eingabe durch Leerzeichen getrennt zu schaffen, wie x_1 folgt, x_2, ... x_n

dann in Python Code 3.0 wird wie folgt aussehen

lst = [int(x) for x in input().split()] 

Und für Python 2,7

lst = [int(x) for x in raw_input().split()] 
1

Funktion input ganz anders verhält sich in Python 2 und in Python 3.

Dies scheint Python 2 zu sein. In Python 2 wertet input eingegebene Daten als Python-Code aus. Wenn nur Ziffern eingegeben werden, gibt input eine ganze Zahl zurück. Das Konvertieren in eine Liste ist nicht möglich, daher der Fehler.

input ist unsicher und verursacht viele Probleme, so ist es am besten, es zu vermeiden. Verwenden Sie stattdessen raw_input.

user_input = raw_input("Please enter an 8 digit number: ") 

Dies wird eine Zeichenfolge, z.B. '12345678'.

Dies kann in eine Liste konvertiert werden. Die Liste wird die Zeichenfolge Zeichen für Zeichen durchlaufen.

digits = list(user_input) # e.g. ['1', '2', '3', '4', '5', '6', '7', '8'] 

Aber das nicht einmal nötig ist, können Sie direkt tun, wie Sie tun:

numbers = [int(i) for i in user_input] # e.g. [1, 2, 3, 4, 5, 6, 7, 8] 

BTW, der Python 3-Version von input die gleichen wie Python 2 raw_input.

Verwandte Themen