주어진 문자열 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‚"]
이 문제를 해결하기 위해 다음을 따릅니다. 다음 단계:
- j:= 0
- j < length of s[i]
- 동안 I 반면 나는 ans[j]의 길이 >= 1, ans[j]:= ans[j] 연결 " `"
- ans[j]:= ans[j] 연결 s[i , j]
- j를 1 증가
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"]