2016-06-09 7 views
0

Ich habe eine 2-D 6x6-Array, A. Ich möchte seine Werte Eingabe durch den Benutzer im folgenden Format oder ein Beispiel sein:Benutzereingabe von 2-D-Array in einem bestimmten Format (Python2)

0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 
0 0 0 0 0 0 

wo die 0 ‚s die Orte zeigen, wo der Benutzer ihre Werte schreiben.

Dies ist mein Code. Es gibt einen Fehler in split() zurück.

def arr_input(x): 
    for i in range(6): 
     for j in range(6): 
       n = int(input().split(' ')) 
       if n>=-9 and n<=9: 
        x[i][j] = n 
    print "\n" 

Ich möchte keine Eingabe in einer einzigen Zeile. Bitte helfen Sie!


EDIT 1 Der Code war ich brauchte schon vorgesehen: D. Trotzdem habe ich etwas neues und hilfreiches gelernt. Hier ist der bestehende Code, um die Aufgabe zu tun, ich wollte:

arr = [] 
for arr_i in xrange(6): 
    arr_temp = map(int,raw_input().strip().split(' ')) 
    arr.append(arr_temp) 
+0

'split' eine Liste zurückgibt. Argument to int() muss eine Zeichenfolge oder eine Zahl sein. Die Fehlermeldung hätte dies vermittelt. Bitte posten Sie auch die Fehlermeldung. – SilentMonk

Antwort

1

Zu allererst Sie verwenden input() die int zurückgibt, wenn Sie Zahlen in Terminal eingeben. Sie sollten raw_input() verwenden und Zeile für Zeile abrufen.

Zweitens, Sie versuchen, eine Liste in Ganzzahl zu konvertieren, sollten Sie die Listenwerte durchlaufen, konvertieren und in die resultierende Liste einfügen.

Festcode:

def arr_input(x): 
    for i in range(6): 
     num_list = raw_input().split(' ') 
     for j, str_num in enumerate(num_list): 
      n = int(str_num) 
      if n >= -9 and n <= 9: 
       x[i][j] = n 
    print "\n" 

Hier verwendete ich enumerate() Schleife obwohl der Nummernliste durch seinen Index jeder Iteration zu bekommen.

0

Es gibt eine Inkonsistenz in der Behandlung der Eingabe. In Python 2.7 ist die Funktion input() dazu bestimmt, ein und nur ein Argument von stdin zu lesen.

Ich bin mir nicht sicher, auf welche Weise Sie versuchen, die Eingabe zu lesen. Die verschachtelte For-Schleife schlägt vor, dass Sie versuchen, die Werte nacheinander zu lesen, aber die Aufteilung deutet darauf hin, dass Sie es tun es Zeile für Zeile. Um alle Grundlagen zu erfassen, erkläre ich beide Fälle. Mindestens einer von ihnen wird relevant sein.

Fall 1: Angenommen, Sie haben die Werte nacheinander eingegeben haben, dh

1 
4 
9 
4 
... 

In diesem Fall, was passiert ist, dass der Eingang() Funktion automatisch die Eingänge Parsen als Ganzzahlen, und wenn Sie versuchen, split() für eine Ganzzahl auszuführen, gibt es einen Typfehler. Python erwartet eine Zeichenfolge und Sie stellen eine int bereit. Das wird brechen. Es gibt eine einfache Lösung - dies behoben werden, mit dieser Linie zu ersetzen

n = input() 

Fall 2: Angenommen, Sie haben für Zeile die Zahlen Linie sind inputing, als Strings. Damit meine ich so etwas wie:

"1 3 4 5 7 9" 
"4 1 8 2 5 1" 
... 

Was ist hier auftritt, ist, dass int (...) versucht, eine Liste von Strings in eine ganze Zahl zu werfen. Das wird den Code klar brechen.Eine mögliche Lösung wäre, den Code zu restrukturieren, indem man die innere for-Schleife loswird. So etwas sollte funktionieren:

def arr_input(arr): 
    for i in range(6): 
     s = input() 
     nums_s = s.split(' ') 
     nums = [int(x) for x in nums_s] 
     arr.append(nums) 
    print "\n" 
    return arr 

# Usage 
a = [] 
print(a) 
a = arr_input(a) 
print(a) 
0

Geben Sie diesem Einzeiler einen Versuch:

def arr_input(N=6): 
    print 'Enter %d by %d array, one row per line (elements separated by blanks)' % (N, N)  
    return [[n if abs(n)<=9 else 0 for n in map(int, raw_input().split())] for i in range(N)] 

Die folgende interaktive Sitzung zeigt seine Nutzung:

>>> A = arr_input(3) 
Enter 3 by 3 array, one row per line (elements separated by blanks) 
1 2 -3 
4 5 -6 
8 9 10 
>>> A 
[[1, 2, -3], [4, 5, -6], [8, 9, 0]] 
Verwandte Themen