PGR21.com
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다.
통합 규정을 준수해 주십시오. (2015.12.25.)
Date 2019/11/13 18:23:41
Name 훈타
File #1 캡처2.PNG (3.9 KB), Download : 15
File #2 캡처3.PNG (6.9 KB), Download : 1
Subject [질문] 파이썬초보 배우는 중인데 막혔습니다.도와주세요.




지금 반복문 푸는 중인데 막혔습니다...
문제는 크게 2가지 입니다.
첫번째는 입력값이 없는 상태에서 엔터키를 누를 경우 break를 시키라고하는데 명령문을 어떻게 짜야하는건지 모르겠습니다.
첫 사진에 보이다싶이 부호판별하는 간단한 반복문인데 입력값이 없는 걸 어떻게 표시하나요?
두 번째는 공약수 판별식입니다.
각 숫자의 약수는 판별해냈는데 공약수 추출하는 식에서 막혔습니다.
반복문 중첩시켰는데 도출이 안 되네요...
list형식이 아닌 int형식으로 출해야하는데 이것까지도 이해가 안 됩니다.제가 하는 접근이 많는 건가요?
번외로 코딩 실력을 키우려면 어떻게 해야하나요
이제 걸음마단계인데 벌써부터 과제 하나에 몇십분씩 고민하니까 돌을 것 같습니다.

통합규정 1.3 이용안내 인용

"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.
법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
F.Nietzsche
19/11/13 19:05
수정 아이콘
죄송한데.... 개발 배우는데 몇시간도 아닌 몇십분 고민하고 이런거 올리면 개발자들에게 좋은 소리 못듣습니다.
19/11/13 19:08
수정 아이콘
네,더 고민해보겠습니다....
19/11/13 19:37
수정 아이콘
번외에 대한 대답만 알려드릴게요

남의것을 많이 본 다음에 왜 그런 코드가 나오는지 이해하시고

그 다음에 많이 짜보세요
지구사랑
19/11/13 19:41
수정 아이콘
첫 번째 문제는 try: except: 를 써서 해결하는 것이 깔끔합니다.
원하는 입력이 들어오지 않으면 에러가 나는데, 그것을 캐치하는 것입니다.
완전 초보면 조금 어렵게 느끼실 수도 있는데, try: 예제들을 찾아보시고 생각해 보세요.
19/11/13 20:10
수정 아이콘
스타맵 말하는건줄 알고 들어왔다가 갑니다..;;
육식매니아
19/11/13 20:31
수정 아이콘
흠... 파이썬 같은거 전혀 모르는 사람이긴 합니다만...
재미있는점은 엑셀같은 질문이 들어오면 대부분 친절히 대답해주는데
오히려 더 전문적이고 힘든내용인 파이썬이나 자바등의 질문이 들어오면 다들(전반적으로) 왜이렇게 살벌한 분위기로 이야기하시는지 이해가 잘안되네요...
같은 동업자가 될 사람도 아닌것 같고, 요즘 취미로 파이썬 하시는분들도 많은걸로 알고있습니다만.
저는 제 주특기와 관련된 질문이 들어오면 초심자 기준으로 매우 쉽게 설명하는게 당연하다고 생각해서 댓글한번 남깁니다.
지구사랑
19/11/13 21:03
수정 아이콘
액셀 질문은 대체로 간단한 팁이면 해결되는데, 파이썬 같은 것은 한 마디 말로는 해결이 안 되거든요.
관련 사이트 들어가서 찾아보는 게 낫죠.
레필리아
19/11/13 21:12
수정 아이콘
뭐.. 엑셀보다 어렵고 복잡하기 때문입니다.
문제에 부딪힌 사람은 뭐가 문젠지 몰라 보통 질문이 난해하고, 코드가 복잡합니다.

그리고 이런 유형의 질문은 과제 혹은 연습문제 풀이 정도인데..
직접 고민하고 해결해야 능력이 올라갈 뿐더러 숙제를 대신해주는 느낌이라 좋은 말이 잘 안나가는 경우가 많죠. 크크
Supervenience
19/11/13 23:10
수정 아이콘
그 이유는 아마도... 몰라서 못푸는게 아니라 생각을 덜해서 안 되는거라서요...
육식매니아
19/11/13 23:42
수정 아이콘
모두 답변들 감사합니다. 무슨 말인지 어느정도 이해가 되네요
19/11/14 00:20
수정 아이콘
어제까지 합쳐서 3~4시간 넘게 들여다봤는데도 안 풀려서 글 올렸는데 밥 먹고 오니까 식이 더럽게 나오긴했지만
의외로 또 금방 풀리더라고요.식이 더러워서 기분은 안 좋은데 위에 댓글 쓰신 분들이 어떤 마음으로 글을 썼는지 이해가 됩니다.
레필리아
19/11/13 21:10
수정 아이콘
(수정됨) 1.
질문이 숫자입력없이 enter를 쳤을 때, 에러가 발생하는데 이에 대한 처리 방법을 묻는 것 같네요.
num = int(input("Enter the number: ")) 는 총 3개의 operation이 일어 납니다. (input(), int(), num variable에 값 넣기(assign))
하나씩 코드를 풀어서 디버깅 모드로 값을 찍어보세요. 그러면 어떻게 해야 하는지 답이 보이실 겁니다.

2.
코드와 질문이 모두 이상한데, 공약수는 여러 개가 있는 것이 맞고..
최대 공약수는 공약수들 중 가장 큰 값을 의미하는 것입니다.

번외)
우선 사용하시는 개발환경(IDE)에서 디버깅 모드를 요긴하게 잘 써보세요.

그리고 초보 분들을 맞이하는 대부분의 에러메시지는 모든 것을 해결해 주는 키가 될겁니다.
똑똑한 개발자들이 오류가 날만한 상황에 대해 다 메시지로 출력하게 해놨거든요.

마지막으로 실력을 늘리려면 과제말고 본인이 흥미있는 주제로 어떤 것이든 프로그램을 만들어 보세요.
어설프더라도 끝까지 만들어 보시는게 중요합니다.
19/11/13 22:00
수정 아이콘
제가 처음 공부하던 때 생각이 나서 짠하네요... 아마 주변에 공부를 도와주는 분이 없으셔서 이런 질문을 올리셨을거라 생각해서 컴퓨터 키고 쳐봤습니다. 아직 2번은 진행 안했고 앞에것만요.

num_string = input("Enter the number: ")
for i in range(3):
if num_string == '':
break
else:
num = int(num_string)
if num == 0:
print("{} : zero".format(num))
else:
print("{} : positive number".format(num))
num_string = input("Enther the number: ")

사실 제가 파이썬을 잘 다루는 편이 아니기 때문에 예쁜 코드가 나오지 않았다는 점은 양해부탁드립니다. 저처럼 코드 짜면 안돼요.

여기에서 저는 input을 num_string으로 두고 여기에 num_string = input()으로 두고,

if num_string == '':라는 항목을 뒀는데, 이는 아무것도 없이 enter 를 입력했을 때 input으로 ''가 들어가기 때문입니다.

아마 코드를 처음 짜보시는거라면 input으로 숫자를 넣으려면 int(input()) 함수를 쓰면 된다는 이야기를 듣고 이렇게 코드를 짜셨을거라 생각해서 조금 상세하게 설명해드리겠습니다.

파이썬의 input함수는 keyboard에서 enter가 들어오기 전까지 입력을 받은 뒤, 이를 string 형태 혹은 문자열의 형태로 저장을 합니다.

int 함수는 문자열로 저장된 값이 정수로 변환 가능한 값일 경우에 이를 정수로 변환해주는 역할을 하구요.

그래서 이 둘을 분리하는 과정이 있어야만 말씀하신 것을 통해 break문을 집어넣는 것이 가능해집니다.

여기서 질문자분께서 궁금하실만한 것은, 아니 내가 엔터만 입력했을 때 들어가는 값이 무엇인지 어떻게 알아요??!?라는 부분일거라고 생각해요.

사실 그걸 알기 위해서 우리가 가장 먼저 배우는 것은 print('hello world')이긴 합니다. 이렇게 우리가 어느 위치에서 이 값이 어떤 것이 나오는지 확인하기 위해 함수의 임의의 위치에 print(s)를 두어서 그 값을 확인한다는 것이죠.

''문자열 같은 경우는 이걸 출력을 해봐도 아무 값이 나오지 않아 위의 방법을 사용하셨어도 당황하셨을 수 있는데, 이 때 사용하는 것이 위에 레필리아님께서 언급하신 IDE의 디버깅 모드입니다.'만'

파이썬 같은 경우는 스크립트라서 더 쉽게 확인 가능한 방법이 있습니다.

그냥 콘솔에서 쳐보면 돼요.

num_string = input()을 입력하시고 콘솔창에서 enter를 누른 뒤

num_string을 입력해보시면 num_string에 저장된 값이 ''라는 것을 확인하실 수 있을 겁니다.

사실 레필리아님 말씀처럼 흥미있는 주제로 뭔가 하는 것이 최선이란 것은 알지만 그것을 하기 막막한 상태에서 어떻게 해야할지 잘 모르겠는 것도 사실입니다. 저 같은 경우는 아직도 그 흥미있는 주제가 무엇인지 찾질 못해 공부하는데 많은 애로사항을 겪고 있네요.

다만 디버깅을 하는 방법을 배워놓으시지 않으시면 혼자 공부하는데 굉장히 고생을 많이 하실 것이니, 반드시 디버깅 하는 방법에 대해서 따로 찾아서 공부를 해보시기 바랍니다.

애석하게도 저는 학부에서 다른 언어를 디버깅하는 방법을 배운 상태에서 파이썬을 공부했기 때문에 파이썬을 디버깅하는 좋은 공부방법은 추천드리지 못하겠지만, 유튜브에 일반적으로 파이썬, 디버깅 같은 검색어를 사용하시면 찾을 수 있으리라 생각합니다.
19/11/13 22:12
수정 아이콘
두번째 같은 경우는, 일단 공약수를 추출하신 것은 맞는데, range함수를 잘못 이해하셔서 그렇습니다.

해당 부분에서 range 함수를 무슨 용도를 위해서 사용하셨나요? 제 생각에는 아마 L과 M에 들어가있는 값을 돌아보기 위해서 집어넣으신 것인데 맞나요?

그럼 여기서 우선 제가 짚고 넘어갈 점은 range함수는 python에서 한 번만 사용되는 iteration을 생성하며, 그 문법이 (첫번째 수, upper bound, 간격(default = 1))으로 주어진다는 것입니다.

그러면 질문자분께서 작성하신 코드를 글로 해석하면 다음과 같은 표현이 됩니다.

1부터 공약수 L의 집합의 '갯수'만큼 1만큼 증가하는 i에 대해,
1부터 공약수 M의 집합의 '갯수'만큼 1만큼 증가하는 x에 대해,
만약 i와 x가 동일하다면 이를 S집합의 뒤에 붙이겠다.

그런데 작성자분께서 사용하시려던 표현은 아마 L의 1번째, 2번째, ..., i번째 값과 M의 1, 2, ..., x번째 값을 비교한 다음 S에 넣으려고 하신거겠죠?

그러면 여기서 조금만 수정하면 되는데 어떻게 접근하면 될까요?

별개로 파이썬 같은 경우는 위와 같이 range를 이용해서 접근하는 것보다 더 간단한 방법이 있습니다.

for i in L:
for x in M:
을 작성하시면 L안에 있는 i값과 M 안에 있는 x값을 알아서 순회하게 되므로 range를 제거한 상태에서

for i in L: for x in M: if i == x: S.append(i)
를 작성하셔도 원하시는대로 동작하는 코드가 됩니다. 하지만, 위에서 사용하시려던 코드를 수정해서 맞게 고치는 성취감을 느끼시길 저는 적극적으로 권장해드립니다.

코딩 실력을 키우는 방법은, 저도 아직 걸음마 단계를 벗어나지 못한 초보자라고 생각하기 때문에 감히 말씀드리기 두렵습니다만, 결국 코드를 한 줄 한 줄 읽고 그것이 어떻게 동작하는지를 정확하게 시뮬레이션하는 것이 가장 우선이라고 생각합니다.

그리고 그걸 키우는 방법이 디버깅이기 때문에 위에서도 권유해주신 것 같네요.

단순히 과제를 해결하는 것이 목적이시라면 가능하면 좋은 조언자를 구하는 것이 가장 좋은 해결책이라 생각하고

이후에도 컴퓨터 프로그래밍을 계속 해보실 생각이시라면 파이썬에 관련한 책을 하나 공부하시기를 추천드립니다.

건승하세요, 파이팅
19/11/13 22:22
수정 아이콘
https://imgur.com/mKb8QCZ
위에 코드가 indentation이 깨지는걸 확인해서 imgur에 이미지로 다시 올립니다.
목록 삭게로! 맨위로
번호 제목 이름 날짜 조회
175376 [질문] 30대에 공무원 그만둔 분들은 뭐할까요? [18] 무민3188 24/03/17 3188
175375 [삭제예정] 테무 [1] 삭제됨835 24/03/17 835
175374 [질문] 라이젠 3600에서 5700x3d로 가면 체감 되려나요? [15] 월터화이트1081 24/03/17 1081
175373 [질문] 제 컴터 아직 현역인가요...?? 그리고 질문! [22] 이러다가는다죽어1026 24/03/17 1026
175372 [질문] 맨 끝 이를 발치하면 임플란트 안해도 될까요? [8] 개떵이다788 24/03/17 788
175371 [삭제예정] 제 혈액검사 결과인데 많이 안좋을까요? [9] 삭제됨1181 24/03/17 1181
175370 [질문] 혀클리너 추천 부탁드려요. [7] 휴울696 24/03/17 696
175369 [질문] 휴대폰 분실시 대처 방법? [4] Right1357 24/03/17 1357
175368 [질문] 연애 질문 (여자 심리) [44] 승뢰2131 24/03/17 2131
175367 [질문] TV 구매 관련 질문 하나드립니다 [10] GoodLuck915 24/03/16 915
175366 [삭제예정] 바둑은 어떻게 입문하나요? [8] AW1317 24/03/16 1317
175365 [질문] 왜 초보자가 사면 하락할까요..? [21] nexon2345 24/03/16 2345
175364 [질문] 어린이 책 제목 찾습니다. [2] 희원토끼451 24/03/16 451
175363 [질문] 충치가 한쪽에만 있으면 원인이뭘까요? [3] 엄준식724 24/03/16 724
175362 [질문] 유럽 여행 시 심카드 및 카드 질문입니다 [5] Alfine431 24/03/16 431
175361 [질문] 만약 번역기의 성능이 완벽해진다면, 외국어를 배우는 건 낭비일까요? [25] 칭찬합시다.1659 24/03/16 1659
175360 [질문] 키보드 연결 후 스피커 사용 불가 문제? [4] 마이스타일508 24/03/16 508
175359 [질문] 3m 귀마개 같은거 매일 끼고 자는데 귀에 안좋을까요?? [10] CEO1409 24/03/16 1409
175358 [질문] 컴퓨터 절전모드 후 모니터가 안켜집니다. [3] 화룡점정522 24/03/16 522
175357 [질문] 캐주얼 구두 찾습니다. [4] 전화기650 24/03/16 650
175356 [질문] 원드라이브 파일 내용이 지워지지 않습니다. 아르키메데스383 24/03/16 383
175355 [질문] 라디오 듣듯이 틀어놓고 잘수있는 유튜브 채널 추천부탁드립니다. [10] Ahri936 24/03/16 936
175354 [질문] KTX 추월 구간(<-수정) 선로 만들고 특급 노선 [13] 차라리꽉눌러붙을1191 24/03/15 1191
목록 이전 다음
댓글

+ : 최근 1시간내에 달린 댓글
+ : 최근 2시간내에 달린 댓글
맨 위로