Python에서 세로로 단어 인쇄

| | | | | | | | | | | | | | | | | | | | | |

주어진 문자열 s. s에 나타나는 것과 같은 순서로 모든 단어를 세로로 반환합니다. 단어는 필요한 경우 공백으로 채워진 문자열 목록으로 반환됩니다. (계단을 걷는 것은 허용되지 않습니다.) 각 단어는 하나의 열에만 배치되며 열당 하나의 단어만 있습니다.

예제 1:

입력: s = "HOW ARE YOU" 출력: ["HAY ","ORO","WEU"] 설명: 각 단어는 세로로 인쇄됩니다. "HAY" "ORO" "WEU" 

예제 2:

입력: s = "BE OR NOT TO BE" 출력: ["TBONTB","OEROOE"," T"] 설명: 후행 공백은 허용되지 않습니다. "TBONTB" "OEROOE" " T" 

예제 3:

입력: s = "CONTEST IS COMING" 출력: ["CIC","OSO","NM", "TI","EN","SG","T"] 

제약 조건:

  • 1 <= s.length <= 200
  • s에는 영문 대문자만 포함됩니다.
  • 두 단어 사이에는 공백이 하나만 있어야 합니다.

방법 #1: 루프를 사용하여 [가로에서 세로로] + " ‚"

여기서 각 요소가 다음 줄에서 렌더링되도록 각 문자 뒤에 개행 문자를 추가합니다.

# Interconvert Horizontal 및 Vertical String # using [Horizontal to Vertical] using 루프 + " " # 문자열 초기화 test_str = `geeksforgeeks` # 원래 문자열 인쇄 String print("원래 문자열은 다음과 같습니다. " + str(test_str)) # 루프를 사용하여 각 뒤에 " " 문자 res = `` for ele in test_str: res += ele + " " # 인쇄 결과 print("변환된 문자열: " + str(res)) 

출력:

 출력 원래 문자열은 다음과 같습니다. geeksforgeeks T 그는 문자열을 변환했습니다: geeksforgeeks 

방법 #2: replace() + " ‚"를 사용하여 [Vertical to Horizontal] string.

# # Replace() + " " # 문자열 초기화 test_str = `geeksforgeeks ` # 인쇄 원본 String print( "원래 문자열은: " + str(test_str)) # 이 문제를 해결하기 위해 replace() + " "를 사용 res = test_str.replace(" ", "") # 인쇄 결과 print("변환된 문자열: " + str (res)) 

출력:

원래 문자열: geeksforgeeks 변환된 문자열: geeksforgeeks 

세로 인쇄 문자열 - Python3.2

StackOverflow 질문

다음을 수행하는 스크립트를 작성 중입니다. 사용자가 입력한 문자열로 다음과 같이 세로로 인쇄합니다.

input = "John은 가게로 걸어갔다" output = J wttsoaohthleonkreed 

내가 가장 많이 썼습니다 다음과 같은 코드:

가져오기  시스템 def verticalPrint(문자열 span>): wordList = astring.split(" ") wordAmount = len(wordList) maxLen = 0 에 대해  <스파 n class="hljs-built_in">범위(wordAmount): 길이 = len(wordList[i]) if length >= maxLen: maxLen = length ### 범위 오류를 피하기 위해 모든 단어를 동일한 길이로 만듭니다 ###   범위(wordAmount): if len(wordList[i]) < maxLen: wordList[i] = wordList[i] + (" ")*(maxLen-len( wordList[i])) 에 대한  범위 span> (wordAmount): for j  범위 (maxLen): 인쇄(wordList[i][j]) def 메인(): astring = 입력("문자열을 입력하세요:" + ` `) verticalPrint(astring) main() 

출력을 얻는 방법을 파악하는 데 문제가 있습니다. 옳은. for 루프에 문제가 있다는 것을 알고 있습니다. 출력은 다음과 같습니다.

입력 = "John이 걸었습니다" output = J ohnwalked 

조언이 있습니까? (또한 print 명령을 한 번만 사용하고 싶습니다.)

답:

itertools.zip_longest 사용:

>>>  itertools 가져오기 zip_longest >> > text = "John이 가게에 걸어갔다" for x  zip_longest(*text.split(), fillvalue=` `): 인쇄 (` `.join(x)) ...  J wttsoaohthleonkreed 

문자열 s가 있다고 가정합니다. s에 나타난 순서대로 모든 단어를 수직으로 찾아야 합니다. 여기서 단어는 문자열 목록으로 반환되며 필요한 경우 공백을 채워야 합니다. (후행 공백은 허용되지 않습니다.) 각 단어는 한 열에만 배치되며 한 열에는 한 단어만 포함됩니다. 따라서 입력 문자열이 "LIKE YOU?"이면 출력은 ["HAY‚", "ORO‚", "WEU‚"]

이 문제를 해결하기 위해 다음을 따릅니다. 다음 단계:

  • s:= 공백으로 분할된 문자열 목록 만들기, 하나의 빈 배열 x 만들기, 행 = 0 설정
  • s의 각 단어 I에 대해 행 설정: = 행의 최대값과 i의 길이
  • col:= 길이의 s
  • 하나의 배열을 만들고 빈 문자열로 채우고 그 크기는 행
  • 범위 0에서 col ‚Äì 1
    • j:= 0
    • j < length of s[i]
      • 동안 I 반면 나는 ans[j]의 길이 >= 1, ans[j]:= ans[j] 연결 " `"
      • ans[j]:= ans[j] 연결 s[i , j]
      • j를 1 증가
  • return ans
  • class Solution(object): def printVertically(self, s ): s = s.split(" ") x = [] row = 0 for i in s: row = max(row, len(i)) col = len(s) ans = ["" for i in range( row)] j = 0 for 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 an ob = Solution() print(ob.printVertically("당신은 어떻게 지내고 있습니까?")) print(ob.printVertically("있거나 말거나")) 

    입력:

    "당신은 어떻습니까?" "있거나 말거나" 

    출력:

    ["HAY","ORO","WEU"] ["TBONTB", "오에루","T"]