Python'da text-paragraf hizalama

Merhaba,
Bir proje olarak bize verilen bir paragrafı yine bize verilen satır genişliğinde yazdırmam gerekiyor.Kelimeleri yarıda kesemiyorum.Bunu nasıl yapabilirim ?

Edit:
örnek
Hizalamanın buna benzemesi istenmiş yani sağ ve sol sütunun birbiriyle hizalı olması gerekiyor gerekirse soldan başlıyarak boşluk bırakıla bilir.

Şöyle bir şey yapabilirsiniz herhalde, biraz düzeltme lazım ama.

def align(text, column):
    result = ""
    count = 1
    for i in text.split():
        if len(result) >= column * count:
            result += f"\n{i} "
            count += 1
        else:
            result += f"{i} "           
    return result
    
    
text = """Forumumuzun bulunduğu sunucuda yer azaldığı için forumu başka bir yere taşımam gerekti. Aslında tek sorun yer azalması değildi. Forumun bulunduğu sunucu biraz fazla masraflıydı. Yarı yarıya masrafı olan ancak neredeyse aynı özelliklerde bir sunucuya taşımayı düşünüyordum forumu bir süredir. Ancak kesinti olmasını da istemediğim için taşıyamıyordum. Ancak bir güncelleme yüklemeye çalışırken yer olmamasından dolayı forum kullanım dışı kaldı. Yeri azaltmaya çalışsam da başarılı olamadım. Daha fazla uğraşabilirdim ancak ileride bu sorun tekrarlayacaktı. Bu durumda forumu taşımanın en iyisi olduğuna karar verdim. Forum bir anda kapandığı için önceden haber veremedim. Bunun için kusura bakmayın. Bir başka sunucuya yeni bir Discourse kurup eski forumdaki yedeği buraya uyguladım. Böylece eski forumumuzun neredeyse aynısına kavuştuğumuzu düşünüyorum. Ancak eksiklik ve sorunlarla karşılaşırsanız bana bildirin, olabildiğince kısa zamanda çözmeye çalışırım.
"""

print(align(text, 49))

Çıktı:

Forumumuzun bulunduğu sunucuda yer azaldığı için 
forumu başka bir yere taşımam gerekti. Aslında tek 
sorun yer azalması değildi. Forumun bulunduğu 
sunucu biraz fazla masraflıydı. Yarı yarıya masrafı 
olan ancak neredeyse aynı özelliklerde bir 
sunucuya taşımayı düşünüyordum forumu bir süredir. 
Ancak kesinti olmasını da istemediğim için taşıyamıyordum. 
Ancak bir güncelleme yüklemeye çalışırken 
yer olmamasından dolayı forum kullanım dışı 
kaldı. Yeri azaltmaya çalışsam da başarılı olamadım. 
Daha fazla uğraşabilirdim ancak ileride 
bu sorun tekrarlayacaktı. Bu durumda forumu taşımanın 
en iyisi olduğuna karar verdim. Forum bir 
anda kapandığı için önceden haber veremedim. Bunun 
için kusura bakmayın. Bir başka sunucuya yeni 
bir Discourse kurup eski forumdaki yedeği buraya 
uyguladım. Böylece eski forumumuzun neredeyse 
aynısına kavuştuğumuzu düşünüyorum. Ancak eksiklik 
ve sorunlarla karşılaşırsanız bana bildirin, 
olabildiğince kısa zamanda çözmeye çalışırım.

Hocam buna çok benzer ama mesela bu sola dayamış hepsini ,bizimkinin tüm satırların genişliği aynı olmasını istiyor

Demek istediğinizi anladım, ancak satırların uzunluğu satır sonundaki kelimenin uzunluğuna da bağlı olmaz mı?

Eğer bizden istenen satır genişliği 35 ise ve kelimeleri bölmeden kalan boşlukları kelimeler arasına bölüştürmemiz isteniyor

Anladım, tamam, bir bakalım.

Hocam bakabildiniz mi?

Bakıyorum ama daha yapamadım.

Bu kod istediğiniz gibi çalışıyor mu acaba:

text = """Forumumuzun bulunduğu sunucuda yer azaldığı için forumu başka bir yere taşımam gerekti. Aslında tek sorun yer azalması değildi. Forumun bulunduğu sunucu biraz fazla masraflıydı. Yarı yarıya masrafı olan ancak neredeyse aynı özelliklerde bir sunucuya taşımayı düşünüyordum forumu bir süredir. Ancak kesinti olmasını da istemediğim için taşıyamıyordum. Ancak bir güncelleme yüklemeye çalışırken yer olmamasından dolayı forum kullanım dışı kaldı. Yeri azaltmaya çalışsam da başarılı olamadım. Daha fazla uğraşabilirdim ancak ileride bu sorun tekrarlayacaktı. Bu durumda forumu taşımanın en iyisi olduğuna karar verdim. Forum bir anda kapandığı için önceden haber veremedim. Bunun için kusura bakmayın. Bir başka sunucuya yeni bir Discourse kurup eski forumdaki yedeği buraya uyguladım. Böylece eski forumumuzun neredeyse aynısına kavuştuğumuzu düşünüyorum. Ancak eksiklik ve sorunlarla karşılaşırsanız bana bildirin, olabildiğince kısa zamanda çözmeye çalışırım.
"""

def align(text, column):
    out = [""]
    text = text.split(" ")
        
    i = 0
    while True:
        try:
            while len(out[-1]) + len(text[i]) <= column:
                out[-1] += text[i] + " "
                i += 1
            out[-1] += " "* (column - len(out[-1]))
            out.append("")
            if len(out[-2]) == column + 1: out[-2] = out[-2][:-1] ; out[-1] += " "
        except IndexError:
            break
    out = out[:-1]
    out = "\n".join(out)
    return out

print(align(text,49))

Benzer ama bura da sadece sol sütunlar aynı hizada sağ sütünlarında aynı hizada olması isteniyor

Her satır kendi içinde mi ortalanmış olacak? Yani şunun gibi mi:

  aaaa  
 bbbbbb 
cccccccc
   dd   

Ali bana top at
Ahmet eve gel
Okullar tatil mi

Gibi bir şey istiyorsanız bu her paragraf için mümkün değil. Her stringi belirli bir satır uzunluğu ile hiçbir kelimeyi ikiye bölmeden bu hale getiremeyiz.

örnek

Yani siz aradaki boşlukları arttıralım diyorsunuz?

aynen, eğer sağ sütunlar denk değilse boşluklar ile denkleştiricez

Keşke bunu en başta belirtip bu fotoğrafı da en başta atsaydınız. Sorunuzu tam anlayamamışız. Bize boşlukları arttırabileceğimizi hiç söylememiştiniz. Ben şimdi kod yazamayacağım ama yarın sorunuza bakanlar olur diye tahmin ediyorum.

Tamamdır teşşekkürler

Hocam bakabildiniz mi dün den beri?
Sadece şu en sonda ki boşlukları dağıtmak kaldı.

import itertools

def interleave(*iterables):
	"[a,b,c], [1,2,3] -> [a,1,b,2,c,3]"
	return [c for c in itertools.chain.from_iterable(itertools.zip_longest(*iterables)) if c is not None]

def justify(width, text):
	return "\n".join(map(lambda line: (lambda words: (lambda w, n: "".join(interleave(words, [" " * (w // n + 2)] * (w % n) + [" " * (w // n + 1)] * (n - w % n))))(width - len(line), len(words)-1))(line.split()), text.splitlines()))

txt = """\
Forumumuzun bulunduğu sunucuda yer azaldığı için
forumu başka bir yere taşımam gerekti. Aslında tek
sorun yer azalması değildi. Forumun bulunduğu
sunucu biraz fazla masraflıydı. Yarı yarıya masrafı
olan ancak neredeyse aynı özelliklerde bir
sunucuya taşımayı düşünüyordum forumu bir süredir.
Ancak kesinti olmasını da istemediğim için taşıyamıyordum.
Ancak bir güncelleme yüklemeye çalışırken
yer olmamasından dolayı forum kullanım dışı
kaldı. Yeri azaltmaya çalışsam da başarılı olamadım.
Daha fazla uğraşabilirdim ancak ileride
bu sorun tekrarlayacaktı. Bu durumda forumu taşımanın
en iyisi olduğuna karar verdim. Forum bir
anda kapandığı için önceden haber veremedim. Bunun
için kusura bakmayın. Bir başka sunucuya yeni
bir Discourse kurup eski forumdaki yedeği buraya
uyguladım. Böylece eski forumumuzun neredeyse
aynısına kavuştuğumuzu düşünüyorum. Ancak eksiklik
ve sorunlarla karşılaşırsanız bana bildirin,
olabildiğince kısa zamanda çözmeye çalışırım.
"""

print(justify(60, txt))

Edit: lambda’larin iki tanesi let/alias kullanamadigim icin var. interleave'i de duzgun yazamamis olabilirim, stack overflow’dan copy pasta.

4 Beğeni

Hocam çok saolasın 2 gündür uğraşıyordum bunun üstünde