Python`da kelimeleri dikey olarak yazdırma

| | | | |

Verilen dize s. Tüm sözcükleri, s`de göründükleri sırayla dikey olarak döndürün. Sözcükler, gerektiğinde boşluklarla doldurulmuş bir dize listesi olarak döndürülür. (Basamaklarda yürümek yasaktır). Her kelime sadece bir sütuna yerleştirilecek ve her sütunda sadece bir kelime olacak.

Örnek 1:

Girdi: s = "NASILSIN" Çıktı: ["HAY ","ORO","WEU"] Açıklama: Her kelime dikey olarak yazdırılır. "HAY" "ORO" "WEU" 

Örnek 2:

Girdi: s = "OLACAK YA DA OLMAMALI" Çıktı: ["TBONTB","OEROOE"," T"] Açıklama: Sondaki boşluklara izin verilmez. "TBONTB" "OEROOE" " T" 

Örnek 3:

Girdi: s = "YARIŞMA GELİYOR" Çıktı: ["CIC","OSO","NM", "TI","EN","SG","T"] 

Kısıtlar:

  • 1 <= s.uzunluk <= 200
  • s yalnızca büyük İngilizce harfler içerir.
  • 2 kelime arasında yalnızca bir boşluk olması garanti edilir.

Yöntem 1: [Yataydan Dikeye] döngü kullanarak + " ‚"

Bunda, her karakterden sonra yeni satır karakteri ekleriz, böylece her öğe bir sonraki satırda işlenir.

# Python3 kodu, # Interconvert Horizontal ve Dikey Dize # [Yataydan Dikeye] kullanılarak döngü + " " # başlatılıyor dize test_str = `geeksforgeeks` # orijinal yazdırılıyor String print("Orijinal dize: " + str(test_str)) # her birinin arkasına " " eklemek için döngü kullanılarak karakter res = `` test_str`de ele için: res += ele + " " # yazdırma sonucu print("Dönüştürülmüş dize: " + str(res)) 

Çıktı:

 Çıktı Orijinal dize: geeksforgeeks T dizgeyi dönüştürdü: geeksforgeeks 

Yöntem #2: replace() + " ‚" kullanarak [Dikeyden Yataya]

Bunda, dönüştürme görevini " ‚" öğesini boş ile değiştirerek gerçekleştiriyoruz string.

# Python3 kodu, replace() + " " # kullanılarak [Dikeyden Yataya] kullanılarak # Interconvert Horizontal ve Vertical String`in çalışmasını gösterir. "Orijinal dize: " + str(test_str)) # bu sorunu çözmek için replace() + " " kullanılarak res = test_str.replace(" ", "") # print result print("Dönüştürülen dize: " + str (res)) 

Çıktı:

Orijinal dize: geeksforgeeks Dönüştürülen dize: geeksforgeeks 

Dikey Baskı Dizesi - Python3.2

StackOverflow sorusu

Bir komut dosyası yazıyorum. kullanıcı tarafından girilen dize olarak yazın ve şöyle dikey olarak yazdırın:

input = "John mağazaya yürüdü" output = J wttsoaohthleonkreed 

En çok ben yazdım aşağıdaki gibidir:

import  sys def verticalPrint(astring span>): wordList = astring.split(" ") wordAmount = len(wordList) maxLen = 0 için i içinde aralık (wordAmount): uzunluk = len(wordList[i]) if uzunluk >= maxLen: maxLen = uzunluk ###, aralık hatalarını önlemek için tüm kelimeleri aynı uzunlukta yapar ### için i in aralığı (wordAmount): if len(wordList[i]) < maxLen: wordList[i] = wordList[i] + (" ")*(maxLen-len( wordList[i])) için i in aralığı (wordAmount): için j içinde aralık (maxLen): yazdır(wordList[i][j]) def main(): astring = input("Bir dize girin:" + ` `) verticalPrint(astring) main() 

Çıktıyı nasıl alacağımı bulmakta zorlanıyorum doğru. For döngüsüyle ilgili bir sorun olduğunu biliyorum. Çıktısı:

input = "John yürüdü" output = J ohnwalked 

Herhangi bir tavsiyeniz var mı? (Ayrıca, print komutunun yalnızca bir kez kullanılmasını istiyorum.)

Yanıt:

itertools.zip_longest kullanın:

>>> itertools`dan import zip_longest >> > text = "John mağazaya yürüdü" için x in zip_longest(*text.split(), fillvalue=` `): yazdır (` `.join(x)) ...  J wttsoaohthleonkreed 

Diyelim ki s dizgemiz var. Tüm kelimeleri s`de göründükleri sırayla dikey olarak bulmalıyız. Burada kelimeler dizgeler listesi olarak döndürülür, gerekirse boşlukları doldurmamız gerekir. (Sondaki boşluklara izin verilmez.) Her kelime sadece bir sütuna yerleştirilecek ve bir sütunda sadece bir kelime olacak. Bu nedenle, giriş dizesi "SİZİN GİBİ?" ise, çıktı ["HAY‚", "ORO‚", "WEU‚"]

Bu sorunu çözmek için aşağıdakileri izleyeceğiz: aşağıdaki adımlar:

  • s:= boşluklara bölünmüş dizelerin bir listesini yapın, bir boş x dizisi yapın, s`deki her I kelimesi için satır = 0 ayarlayın
  • , satırı ayarlayın: = maksimum satır ve uzunluk i
  • col:= s uzunluğu
  • bir dizi oluşturur ve boş dizeyle doldurulur ve boyutu satırdır
  • I için 0 ila sütun ‚Äì 1
    • j:= 0
    • j < s[i] uzunluğu
      • aralığında i ‚Äì ans[j] uzunluğu >= 1 iken, do ans[j]:= ans[j] bitiştirme " ‚"
      • ans[j]:= ans[j] s[i`yi birleştirir , j]
      • j`yi 1 artır
  • dönüş ve
  • sınıf Çözüm(nesne): def printVertical(self, s ): s = s.split(" ") x = [] i in s için satır = 0: satır = max(satır, len(i)) col = len(s) ans = ["" for i in aralık( satır)] j = 0 i in range(col): j = 0 while j < len(s[i]): #print(j, i) while i - len(ans[j]) >= 1: ans [j] += " " ans[j] += s[i][j] j += 1 return ans ob = Solution() print(ob.printVertical("NASILSIN")) print(ob.printVertical("OLMAK YA DA OLMAMAK")) 

    Giriş:

    "NASIL OLMALISINIZ" "OLABİLİR YA DA OLMAMALISINIZ" 

    Çıktı:

    ["HAY","ORO","WEU"] ["TBONTB", "OEROOE"," T"]