2017-03-28 4 views
0

Ich versuche, etwas Art Summe Pyramide in meinem Code zu bauen, aber ich bin nicht in der Lage etwas nach dem Ende drucken = (in Python 2,7)Python: Problem mit String-Verkettung

from __future__ import print_function 
import time 

YEAR_STR= time.strftime('%Y') 
MONTH_STR=time.strftime('%m') 

num = 1 
for i in range(0, 5): 
    num = 1 
    for j in range(0, i+1): 
     print("(ABC_"+YEAR_STR+MONTH_STR+str(num), end="+") 
     num = num + 1 
    print() 

Der Ausgang I erhalten ist:

(ABC_2017031+ 
(ABC_2017031+(ABC_2017032+ 
(ABC_2017031+(ABC_2017032+(ABC_2017033+ 
(ABC_2017031+(ABC_2017032+(ABC_2017033+(ABC_2017034+ 
(ABC_2017031+(ABC_2017032+(ABC_2017033+(ABC_2017034+(ABC_2017035+ 

Aber die erwartete Ausgabe ist:

(ABC_2017031)/1 
(ABC_2017031+ABC_2017032)/2 
(ABC_2017031+ABC_2017032+ABC_2017033)/3 
(ABC_2017031+ABC_2017032+ABC_2017033+ABC_2017034)4 

und so weiter ....

Ich bin nicht in der Lage die letzte )/num in der print-Anweisung hinzuzufügen. Kann das gemacht werden?

+1

wie Sie erwarten, '(ABC_2017031)/1 ', wenn Sie' Druck setzen (...., end = „+“) 'jedes Mal, wenn Sie drucken hinzufügen a '+' bis zum Ende der print-Anweisung .... – MooingRawr

+0

@MooingRawr Sie meine rant gestohlen hat. Das OP scheint den "Druck" nicht korrekt zu verketten. Es enthält nicht einmal die **)/num **, die er sucht. –

+0

, dass wegen war nach mehreren Versuchen nichts funktionierte, und ich dachte, das war sauberer;) – Viv

Antwort

2

Sie können es so selbst tun:

  • Sie die Ausgabe in einer temporären Variablen
  • wird verketten
  • Sie ‚+‘ Zugabe wird, wenn es in der Zeile nicht das letzte Zeichen ist wobei gedruckte

    import time 
    
    YEAR_STR= time.strftime('%Y') 
    MONTH_STR=time.strftime('%m') 
    
    
    for i in range(0, 5): 
        num = 0 
        tmp = "" 
        for j in range(0, i+1): 
        num = num + 1 
        tmp += "ABC_"+YEAR_STR+MONTH_STR+str(num) 
        if (j < i): 
         tmp+="+" 
    
        print("(%s)/%d"% (tmp, num)) 
    

Output:

(ABC_2017031)/1 
(ABC_2017031+ABC_2017032)/2 
(ABC_2017031+ABC_2017032+ABC_2017033)/3 
(ABC_2017031+ABC_2017032+ABC_2017033+ABC_2017034)/4 
(ABC_2017031+ABC_2017032+ABC_2017033+ABC_2017034+ABC_2017035)/5 
+0

Wie dies anstelle von 0 von 1 beginnen? (innerhalb der Klammern) – Viv

+0

Sorry, @Viv. Jetzt sollte es stimmen. –

+0

Statt mit zu einem String verketten '+ =', warum setzen sie nicht alle in einer Liste und verwenden Sie dann '‚+‘. Join()'? Das wäre viel effizienter. –

0

Die end= Option schließt eigentlich nur die Zeichenfolge auf diese Weise. Sie wollen eigentlich so etwas wie dieses:

for i in range(5): 
    print("+".join(["(ABC_"+YEAR_STR+MONTH_STR+")" for num in range(0, i+1)]), end="/{}\n".format(i+1)) 
+0

Aber dies druckt die Werte nicht inkrementell innerhalb der Klammern. (ABC_201703) + (ABC_201703) + (ABC_201703) + (ABC_201703) + (ABC_201703)/5 und die Halterungen sollten ganze Reihe eingeschlossen durch num unterteilt sein – Viv