게시판

검색 결과: 40

 

i는 정수이지만, format()을 호출한 결과는 문자열입니다.

y=format(i,',')

여기서 y는 이미 문자열입니다.

궁금할 땐 type(y) 같은 문장을 넣어서 테스트해보세요.

스크립트 모드일 때는 print(type(y))로 작성하세요.

, 육 지수님이 작성
 

a=input()

b=a.split(';')

c=[]

for i in b:

    i=int(i)

    c.append(i)

c.sort(reverse=True)

for i in c:

    y=format(i,',')

    print('%9s' % y)


코드는 교재에서 배운대로 위에 처럼 짜서 테스는 통과가 되었습니다.

다만 궁금한점은.. 마지막 for문에서 i는 모두 int 객체인데 print할때 '%9s' 로 쓰잖아요..?

%s 는 스트링을 의미하는게 아닌건가요?

저는 '%9d' % format(10000,',') 이 정상적으로 작동되지 않는게 이해가 잘 안가서요..

int는 %d 가 적용되는게 아닌가요??

제가 뭔가 잘못 이해하고 있는걸까요?

아니면 문법이기 때문에 그냥 외워야하는걸까요..??


 

포럼 상단 오른쪽에 24.5로 검색하면 이전 질문과 답변을 참조할 수 있습니다.

이미 많은 답변이 있고, 질문도 비슷하기 때문에 참조하시면 됩니다.

https://dojang.io/mod/forum/search.php?id=7&search=24.5


, 구 성휴님이 작성
 
첨부한 것처럼 코딩을 해봤는데 어디가 잘못되었는지 모르겠습니다..ㅜㅜ 저렇게 하면 값이 5가 나오네요ㅜㅜ

어디가 잘못된 부분인지 알 수 있겠습니까?


 

for 반복문 안에 y = []이 있으면 계속 y를 초기화하게 됩니다.

이게 의도한 것은 아닐 것 같습니다.


, K TK님이 작성
 
리스트.append로 접근해보려고 일단 'the'의 갯수만 세주는 식을 짜보려했는데, 

왜 그냥 x.count('the')로 하면 멀쩡히 'the'의 갯수가 뜨는데

y.append로 해서 y식에 넣으려면 안넣어지는 걸까요ㅠㅠ?



 
심사문제는 strip이나 replace, 어느 것을 사용해도 풀 수 있습니다.
그러나 문제의 의도는 strip을 사용하는 것일 뿐입니다.

단어를 처리하는 문제이기 때문에 공백을 기준으로 각각의 단어로 분해하는 것입니다.
단어의 앞뒤에 붙은 구두점은 strip으로 제거하는 것입니다.
replace는 단어로 분해하지 않고 문장 전체에서 문자열을 치환하는 것입니다. 이것으로도 구두점을 제거할 수는 있습니다.

심사문제의 해설을 보면 split을 사용하고, strip을 사용하라고 되어 있는 이유입니다.

문제를 해결하는 방법은 여러 가지가 있습니다.
UNIT 24까지 학습한 내용을 토대로는
strip, replace, translate를 사용한 방법이 가능합니다.

UNIT 43에서는 정규 표현식을 이용한 sub로 구두점을 제거할 수 있습니다.


오해는 누구나 할 수 있고, 시행착오는 배움의 과정입니다.
strip은 중간을 제거하지 않으니 먼저 단어로 분해해서 처리하는 것입니다.
replace라면 전체 문자열을 처리한 다음에 다시 단어로 분해해서 처리해야 겠지요.

That is why, at the, age of six,
테스트 케이스의 일부입니다.

>>> paragraphs = 'That is why, at the, age of six,'
         
>>> words = paragraphs.split()
         
>>> words
         
['That', 'is', 'why,', 'at', 'the,', 'age', 'of', 'six,']

>>> for word in words:
          if word.strip(',.') == 'the':
              count += 1
        
>>> count
         
1
>>>

이해가 어려우면 반복문을 변형해서 출력해보면서 단계를 이해하면 됩니다.
>>> for word in words:
          print(word)

         
That
is
why,
at
the,
age
of
six,
>>>

온라인 파이썬 시각화를 이용해서 시각화로 단계별로 실행하면 이해하기 쉽습니다.


, 이 태현님이 작성
 

답답했습니다.

제가 착각했더군요. strip()메서드는 중간 중간의 것들을 제거해주지 않습니다. 다만 입력된 문자열의 양 끝에서만 제거해 줍니다. 

'asdf, asdf, adsf.'.strip(',.') 해봐야 중간의 ','들은 없어지지 않아요.

한번에 모두 제거하고 싶으시면,

strip()이 아닌 replace()를 사용하셔야 합니다.


당연한 문제를 혼자 고민한거 맞죠?

, 이 호준님이 작성
 
문의한 코드는 삭제합니다.


이렇게 코딩을 했습니다. 결과는 문제 없이 나오는데 마지막에 호기심으로 print(words)를 했더니 strip이 전혀 적용되지 않은 체로 출력이 되었습니다. i=i.strip() 이걸로 변수에 새로 저장했다고 생각했는데 리스트를 수정한 것이 아니기 때문에 바뀌지 않은 건가요? 이유를 알고 싶습니다...

(도장_ 관리자님이 수정함 - 원문 제출일: 수요일, 17 11월 2021, 4:33 오후)

 

for i in words:

    i=i.strip(",'-.")


words의 값은 바꾼 적이 없습니다.

words의 값을 꺼내서 i에 복사했고,

i.strip으로 수정한 값도 i에 저장했습니다.

i를 출력하면 바뀐 값이 출력되고

words는 원본입니다.


순차적으로 하나씩 학습하는 게 좋습니다. 내가 아는 거라고 건너뛰지 않고 순차적으로 학습해서 기초가 되는 개념을 확실하게 하는 게 좋습니다.

구멍 뚫린 치즈처럼 지식을 쌓는 건 장기적으로 결코 좋지 않습니다. 누구나 달리기는 할 수 있지만, 올바른 달리기 자세를 배우지 않으면 결코 오래할 수 없습니다. 대다수는 달리기를 오래하지 않기 때문에 문제가 되지 않습니다.

달리기를 할 때 내 발목은 내전, 중립, 외전 중에 어떤 유형인가, 발바닥이 땅에 닿는 순서, 무릎 관절과 근력의 문제, 상체 자세, 시선의 각도 등 제대로 배워야 하는 기초가 많습니다.