:: 게시판
:: 이전 게시판
|
- PGR21 관련된 질문 및 건의는 [건의 게시판]을 이용바랍니다.
- (2013년 3월 이전) 오래된 질문글은 [이전 질문 게시판]에 있습니다. 통합 규정을 준수해 주십시오. (2015.12.25.)
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
19/11/13 19:41
첫 번째 문제는 try: except: 를 써서 해결하는 것이 깔끔합니다.
원하는 입력이 들어오지 않으면 에러가 나는데, 그것을 캐치하는 것입니다. 완전 초보면 조금 어렵게 느끼실 수도 있는데, try: 예제들을 찾아보시고 생각해 보세요.
19/11/13 20:31
흠... 파이썬 같은거 전혀 모르는 사람이긴 합니다만...
재미있는점은 엑셀같은 질문이 들어오면 대부분 친절히 대답해주는데 오히려 더 전문적이고 힘든내용인 파이썬이나 자바등의 질문이 들어오면 다들(전반적으로) 왜이렇게 살벌한 분위기로 이야기하시는지 이해가 잘안되네요... 같은 동업자가 될 사람도 아닌것 같고, 요즘 취미로 파이썬 하시는분들도 많은걸로 알고있습니다만. 저는 제 주특기와 관련된 질문이 들어오면 초심자 기준으로 매우 쉽게 설명하는게 당연하다고 생각해서 댓글한번 남깁니다.
19/11/13 21:03
액셀 질문은 대체로 간단한 팁이면 해결되는데, 파이썬 같은 것은 한 마디 말로는 해결이 안 되거든요.
관련 사이트 들어가서 찾아보는 게 낫죠.
19/11/13 21:12
뭐.. 엑셀보다 어렵고 복잡하기 때문입니다.
문제에 부딪힌 사람은 뭐가 문젠지 몰라 보통 질문이 난해하고, 코드가 복잡합니다. 그리고 이런 유형의 질문은 과제 혹은 연습문제 풀이 정도인데.. 직접 고민하고 해결해야 능력이 올라갈 뿐더러 숙제를 대신해주는 느낌이라 좋은 말이 잘 안나가는 경우가 많죠. 크크
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에 이미지로 다시 올립니다.
|