게시판

검색 결과: 20

 

http://pythontutor.com/visualize.html#mode=edit

소스 코드를 조금 고쳐서 파이썬 시각화 도구에서 한 단계씩 실행해보세요.

포럼 상단에 공지로 고정한 Thonny를 쓰면 로컬에서 직접 돌려보면서 확인할 수 있고, 온라인에서는 파일 읽기는 쓸 수 없으니 코드를 고쳐서 단계별로 실행하면서 내부 동작을 확인하세요. 그러면 이해가 될 겁니다.

어떻게 동작하는지 알면 버그도 발견할 수 있습니다.



, EDDY LEE님이 작성
 

아하 변수를 저장해야 한다는 중요한 걸 잊고 있었네요. 

또한 변수는 앞으로 딱 봐도 뭐가 무엇을 뜻하는 지 알 수 있도록 설정하겠습니다 ㅎㅎ

좋은 답변 감사합니다!

 

with open('words.txt','r')as f:

    words=f.readlines()


count=0

for word in words:

    count+=1

    word=word.strip('\n')

    for i in range(((len(word))//2)):

        if word[i]!=word[-1-i] :

            words.pop(count-1)

            break


for Palindrome in words:

    print(Palindrome.strip('\n'))

선생님 말씀대로 윗 세줄을 지워도 decal은 사라지지않네요..

해설 참조해서 pop으로 리스트에서 삭제하지않고  True인것만 판별 후에 출력하니까

정답대로 회문이 잘 나오던데 이 코드에서는 왜 decal도 같이 나온건지 혹시 아시나요? 생각해봐도 모르겠어요 ㅠ 문제는 풀었는데 너무 궁금함



with open('words.txt','r')as f:

    words=f.readlines()


count=0

for word in words:

    count+=1

    word=word.strip('\n')

    for i in range(((len(word))//2)):

        if word[i]!=word[-1-i] :

            words[count-1]=False

            break


for Palindrome in words:

    if Palindrome !=False:

        print(Palindrome.strip('\n'))

정답은 이렇게 제출 했습니다.

 


a=['apache\n','decal\n','did\n','neep\n','noon\n','refer\n','river\n']

이건 없어야 할 것 같습니다.




, 진 연성님이 작성
 

a=['apache\n','decal\n','did\n','neep\n','noon\n','refer\n','river\n']


with open('words.txt','w')as f:

    f.writelines(a)


with open('words.txt','r')as f:

    b=f.readlines()


count=0

for i in b:

    count+=1

    i=i.strip('\n')

    for j in range(((len(i))//2)):

        if i[j]!=i[-1-j] :

            b.pop(count-1)

            break


for x in b:

    print(x.strip('\n'))


이렇게 입력하면 결과가

decal

did

noon

refer

이렇게 나오는데 왜 decal 도 함께 나오는 걸까요?

, 도장_ 관리자님이 작성
 

문제 설명에 strip을 하는 이유가 설명되어 있습니다.

그리고 파일에서 읽은 단어는 \n이
붙어있으므로 \n을 제외한 뒤 회문인지 판단해야 하며 단어를 출력할
때도 \n이 출력되면 안 됩니다(단어
사이에 줄바꿈이 두 번 일어나면 안 됨).


i.strip만 하면 결과가 저장되지 않습니다.

'hello\n'이 있다면

i.strip('\n')은 \n을 없앤 결과는 IDLE에서 출력하지만, 결과를 저장하지 않으니까

i는 여전히 'hello\n'입니다.


단어 리스트가 준비되었으면 for word in words:와 같이 리스트를 반복하면서 단어가 회문인지 판단합니다. 

해설의 변수명은 예시입니다.

다만, for i in x보다는 for word in words가 읽기 쉽습니다.

당연히 회사에서도 후자와 같이 코딩하라고 하지, 전자와 같이 코딩하면 거절됩니다. 변수 이름은 직관적으로 지어야 합니다. 타이핑이 귀찮다고 축약해서 쓰면 이해하기도 어렵지만, 영타도 늘지 않습니다. 영타가 늘지 않으면 코딩이 느리다는 뜻이죠. 발전하지 않습니다. 의식적으로라도 영어 단어를 자주 타이핑하고, 변수명을 직관적으로 해야 합니다.



, EDDY LEE님이 작성
 

x = file.readlines()로 파일에 있는 것들 한줄로 리스트를 만들잖아요,

그 다음에

for i in x:

    i.strip('\n')

    if i == i[::-1]:

        print(i)

로 하면 왜 잘 안되는 건가요?

저 i.strip('\n')은 꼭 변수를 지정해줘야하나요?

해설에서 변수를 지정해준 이유는 뭐죠?

, 도장_ 관리자님이 작성
 

심사문제 해설을 보면

여기서는 가장 간단한 시퀀스 뒤집기를 설명하겠습니다. 앞에서 단어 word를 구했으므로 word == word[::-1]과 같이 원래 문자열 word와 뒤집은 문자열 word[::-1]을 비교해서 회문인지 판별하면 됩니다. 그리고 회문인 단어를 출력하라고 했으므로 if 조건문으로 word == word[::-1]의 결과가 참이면 print로 word를 출력해주면 됩니다.

>>> word = 'hello'
>>> word[::-1]
'olleh'
>>> word == word[::-1]
False
>>> word = 'hah'
>>> word[::-1]
'hah'
>>> word == word[::-1]
True
>>>

위 테스트 결과를 살펴보세요.

슬라이스 부분을 복습하면 이해에 도움이 될 겁니다.



, 이 purn님이 작성
 

처음에는 화문을 판별하기 위해서 반복문을 사용해서 해결할려고 했는데

for i in range(len(word) // 2):

    if word[i] == word[-1 - i]:

        print(word)

를 실행하면 

did

neep

noon

noon

refer

refer

river 이런식으로 출력됩니다.

다행히 시퀀스 뒤집기를 활용하여 문제를 풀 수는 있었지만 

반복문으로 해결하려면 어떻게 해야되는지 힌트를 주시면 감사하겠습니다.


 
심사문제는 정답이 없습니다.

앞에서 배운 이론과 연습문제를 이용하면 풀 수 있습니다. 심사의 목적은 내용 이해와 학습이므로 충분히 풀 수 있게 배려되어 있습니다. 이는 높은 통과율에서 알 수 있습니다. 중간중간 낮은 통과율이 있는 문제는 의도된 것입니다. 지금까지 학습한 내용을 동원해서 잘 풀지 않으면 통과할 수 없는 문제입니다. UNIT 23의 지뢰찾기는 특히 낮은 통과율을 보입니다. 이는 의도된 설계입니다. 학교라면 중간고사라고 생각하면 될 정도의 난이도입니다.


심사 문제는 모두 테스트되었습니다.

<파이썬 코딩 도장>의 심사문제는 베타 기간 1년 6개월, 2400여명이 참여해서 테스트했습니다. 심사 데이터에 문제가 있다면 해당 문제는 통과율 0%가 되고, 이는 관리자가 쉽게 파악할 수 있습니다.

심사 통과자의 통과율은 다음과 같습니다.

퀴즈 이름
문제
성공률
3.8 심사문제: 문자열 출력하기3.8 심사문제: 문자열 출력하기95.36%
5.6 심사문제: 스킬 공격력 출력하기스킬 공격력 출력하기85.36%
6.7 심사문제: 변수 만들기다음 소스 코드를 완성하여 50, 100, None이 각 줄에 출력되게 만드세요.91.62%
6.8 심사문제: 평균 점수 구하기표준 입력으로 국어, 영어, 수학, 과학 점수가 입력됩니다. 평균 점수를 출력하는 프로그램을 만드세요(input에서 안내 문자열은 출력하지 않아야 합니다). 단, 평균 점수를 출력할 때는 소수점 이하 자리는 버립니다(정수로 출력).86.55%
7.5 심사문제: 날짜와 시간 출력하기날짜와 시간 출력하기89.95%
8.5 심사문제: 합격 여부 출력하기합격 여부 출력하기87.84%
9.4 심사문제: 여러 줄로 된 문자열 사용하기여러 줄로 된 문자열 사용하기84.9%
10.5 심사문제: range로 튜플 만들기range로 튜플 만들기89.59%
11.8 심사문제: 리스트의 마지막 부분 삭제하기리스트의 마지막 부분 삭제하기87.47%
11.9 심사문제: 문자열에서 인덱스가 홀수인 문자와 짝수인 문자 연결하기문자열에서 인덱스가 홀수인 문자와 짝수인 문자 연결하기93.62%
12.5 심사문제: 딕셔너리에 게임 캐릭터 능력치 저장하기딕셔너리에 게임 캐릭터 능력치 저장하기89.35%
13.7 심사문제: 온라인 할인 쿠폰 시스템 만들기온라인 할인 쿠폰 시스템 만들기88.99%
14.7 심사문제: 합격 여부 판단하기합격 여부 판단하기83.39%
15.4 심사문제: 교통카드 시스템 만들기교통카드 시스템 만들기88%
16.6 심사문제: 구구단 출력하기구구단 출력하기89.96%
17.6 심사문제: 교통카드 잔액 출력하기교통카드 잔액 출력하기94.55%
18.6 심사문제: 두 수 사이의 숫자 중 3으로 끝나지 않는 숫자 출력하기두 수 사이의 숫자 중 3으로 끝나지 않는 숫자 출력하기76.89%
19.6 심사문제: 산 모양으로 별 출력하기산 모양으로 별 출력하기88.48%
20.8 심사문제: 5와 7의 배수, 공배수 처리하기5와 7의 배수, 공배수 처리하기94.27%
21.6 심사문제: 별 그리기별 그리기92.18%

퀴즈 이름
문제
성공률
22.10 심사문제: 2의 거듭제곱 리스트 생성하기2의 거듭제곱 리스트 생성하기92.04%
23.7 심사문제: 지뢰찾기지뢰찾기78.63%
24.5 심사문제: 특정 단어 개수 세기특정 단어 개수 세기85.4%
24.6 심사문제: 높은 가격순으로 출력하기높은 가격순으로 출력하기95.97%
25.7 심사문제: 딕셔너리에서 특정 값 삭제하기딕셔너리에서 특정 값 삭제하기90.24%
26.9 심사문제: 공약수 구하기공약수 구하기91.82%
27.6 심사문제: 특정 문자가 들어있는 단어 찾기특정 문자가 들어있는 단어 찾기86.11%
28.4 심사문제: 파일에서 회문인 단어 출력하기파일에서 회문인 단어 출력하기97.7%
29.4 심사문제: 사칙 연산 함수 만들기사칙 연산 함수 만들기91.87%
30.7 심사문제: 가장 낮은 점수, 높은 점수와 평균 점수를 구하는 함수 만들기가장 낮은 점수, 높은 점수와 평균 점수를 구하는 함수 만들기91.18%
31.5 심사문제: 재귀호출로 피보나치 수 구하기재귀호출로 피보나치 수 구하기93.55%
32.5 심사문제: 파일 이름을 한꺼번에 바꾸기파일 이름을 한꺼번에 바꾸기88%
33.6 심사문제: 카운트다운 함수 만들기카운트다운 함수 만들기88.1%
34.6 심사문제: 게임 캐릭터 클래스 만들기게임 캐릭터 클래스 만들기75.93%
35.6 심사문제: 시간 클래스 만들기시간 클래스 만들기88.31%
36.9 심사문제: 다중 상속 사용하기다중 상속 사용하기93.15%
37.3 심사문제: 두 점 사이의 거리 구하기두 점 사이의 거리 구하기90.28%
38.7 심사문제: 회문이 아니면 예외 발생시키기회문이 아니면 예외 발생시키기87.72%
39.7 심사문제: 시간 이터레이터 만들기시간 이터레이터 만들기72.55%
40.6 심사문제: 소수 제너레이터 만들기소수 제너레이터 만들기92.86%