2017-05-29 7 views
0

EingangPython Valueerror: zu viele Werte entpacken (erwarteter 2)

2 4 
1 2 3 4 
1 0 
2 1 
2 3 

ich brauche die Paare von Zahlen von dritter Zeile bis zum Ende (nur 2 Zahlen aus der dritten Zeile) zu extrahieren
ist hier meine Funktion

def read_nodes(): 
    n, r = map(int, input().split()) 
    n_list = [] 

    for i in range(2 , n): 
     n1, n2 = map(int, input().split()) 
     n_list.append([n1, n2]) 
    return n_list 
print(read_nodes()) 

ich außer [[1,0],[2,1],[2,3]] aber sagt ValueError: too many values to unpack (expected 2)

+0

Eingang ist eine Matrix? –

+0

wird Ihre Eingabe als einzelne Zeile übergeben? – RomanPerekhrest

+0

Die zweite Eingabezeile wird von der ersten Iteration der for-Schleife verarbeitet. Die Tatsache, dass Sie Ihren Index bei "2" starten, ändert das nicht. – Kendas

Antwort

2

Es gibt zwei Orte, an denen diese

n, r = map(int, input().split()) 

und

n1, n2 = map(int, input().split()) 

In beiden Fällen passieren können Sie davon aus, dass der Eingang nur zwei Werte enthält. Was ist, wenn es 3 oder 20 gibt? Versuchen Sie so etwas wie

Oder wickeln Sie das Ganze in Versuch/Ausnahme, so dass zu viele Werte sauber behandelt werden.

Ihre for-Schleife kann wahrscheinlich nur

sein
for i in range(2 , n): 

    n_list.append(map(int, input().split()) 
+0

nur 2 Zahlen aus der dritten Zeile –

2

@ e4c5 bereits erklärt, warum der Fehler sehr gut auftritt, so werde ich diesen Teil überspringen. Wenn Sie Python 3 verwenden und nur an den ersten beiden Werten interessiert sind, ist dies eine gute Möglichkeit, Extended Iterable Unpacking zu verwenden. Hier sind einige kurze Demos:

>>> n1, n2, *other = map(int, input().split()) 
1 2 3 4 
>>> n1 
1 
>>> n2 
2 
>>> other 
[3, 4] 

other die "Wildcard" Name ist, der die restlichen Werte zu erreichen. Sie können prüfen, ob der Benutzer zur Verfügung gestellt genau zwei Werte, die durch die truthyness von other Überprüfung:

>>> n1, n2, *other = map(int, input().split()) 
1 2 
>>> if not other: print('exactly two values') 
... 
exactly two values 

Beachten Sie, dass dieser Ansatz noch eine ValueError werfen, wenn der Benutzer liefert weniger als zwei Zahlen, weil wir mindestens zwei auspacken müssen aus der Liste input().split(), um die Namen n1 und n2 zuweisen.

+0

jetzt, warum habe ich nicht daran gedacht :) +1 – e4c5

Verwandte Themen