Cum se completează cu n caractere în Python (Programare, Python, String)

Gusto a intrebat.

Ar trebui să definesc o funcție pad_with_n_chars(s, n, c) care să ia un șir de caractere „s”, un număr întreg „n” și un caracter „c” și să returneze un șir de caractere format din „s” umplut cu „c” pentru a crea un șir de caractere cu centrul „s” de lungime „n”. De exemplu: „s” este un număr de spad_with_n_chars(”dog”, 5, ”x”) ar trebui să returneze șirul „xdogx„.

Comentarii

  • Soluția efectivă a problemei este cu siguranță importantă. Dar la fel de importantă este și detectarea și tratarea intrărilor eronate. Gândiți-vă la cele 3 argumente de intrare și vedeți dacă puteți anticipa ce valori ale fiecăruia dintre ele ar putea cauza probleme pentru pad_with_n_chars funcția. –  > Por PaulMcG.
6 răspunsuri
unutbu

Cu Python2.6 sau mai bine, nu este nevoie să definiți propria funcție; șirul de caractere format poate face toate acestea pentru dvs:

In [18]: '{s:{c}^{n}}'.format(s='dog',n=5,c='x')
Out[18]: 'xdogx'

Comentarii

  • +1. Vă rugăm să rețineți că formatul este destul de recent și probabil că nu va funcționa cu versiunile Python vechi. –  > Por e-satis.
  • De asemenea, este posibil să specificați lățimea și caracterul de umplere inline: '{:x^5}'.format('dog') –  > Por CodeManX.
  • De asemenea, este posibil să se înlănțuiască mai multe reguli. "{:#^10.0%}".format(0.234) ar ieși '###23%####'. Unde „#^10” este definiția de centrare și umplere, iar „.0%” este formatorul de procente. –  > Por JMDE.
Aditya Advani

Da, utilizați ljust sau rjust pentru a ajusta la stânga (pad dreapta) și la dreapta (pad stânga) cu orice caracter dat.

De exemplu … pentru a face din ‘111’ un șir de 5 cifre umplut cu ‘x’-uri

În Python3.6:

>>> '111'.ljust(5, 'x')
111xx

>>> '111'.rjust(5, 'x')
xx111

Georg Schölly

Se pare că sunteți în căutarea doar a unor indicatoare, nu a unei soluții complete. Așa că iată una:

Puteți multiplica șiruri de caractere în Python:

>>> "A" * 4
'AAAA'

În plus, aș folosi nume mai bune, în loc de s Aș folosi text, care este mult mai clar. Chiar dacă profesorul tău actual (presupun că înveți Python la universitate.) folosește astfel de abrevieri oribile.

ghostdog74

ei bine, din moment ce aceasta este o întrebare de temă pentru acasă, probabil că nu vei înțelege ce se întâmplă dacă folosești „bateriile” care sunt incluse.

def pad_with_n_chars(s, n, c):
    r=n - len(s)
    if r%2==0:
       pad=r/2*c
       return pad + s + pad
    else:
       print "what to do if odd ? "
       #return 1
print pad_with_n_chars("doggy",9,"y")

Alternativ, când nu mai ești la școală.

>>> "dog".center(5,"x")
'xdogx'

Kevin Postal
print '=' * 60
header = lambda x: '%s%s%s' % ('=' * (abs(int(len(x)) - 60) / 2 ),x,'=' * (abs(int(len(x)) - 60) / 2 ) )
print header("Bayors")

GooDeeJAY

În Python 3.x există metode string: ljust, rjust și center.

Am creat o funcție:

def header(txt: str, width=45, filler='-', align='c'):
    assert align in 'lcr'
    return {'l': txt.ljust, 'c': txt.center, 'r': txt.rjust}[align](width, filler)

print(header("Hello World"))
print(header("Hello World", align='l'))
print(header("Hello World", align='r'))

[Ouput]:

-----------------Hello World-----------------
Hello World----------------------------------
----------------------------------Hello World