2016-05-03 17 views
0

Problem Manipulation:Python: Strings in eine Liste

Ich habe eine Praxis Aktivität mit meiner Online-Klasse, die mir sagt, Strings in 8 verschiedenen Orientierungen zu manipulieren und sie in einer Liste setzen. 1. von links nach rechts, 2. von rechts nach links, 3. von oben nach unten, 4. von oben nach unten, 5. von schräg oben links nach rechts oben, 6. von schräg oben rechts nach unten links, 7. diagonal von unten nach rechts oben links , 8. diagonal oben links nach unten rechts. Der Code sollte mit jeder Dimension der Datei kompatibel sein. reverse Methode kann verwendet werden.

Jede Hilfe wird sehr geschätzt. Ich bin ein Neuling bei diesen.

A B C D E F 
G H I J K L 
M N O P Q R 
S T U V W X 
Y Z 

erwartete Ausgabe:

leftToRight = ['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX', 'YZ'] 

rightToLeft = ['FEDCBA', 'LKJIHG', 'RQPONM', 'XWVUTS', 'ZY'] 

topToButtom = ['AGMSY', 'BHNTZ', 'CIOU', 'DJPV', 'EKQW', 'FLRX'] 

buttomToTop = ['YSMGA', 'ZTNHB', 'UOIC', 'VPJD', 'EKQW', 'FLRX'] 

bLeftToURight = ['A', 'GB', 'MHC', 'SNID', 'YTOJE', 'ZUPKF', 'VQL', 'WR', 'X'] 

uRightToBLeft = ['A', 'BG', 'CHM', 'DINS', 'EJOTY', 'FKPUZ', 'LQV', 'RW', 'X'] 

bRightToULeft = ['Y', 'ZS', 'TM', 'UNG', 'VOHA', 'WPIB', 'XQJC', 'RKD', 'LE', 'F'] 

uLeftToBRight = ['Y', 'SZ', 'MT', 'GNU', 'AHOV', 'BIPW', 'CJQX', 'DKR', 'EL', 'F'] 

mein Code so weit zum Öffnen der Datei und Ausprobieren links

Text (in letters.txt-Datei) zu manipulieren rechts:

leftToRight = [] 
openL = open("letters.txt") 
letters = openL.read() 
letters = letters.replace(" ","") 
for line in letters: 
    leftToRight.append(line.strip()) 
print(lefToRight) 

druckt:

['A', 'B', 'C', 'D', 'E', 'F', '', 'G', 'H', 'I', 'J', 'K', 'L', '', 'M', 'N', 'O', 'P', 'Q', 'R', '', 'S', 'T', 'U', 'V', 'W', 'X', '', 'Y', 'Z'] 

gedruckt werden soll:

['ABCDEF', 'GHIJKL', 'MNOPQR', 'STUVWX', 'YZ'] 
+0

Ändern Sie 'openL = ...' zu 'letters = ...' und entfernen Sie die 'letters = openL.read()' – zondo

Antwort

0

Ich würde two-dimensional array mit den einzelnen Zeichen eingerichtet (alle nicht besetzten Feld mit einer entsprechenden Standard Füllung, möglicherweise 0-Zeichen). Dann durchlaufen sie in beiden dimenstions (Pseudo-Code nur, wie Sie nur für Ideen gefragt):

from 0 to height: 
    from 0 to width: 
     # collect string 
    # add it to LR array 
    # add reverted string to RL array 

Analog vertikal, Höhe und Breite vertauscht ...

Diagonals:

from h = 0 to max(height, width): 
    from w = 0 to h: 
     if h < height && w < width: 
      # add matrix[h][w] to string 
    #add string to list BLUR 
    #add reverted string to URBL 

from h = max(height, width) to 0: 
    from w = h to max(height, width): 
     if h < height && w < width: 
      # add matrix[h][w] to string 
    #add string to list ULBR 
    #add reverted string to BRUL 

Edit: Nach den Kommentaren und Ihre Bearbeitung:

Sie könnten möglicherweise Zeile für Zeile lesen, siehe here. Statt

print line; 

würden Sie

leftToRight.append(line.replace(" ", "").strip()); 

haben Sie mögen vielleicht die maximale Stringlänge innerhalb dieser Schleife greifen, um mit Standardwerten in einem zweiten Sprung zu füllen (oder überprüfen, ob alle Strings haben die gleiche Länge).

By the way: leftToRight eigentlich schon ist Ihre zwei dimenstional Array, können Sie es verwenden, um direkt den Rest zu generieren: rightToLeft: einfach alle Saiten umkehren - vertikal und Diagonalen: wie oben beschrieben.

+0

Sie können Ihren Code geben, wenn Sie möchten, und ich würde es mit mir vergleichen. Danke für deine Antwort. – Glenn

+0

@Glenn Ich habe keinen echten Code geschrieben - wollte dir nur die Hinweise geben, die du verlangst ... – Aconcagua

+0

@Glenn Wenn du Hilfe zum Lesen von Dateien brauchst, probiere Google mit 'python read file' aus, das sollte geben Sie einige Tutorials ... Wenn Sie Code geschrieben haben, der noch nicht funktioniert, posten Sie es hier und ich werde es mir ansehen. – Aconcagua

Verwandte Themen