2016-10-11 2 views
-2

J'ai posé cette question plus tôt, mais la réponse que j'ai reçue n'a pas fonctionné correctement, j'ai donc recommencé complètement. J'ai maintenant un code plus développé mais ne peut toujours pas comprendre ce qui est erroné et comment entourer un bonjour et dans une boîte comme ceci:Dessinez une boîte autour de la ligne de message

Example

La question initiale était: Étant donné un message qui peut contenir plusieurs lignes , utilisez la fonction split() pour identifier les lignes individuelles et utilisez l'une des approches de formatage que nous avons apprises dans le cadre de votre solution pour créer la chaîne qui, une fois imprimée, dessine une boîte autour des lignes du message, toutes centrées. La boîte utilise des barres verticales et des tirets sur les côtés (|, -), des plusses dans les coins (+), et il y a toujours une colonne d'espaces à gauche et à droite de la ligne la plus large du message. Toutes les lignes sont centrées.

Voici le code que j'ai trouvé. Je pense qu'il est sur la bonne voie, mais je reçois des erreurs en particulier avec la fonction ver

def border_msg(msg): 
    count=len(msg) 
    for i in range(0,len(msg)): 
     count+=1 

    count = count 
    dash="-" 
    for i in range (0,count+1): 
     dash+="-" 
    h="{}{}{}".format("+",dash,"+") 

    count=count+2 

    ver="{}{:^'count'}{}".format("|",msg,"|") 
    print (ver) 

print(border_msg('a')) 
print(border_msg("hello")) 
+0

BTW: 'count = len (msg)' – furas

+0

Merci pour le conseil que je viens de réviser ce – famguy74

+0

'{:^'count'}' ??? ce n'est pas Bash - vous ne pouvez pas insérer de valeur en utilisant ''''. – furas

Répondre

1

Pour utiliser count valeur dans la chaîne formating dont vous avez besoin

ver = "{}{:^{}}{}".format("|", msg, count,"|") 

ou en utilisant les noms - il sera donc plus lisible pour vous

ver = "{a}{b:^{c}}{d}".format(a="|", b=msg, c=count, d="|") 

mais vous pouvez aussi faire

ver = "|{a:^{b}}|".format(a=msg, b=count) 

votre événement pouvez ajouter des espaces dans la chaîne

ver = "| {} |".format(msg) 

Votre code

def border_msg(msg): 

    count = len(msg) + 2 # dash will need +2 too 

    dash = "-"*count 

    print("+{}+".format(dash)) 

    print("| {} |".format(msg)) 

    print("+{}+".format(dash)) 


border_msg('a')  # without print 
border_msg("hello") # without print 

ou sans print dans la fonction

def border_msg(msg): 

    count = len(msg) + 2 # dash will need +2 too 

    dash = "-"*count 

    return "+{dash}+\n| {msg} |\n+{dash}+".format(dash=dash,msg=msg) 


print(border_msg('a'))  # with print 
print(border_msg("hello")) # with print 
+0

Merci je pense que c'est la meilleure solution – famguy74

1

est ici une solution possible pour mettre une boîte autour de quelque chose:

def box_lines(lines, width): 
    topBottomRow = "+" + "-" * width + "+" 
    middle = "\n".join("|" + x.ljust(width) + "|" for x in lines) 
    return "{0}\n{1}\n{0}".format(topBottomRow, middle) 

Il attend à ce que les lignes qui sont correctement divisées:

def split_line(line, width): 
    return [line[i:i+width] for i in range(0, len(line), width)] 

def split_msg(msg, width): 
    lines = msg.split("\n") 
    split_lines = [split_line(line, width) for line in lines] 
    return [item for sublist in split_lines for item in sublist] # flatten 

Mettre box_lines et split_msg ensemble, nous obtenons:

def border_msg(msg, width): 
    return(box_lines(split_msg(msg, width), width)) 

Nous pouvons l'utiliser comme suit:

print(border_msg("""I'll always remember 
The chill of November 
The news of the fall 
The sounds in the hall 
The clock on the wall 
Ticking away""", 20)) 

qui sort

+--------------------+ 
|I'll always remember| 
|The chill of Novembe| 
|r     | 
|The news of the fall| 
|The sounds in the ha| 
|ll     | 
|The clock on the wal| 
|l     | 
|Ticking away  | 
+--------------------+ 
+0

Votre solution fonctionne très bien mais il y a un problème avec la génération de la bordure "-". Il dit border_msg (bonjour): attendu + ------- + mais obtenu + ----- +. Comment l'aurais-je généré deux "-" pour la frontière? – famguy74

+0

@ famguy74 On y va. C'était plus dur que je ne le pensais. –

+0

Merci d'avoir choisi la réponse de quelqu'un d'autre comme meilleure réponse parce qu'elle l'a complétée dans une fonction bien que je puisse la changer pour la vôtre car il y a des problèmes avec le formatage J'essaierai d'utiliser votre réponse aussi – famguy74