본문 바로가기
파이썬 독학일지

파이썬 독학일지-코딩연습C2-2사각형의 둘레와 면적 계산(주피터 노트북/인트로덕션 투 파이썬)

by 통합메일 2021. 7. 18.
반응형

C2-2 사각형의 둘레와 면적을 계산하라!

어휴.. 이거 몇 줄 쓰는 데 힘들었다. 변수 띄워쓰기 해서 에러남.

이 문제를 통해서 마침 운 좋게.. 변수에 띄어쓰기를 쓸 수 있는지 없는지 테스트해 볼 수 있었다. 그러고보니까.. 앞에서 변수 파트에서 배우기를

 

* 변수명에 특수문자가 들어가거나 숫자로 시작하면 안 된다.

 

그런데 내가 미처 보지 못하고 놓친 부분이 있었으니

 

변수명이 길어지면 다음과 같이 영어 단어 두개를 밑줄(_)이나 대소문자 조합으로 만들어 사용한다.

 

아하.. 

 

근데 언더바도 특수문자 아냐 -_-?

이건 특수문자로 안 치는 모양이다.

그래서 sq height를 sq_height로 바꿨다.

또 틀림 ㅋ 

와 근데 주피터 노트북이 진짜 대단한 게 이렇게 어디가 틀렸는지를 살짝 알려주는구나? 지난 캡쳐들을 살펴보니까 늘 그랬는데 나는 지금에서야 발견했다. 와우 와우.. 저렇게 표시를 해주니까 뭐가 왜 틀렸는지 한 번에 파악할 수 있어서 참 좋다.

 

음 3행까지는 갔다. 근데 왜 틀렸는지 잘 모르겠다.

unsupported operand type(s) for %: 'NoneType' and 'str'

뭔 소리지

일단 문제를 고쳤다. print 함수의 괄호를 맨 끝으로 보냈다.

(와 아주 제대로 배우는 구나. 그래 이게 지지고 볶고지. 이 책 아주 좋은데? 지지고 볶을 수밖에 없게 만들어주고 있어.)

 

혹시라도 %d랑 cm을 띄워서 그런 걸까 싶어서 붙여줬지만 문제는 해결되지 않았다.

그래서 순순히 아래 나오는 에러에 대한 설명을 참고하기로 했다.

TypeError: %d format: a number is required, not str

 

아 기억났다. input으로 입력받은 데이터는 문자열이다. 그렇기 떄문에 이걸 %d로 받기 위해서는 이를 int를 이용해서 정수화 시켜주는 작업이 필요한 것이다.

 

맞다 int를 이용해서 정수화시켜줌으로써 해결됐다. 하지만 또다른 에러를 만났다.

TypeError: can only concatenate str (not "int") to str

concatenate 컨카트냇?? 

연산을 시킨게 문제가 되는 것 같은데.. 그냥 변수를 추가해서 난관을 타개하기로 했다.

sq_lenth와 sq_size라는 변수를 새로 생성해서 문제를 해결했다.

새로운 변수를 만들어서 그 안에 계산 결과를 담고, print 함수에는 그 변수를 집어넣는다.

이 작업을 통해서 input 함수, 문자열 포매팅, int함수에 대해서 공부할 수 있었다.

하지만 신기하게도 많이 까먹겠지 ㅎㅎ 그럼에도 불구하고 지치지 않는 게 진정한 저력이다.

아 근데 정답을 보고 약간 충격을 받았다.

 

sq_width가 20이랑 20번 반복하고 있다 ㅋㅋ

근데 다시 잘 보니까 엄청 충격은 아니고.. 정답에서도 sq_lenth 변수를 선언하고 있다. 그러니까 변수 선언을 할 수밖에 없다는 건 내가 잘 본 것이다. 근데 애당초 sq_height와 sq_width 변수를 선언할 때부터 int를 써서 입력받은 숫자를 곧바로 정수화시켜서 사용하고 있는 건 아뿔사라는 생각이었다. 하여간 그렇게 정수화시킨 다음에 sq_lenth 변수를 만들고.. 쭉죽쭉쭉 프린트 해나가는 것인데.. 마지막에서 막혔다.

 

print("면적: %dcm2" % sq_height*sq_width)

이렇게 썼더니

sq_height가 10이고

sq_width가 20이니까

%d에 10을 넣고 이걸 20번 반복해버리는 것이다.ㅋㅋㅋ

 

그래서 이걸 어떻게 해결해야 할지.. 고민이다. 변수를 또 하나 선언해야 할까? 하고 정답을 보니까 한다 ㅋㅋ 에이 뭐야 결국 변수 선언이 답인가.

하지만 변수 선언 안 하고도 괄호로 묶어서 해결했다.
나는 왜 면적을 자꾸 면접이라고 타이핑하는 것일까.

정답에서는 이렇게 sq_area_size 변수를 선언해서 뒤에 가서 prin("면적")으로 해서 해결하고 있었다.

하여간 이걸로 배운 것은 문자열 포매팅에서 정수의 계산결과를 대입하기 위해서는 그 계산 과정을 괄호로 묶어줘야 한다는 것이다. 그리고 그렇게 해도 작동을 한다는 것이다.

아니 그러면 lenth도 그렇게 되는 거 아냐?

된다. 괄호로만 잘 묶어주면 %d로 대입이 된다.


 

반응형

댓글