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:
- 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
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"]