2016-04-16 9 views
0

Ich richte ein Solitaire-Spiel ein und ich versuche herauszufinden, wie ich jede Liste von Karten im Spaltenformat drucken kann. Irgendwelche Ideen, wie ich das mit den folgenden Listen machen könnte?Drucken von Listen im Spaltenformat in Python

[6♦] 
[2♣, 6♠, A♣, 7♣, J♣, XX] 
[4♥, 2♥, 4♠, 8♣, 5♦, XX, XX] 
[5♠, 3♦, A♠, 10♦, 3♠, XX, XX, XX] 
[7♥, 10♣, 10♥, 2♦, J♠, XX, XX, XX, XX] 
[8♦, 3♣, 7♦, 9♥, K♠, XX, XX, XX, XX, XX] 
[7♠, Q♠, 9♠, A♦, 3♥, XX, XX, XX, XX, XX, XX] 
+1

Blick auf [diese Frage] (http://stackoverflow.com/ Fragen/4937491/matrix-transpose-in-Python) und check out 'itertools.zip_longest'. – TigerhawkT3

+0

Wird dies helfen? http://stackoverflow.com/questions/12292970/write-a-list-to-columns –

Antwort

3

einige Vermutungen nehmen auf das, was Sie in Ihrem Code zur Verfügung haben und was Sie tun wollen, würde ich sagen, dass Sie von jeder Liste auf einer Zeile ein Element gedruckt werden soll und dann auf die nächste Liste verschieben.

# -*- coding: utf-8 -*- 
from itertools import izip_longest 

L1 = [u'6♦'] 
L2 = [u'2♣', u'6♠', u'A♣', u'7♣', u'J♣', u'XX'] 
L3 = [u'4♥', u'2♥', u'4♠', u'8♣', u'5♦', u'XX', u'XX'] 

for a,b,c in izip_longest(L1, L2, L3, fillvalue=' '): 
    print u'{0}\t{1}\t{2}'.format(a,b,c) 

Mit wenigen Änderungen sollten Sie bekommen, was Sie suchen. Für eine ernstere Terminal-Spiel-Benutzeroberfläche sollten Sie jedoch die Verwendung von python curses in Erwägung ziehen.

+1

Beachten Sie, dass meine Antwort Python 2.7-Code ist, während Tadhg McDonald-Jensen die Antwort Python3 ist. Wählen Sie den, der zu Ihrer Umgebung passt. – Cyb3rFly3r

2

Wie bereits von anderen erwähnt, itertools.zip_longest ist auf jeden Fall, was Sie für

from itertools import zip_longest 

stacks = [ 
      ['6♦'], 
      ['2♣', '6♠', 'A♣', '7♣', 'J♣', 'XX'], 
      ['4♥', '2♥', '4♠', '8♣', '5♦', 'XX', 'XX'], 
      ['5♠', '3♦', 'A♠', '10♦', '3♠', 'XX', 'XX', 'XX'], 
      ['7♥', '10♣', '10♥', '2♦', 'J♠', 'XX', 'XX', 'XX', 'XX'], 
      ['8♦', '3♣', '7♦', '9♥', 'K♠', 'XX', 'XX', 'XX', 'XX', 'XX'], 
      ['7♠', 'Q♠', '9♠', 'A♦', '3♥', 'XX', 'XX', 'XX', 'XX', 'XX', 'XX'] 
     ] 

for cards in zip_longest(*stacks,fillvalue=""): 
    print(" ".join("%3s"%c for c in cards)) 

Ergebnisse in dieser Ausgabe suchen:

6♦ 2♣ 4♥ 5♠ 7♥ 8♦ 7♠ 
    6♠ 2♥ 3♦ 10♣ 3♣ Q♠ 
    A♣ 4♠ A♠ 10♥ 7♦ 9♠ 
    7♣ 8♣ 10♦ 2♦ 9♥ A♦ 
    J♣ 5♦ 3♠ J♠ K♠ 3♥ 
    XX XX XX XX XX XX 
     XX XX XX XX XX 
      XX XX XX XX 
       XX XX XX 
        XX XX 
         XX 
+0

Das hat funktioniert, vielen Dank! Eine letzte Sache: Irgendeine Idee, wie man die 'XX' (umgedrehte Karten) vor den sichtbaren Karten druckt? –

+0

['reversed'] (https://docs.python.org/3.5/library/functions.html#reversed)' (liste (zip_longest (...))) ' –

+0

Dadurch bleibt viel Whitespace übrig jede Instanz von 'XX'. Gibt es eine Möglichkeit, jede Spalte an die erste Instanz von "XX" und nicht an die erste nicht entfernte Karte anzupassen? –