2016-10-10 1 views
-3

Ich arbeite an dieser Python-Aufgabe, die ich nicht herausfinden kann. Es ist die letzte von 3 Funktionen und die ersten 2 waren viel einfacher zu programmieren als diese. Die Anweisungen sind "Gegeben eine Nachricht, die mehrere Zeilen enthalten kann, verwenden Sie die Funktion split(), um die einzelnen Zeilen und die Funktion format() zu identifizieren, so dass beim Drucken ein Feld um die Zeilen der Nachricht, alle zentriert verwendet vertikale Balken & Bindestriche an den Seiten (|, -), + in den Ecken (+), und es gibt immer eine Spalte mit Leerzeichen links und rechts von der breitesten Zeile der Nachricht. "Zeichnungskasten um Nachricht

Einige Beispiele für das, was diese Funktion tun muss:

Test, dass: border_msg ('a') == ‚+ --- + \ n | a | \ n + --- + \ n '

Testen Sie Folgendes: border_msg (' hallo ') ==' + ------- + \ n | hallo | \ n + ------- + \ n '

Testen Sie das: border_msg ("hi! \ nwie bist du? \ ndrive sicher!") ==' + -------- ------- + \ n | Hallo! | \ n | wie gehts? | \ n | sicher fahren! | \ n + --------------- + \ n '

Ich denke, es muss die obigen Tests drucken, so dass die Wörter in der Mitte von der "+ - ---- + auf der Ober- und Unterseite und „|“. 's an den Seiten

hier ist der Code, den ich so weit habe ich nicht sicher bin, wo ich von hier aus gehen würde

def border_msg(msg): 
    border_msg.split("\n") 
    '%s'.format(msg) 
    return border_msg(msg) 
    print border_msg(msg) 
..
+0

fix Einzug. Und was ist mit unendlicher Rekursion? –

+0

Nur die Einrückung behoben und wenn Sie über die Rückkehr sprechen dann bin ich nur nicht sicher, welche zu verwenden Ich denke, könnte entweder – famguy74

+2

Famguy74: @ Jean-François Fabre spricht über die Tatsache, dass Ihre 'border_msg()' Funktion ruft sich bedingungslos auf (wird also nie zurückkehren). – martineau

Antwort

-1

Ich habe ein kleines Stück Code genäht, das die verpackten Nachrichten implementiert. Um ehrlich zu sein, es ist nicht das schönste Stück Code, aber es macht den Job und hoffentlich wird es dir helfen, es selbst zu tun (und besser). Zu diesem Zweck habe ich beschlossen, keine Kommentare hinzuzufügen, also musst du das für dich selbst durchdenken. Vielleicht nicht die beste Lernmethode, aber lass es uns trotzdem versuchen:]

Code auf Github.

from math import ceil, floor 

def boxed_msg(msg): 
    lines = msg.split('\n') 
    max_length = max([len(line) for line in lines]) 
    horizontal = '+' + '-' * (max_length + 2) + '+\n' 
    res = horizontal 
    for l in lines: 
     res += format_line(l, max_length) 
    res += horizontal 
    return res.strip() 

def format_line(line, max_length): 
    half_dif = (max_length - len(line))/2 # in Python 3.x float division 
    return '| ' + ' ' * ceil(half_dif) + line + ' ' * floor(half_dif) + ' |\n' 

print(boxed_msg('first_line\nsecond_line\nthe_ultimate_longest_line')) 
# +---------------------------+ 
# |   first_line  | 
# |  second_line  | 
# | the_ultimate_longest_line | 
# +---------------------------+ 
+0

Ich behaupte nicht, dass dies die bestmögliche Antwort ist, aber könntest du den Downvoting kommentieren - oder ist es selbsterklärend? – quapka

+0

Danke, das ist definitiv die umfassendste und hilfreichste Antwort. Ich bin mir nicht sicher, wer all diese Antworten ablehnt. Eine Notiz an alle, die diese 15-18 Uhr lesen, ist keine gute Zeit, um Fragen zu stellen, es ist das einzige Mal, dass ich Stimmen bekommen habe alle anderen Teile des Tages sind die Leute freundlich und wollen einfach helfen – famguy74

+0

Vielleicht ist das Problem, dass dies Site ist nicht für Hausaufgaben für andere Leute. Ich beschuldige dich nicht. Aber wenn es war, habe ich es für dich bereitgestellt. Aber ich erlaube mir, dir zu vertrauen, dass du mehr tun wirst, als nur den Code zu kopieren. Wenn nicht, wird dieser Ansatz Sie in der Zukunft erhalten.Glückliche Kodierung! – quapka

-1

Finden Sie die Länge Ihrer längsten Zeile N; (N+2) * '-' gibt Ihnen die oberen und unteren Grenzen.Vor jeder Zeile fügen Sie eine Leiste: '|'; Pad jede Zeile mit N - n Leerzeichen, wobei n die Länge der Zeile ist Jede Zeile eine Bar. Drucken Sie in der richtigen Reihenfolge: top , Zeile 1, Zeile 2, ..., Zeile L, unten.

1
def border_msg(msg): 
    msg_lines=msg.split('\n') 
    max_length=max([len(line) for line in msg_lines]) 
    count = max_length +2 

    dash = "*"*count 
    print("*%s*" %dash) 

    for line in msg_lines: 
     half_dif=(max_length-len(line)) 
     if half_dif==0: 
      print("* %s *"%line) 
     else: 
      print("* %s "%line+' '*half_dif+'*')  

    print("*%s*"%dash) 



border_msg('first_line\nsecond_line\nthe_ultimate_longest_line') # without print 
Verwandte Themen