일단 5번 문제의 리스트인 output 속의 []들은 output이라는 리스트 속의 공백 리스트들이고 그것들은 0번째, 1번째, 2번째 공백 리스트로 분류됨. 그래서 답지 내용대로 output[(number + 2) % 3].append(number)가 무슨 말이냐 하면 먼저 리스트 numbers에 있는 숫자 1이 들어갔을때 (1+2)%3 의 수식이 되어서 나머지가 0이 되고 .append(number)에 의해서 숫자 1이 처음으로 0번째 리스트에 들어감. 즉, number 자리에 숫자가 들어갔을때 나머지가 0이 되면 0번째 리스트에 같은 숫자 1이 들어간다는 말임. (이게 뭔 소리인지 이해가 안가면 for문 이해가 잘 안됬다는거임.) 또 2가 들어갔을때는 같은 이유로 나머지가 1임, 즉 1번째 리스트에 처음으로 2가 들어간다는 거임. 이런 과정이 반복되서 0번째,1번째,2번째 리스트에 들어갈 숫자들이 정해진다는 거임
i = 0 for number in numbers: output[i % 3].append(number) i += 1 print(output) ------------------------------------------------ [['일', '사', '칠'], ['이', '오', '팔'], ['삼', '육', '구']]
피라미드 문제는 요롷게 하면 한번 반복으로도 될 수 있을거 같아요 num = input("> 피라미드 층수를 입력하세요: ") num_list = [1] * int(num) a = 0 for num1 in num_list: a = int(num1)+a print(" "*(int(num)-a),"*"*int(a*2-1)) 다음장에 range를 쓰면 요롷게도 쓸수 있을것 같아요 num = input("> 피라미드 층수를 입력하세요: ") for a in range(int(num)): print(" "*(int(num)-int(a)-1),"*"*((int(a)+1)*2-1)) 선생님 수업들으면서 하니까 너무 재밌네요 주말이 쭉쭉가네요
159쪽 확인문제 5번의 정답은,for number in numbers: output[(number - 1) % 3 ].append(number) 이며, 143쪽의 설명처럼 리스트 안에 리스트가 사용된 예제입니다.output[(number - 1) % 3 ]는 큰리스트 안의 작은리스트 번호를 순서대로 선택하는 단계이고, append(number)는 현재는 완전 빈 공백으로 있던 작은리스트에 number를 차례로 끼워넣는 문제라고 해석해도 괜찮은지요.뿌리를 확실하게 이해하지 못하면 머릿솟에 남아있지 않아서 완전하게 이해하기 위해서 문의드립니다. 고맙습니다.
와.. 감사합니다 output[ ].append(num) 함수에서 대괄호 안에 0, 1, 2가 뺑뺑이로 돌아야한다는 의미도 이해했고 (모든 수를 3으로 나눴을 때 가능한 나머지는 0, 1, 2이고, output 리스트 안의 리스트가 0번째, 1번째, 2번쨰 총 3개니까 %연산자를 사용한다는 의미로 이해했습니다) for 문에서 가져온 요소를 순서대로 output 큰 리스트 안의 0번째, 1번째, 2번째 작은 리스트에 넣는 그 과정이 어렴풋이 이해가 됐습니다 ㅋㅋㅋ 정말 말로 설명하기 어렵네요 비슷한 의미로 생각해서 output[(num + 2) % 3].append(num)으로 해봤는데 결과값은 같네요. 그런데 아직 -1이 왜 가능한건지는 잘 모르겠습니다. 위에 제가 말씀드린 대로 output[(num + 2) % 3].append(num)을 사용할 경우 for 문 첫 번째 과정에서 numbers 리스트에서 첫 번째 값인 1을 가져와서 output 리스트의 (1 + 2) % 3 , 즉 0번째 리스트에 num 1을 추가하는걸로 이해했는데 output[(num - 1) % 3].append(num)일 경우 (1 - 1) % 3 이 되니까 아 0을 3으로 나눈 나머지는 0이니까 되네요 쓰면서 이해했네 세상에 감사합니다..
여러개의 책과 강의를 보며 4번째 책이과 저자강의를 듣는 중인데 귀에 너무 쏙쏙 들어오는게 강의가 너무 좋습니다 ㅠㅠㅠ 예제는 못풀었는데 *피라미드는 15분만에 풀었네요 :D 휴....다행 ㅎㅎㅎ 빅데이터 분석, 딥러닝&머신러닝 쪽으로 공부를 쭉이어가고 싶은데 저자님의 책 중 다음으로 어떤 책으로 넘어가야할지 알려주실 수 있을까요?:D
지금까지는 큰 어려움 없이 해오다가 이번 강의 5번에서 탁 막혀서 흐를 뻔한 눈물을 참고 머리 싸매고 있는 중입니다.... 다른 분들 질문이랑 답변도 보고 혼자 이해해보려고 노력하고 있는데 제대로 이해하고 있는 과정인지 모르겠고.... 머리가 터질 것 같아 몇 가지 질문 드립니다.........!! 1. 9개의 숫자들을 3으로 나눴을 때 나머지에 따라 1,4,7 / 2,5,8 / 3,6,9로 나뉘기 때문에 분류를 하기 위해 대괄호 안에서 %를 해주는 것인가요? 2. output[number % 3].append(number)일 때 output[1].append(1)에서 output[1]이 의미하는 바가 위에서 선언한 output = [[], [], []] 여기 안의 세 개의 리스트 중에 1번째, 즉 가운데 있는 리스트를 의미하고 append(1)로 인해 그 가운데 리스트에 1을 집어넣으라고 이해하면 되는 걸까요? 3. output[숫자]가 큰 리스트 안에서 '숫자'번째에 있는 작은 리스트를 의미하기 때문에 output = [[], [], []] 여기서는 총 3개의 리스트가 있으므로 각각 0번째, 1번째, 2번째라서 대괄호 안 '숫자'에 0,1,2만 들어갈 수 있는 것이 맞나요? 대괄호 안에 3 이상 숫자가 들어가면 index error가 나는 것도 맞는지 궁금합니다...ㅠㅠ 4. -1을 하는 목적은 첫번째로 number에 들어가는 1을 -1 함으로써 나머지를 0으로 만들어 output의 0번째 리스트에 1이 들어가게 해서 1,2,3 순서로 각각 0번째, 1번째, 2번째 리스트에 넣기 위함이 맞나요? 1,2,3 순서 말고 2,3,1 로 하고 싶으면 -1 대신 +1 하면 되는 것도 맞나요? 질문이 너무 많아서 죄송합니다ㅋ큐ㅠㅠㅠ 제가 조금이라도 잘못 생각하고 있는 부분이 있다면 알려주세요,,,,,,ToT
1-2. 넵 맞습니다. 3. 직접 해보셔서 눈으로 보는게 제일 좋을 것 같은데, 말씀하신대로 인덱스 에러가 발생합니다. 4. 넵 맞습니다. 프로그래밍은 원어민 선생님[컴퓨터]가 항상 앞에 앉아 있다보니, 의문이 생기신다면 실제로 여러 가지 테스트해보시면 더 기억에도 잘 남으실 것입니다!
자릿수 구하는 코드에서 numbers=[273,103,5,32,65,9,72,800,99] for number in numbers: if len(str(number))==3: print("{}는3자리 수입니다".format(number)) elif len(str(number))==2: print("{}는2자리 수입니다".format(number)) else : print("{}는1자리 수입니다".format(number)) 더 복잡하긴 하지만 이렇게 해도 문제없죠?
현재 코드에는 오류가 없습니다! 파일 저장을 안 하시는 등의 실수로 이전 코드가 실행되었을 가능성이 있으므로 파일을 저장해주세요![만약 인터랙티브셸 또는 IDLE를 사용했을 경우, 이는 들여쓰기가 있는 코드를 실행하는게 약간 힘듦으로 강의처럼 파일로 만들어서 진행해주세요].
책 열기 10일차. 책은 술술 넘어가는데 5번 문제 이게 뭔가 한참 고민하다가 댓글 봐도 대충 알 것 같은데 이게 뭔 소리 인가 싶다가 p.143 세번째 리스트안에 리스트보고 이해되었네요. output = [ [ 좌표0 ] , [ 좌표1 ] , [ 좌표2 ] ] 나머지가 0인 좌표에 그 회차 숫자를 넣어라. 풀어놓고도..... 이게 영상 뒤에 추가로 3번 특이 풀이 부분 보니 단박에 이해가 가네요. 감사합니다.~~
그냥 output[number % 3].append(number)를 할 경우, 저렇게 나옵니다. output[0], output[1], output[2] 번째에 있는 리스트들의 뒤에 요소들이 쭉쭉 추가되는 것입니다. 질문의 의도가 이것인지 잘 모르겠는데, 아니라면 조금 더 질문을 자세하게 설명해주실 수 있을까요...!
잘 보았습니다. 허나 궁금하고 이해가 안되는게 있어 막히네요. 질문 좀 드려보자면, 보여주신 첫번째 예에서 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] output = [[], [], []] output[1].append(1) = 3(0,1,2,3,4... 중 두번째 위치 2 + 1) output[2].append(2) output[0].append(3) output[1].append(4) = 6(0,1,2,3,4... 중 두번째 위치 2 + 4) output[2].append(5) output[0].append(6) output[1].append(7) = 9(0,1,2,3,4... 중 두번째 위치 2 + 7) output[2].append(8) output[0].append(9) print(output) 인 것 같은데 제가 서술한 방식대로라면 나머지 1,4,7과 2,5,8이 안나오는 것 같습니다. 너무 어렵네요. 혹시라도 어떻게 풀이가 되었는지 고견 부탁드려봅니다(뇌가 굳었나봐요), 즉 나열하신 것을 어떻게 결과값으로 해석되어 풀이가 되는지 뭐로던 설명 해 주실 수 있으시다면 부탁드리겠습니다.(feat : 누구나)
현재 표기해주신 것 중에서 = 3, = 6, = 9가 무엇을 의미하는지 알려주실 수 있을까요? 약간 잘못 이해하셔서 멀리 나간 것 같은데 append는 그냥 배열에 어떤 대상을 넣을 뿐입니다. output[ㅇ].appene(ㅁ)부분 바로 뒤에 print(output)을 넣어보시면 어떤 식으로 추가가 되는지 쉽게 이해하실 수 있을 것 같습니다!
피라미드예제를 input("입력>") a=[1,3,5,7,9] for b in a: print(input*b) 이렇게 짜서 입력> 에 *를 넣으면 왜 안 되나요? input함수의 입력 자료형은 항상 문자열이니까 문자열*숫자하면 성립해야하는 거 아닌가요,,? 예를 들어서 안녕*2=안녕안녕 이렇게 나오는 거처럼요..!
훌륭한 강의에 감사드립니다.Visual Studio Code 편집창에서는 수정이 필요한 경우에 마우스로 아무 곳이나 찍어서 수정이 가능합니다. 하지만 인테랙티브셀에서는 마우스로 찍어서 수정이 안 됩니다. 물론 복사해서 붙여넣기는 가능합니다. 하지만 특정 부분에서 특정 단어나 철자 등을 수정은 안 되고 오직 백스페이스키로 삭제 후 수정만 가능합니다. 이것은 시스템의 설계이므로 어쩔수가 없는지요?
넵 단순하게 다양한 문제들을 외워버리면 됩니다. "단순하게 외워서 창작이 될까?"할 수 있는데, 외우는 것이 어느 양을 넘어가는 순간 됩니다. 마치 그림이라던지 음악이라던지 처음에는 다 외워서 따라 그리고 따라 연주하는데, 이게 어느 정도 쌓이면 스스로 그림도 그리고 작곡할 수 있는 것 비슷합니다! PS. 아무 것도 안 보고 아무 것도 안 들으면 구석기 인류의 사람 또는 소 그림 정도 밖에 못 그립니다! 누적된 지식을 보고 듣고 외우고 따라하면서 현대적인 작품들을 만들 수 있는 것입니다. 개발도 수 많은 여러 작품(코드)를 보고 외우면 결국 됩니다!
이코드에서요 numbers= [100, 234, 355, 242, 5464, 2313, 556, 132, 643] for number in numbers: if number %2 == 0: print("{}는 짝수입니다".format(number)) else: print("{}는 홀수입니다".format(number)) 반복은 if구문 밖에 안됬는데, else구문은 왜 반복되는거에요?
안녕하세요! 이번 강의도 잘 봤습니다! 트리문제 혹시 답안이 어떻게 되는 지 알 수 있을까요...? #트리만들기 high=[1,2,3,4,5] star=["*"] for h in high: for s in star: print((5-h)*" ", "*"*(2*h-1), (5-h)*" ") 저는 이렇게 풀었는데 너무 단순하게 푼 것 같아서요ㅋㅋ큐ㅠㅠ 그리고 트리 높이?를 입력받아서 푸는 방식도 해보고 싶었는데 위와 같은 방식으로 풀려니 이건 정말 생각이 막히더라구요ㅠ
프로그래밍은 일단 답만 나오면 전부 답입니다! 다만 "별 피라미드" 문제는 숫자를 기반으로 반복문을 돌리는 것리 메인인 문제라서, 기본 방법으로 풀어보시는 것이 좋습니다! 구글에서 "별 피라미드"로 검색해보시면, 다양한 프로그래밍 언어로 만드는 별 피라미드 문제들이 나옵니다! 그것들을 참고해보시면 좋을 것 같습이다! [종류도 많고 코드도 길어서 유튜브 댓글로 모두 적기는 애매하네요 😂]
넘 나리 어려운 5번문제네요.. 댓글 봐도 다 봐도 이해 안 되었는데.. 하나씩 뜯어보면서 억지로 이해하니 이해가 된듯합니다. numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9] output = [[ ], [ ], [ ]] output[a].append(b) --> 이 의미가 output내 a번째 []칸에 숫자 b를 넣어라는 뜻인것 같고 그래서 3이상이 되면 range 에러로 %3 으로 조정하여 0
3번 문제에서 for number in numbers: if len(str(number)) = 3: print("{}는 3 자리수입니다".format(number)) elif len(str(number)) = 2: print("{}는 2 자리수입니다".format(number)) else: print("{}는 1 자리수입니다".format(number)) 이렇게 했는데 결과가 안나옵니다ㅠ 뭐가 잘못된건가요? 그리고 4번 문제에서 리스트 중첩을 하셨는데, 저는 이렇게 썼거든요.. 이것도 결과값이 동일한데 뭐가 다른 것인가요? for element in list_of_list[0]: print(element) for element in list_of_list[1]: print(element) for element in list_of_list[2]: print(element) 강의 매번 감사해요:)
일단 첫 번째는 조건 비교에 =를 사용했기 때문입니다. 조건 비교는 ==입니다![초기에 자주 하는 실수라 시험 등에 자주 나오는 문제입니다]. 두 번째는 그렇게 하셔도 됩니다. 다만 중첩해서 쓰면, 코드가 간단하며, 요소의 수가 더 많은 리스트를 반복 돌릴 때도 별도의 코드 변경 없이 실행할 수 있습니다.
안녕하세요 피라미드 문제 관련하여 코드를 작성해 보았는데요, range라는 함수를 찾아서 사용하였는데, 일정범위구간을 array로 한번에 정의하는 다른 방법이 있는지 궁금합니다. ++ 더 코드의 효율을 높일 수 있는 방법이 있는지도 궁금합니다! 항상 좋은 강의 감사드립니다. ------------------------------------------------------------------------------------------------------------- length=int(input("피라미드 높이를 입력해주세요")) numbers=[] for num in range(1,length+1): numbers.append(num) for number in numbers: if number%2==0: pass else: a=(length-int(number))//2 print(" "*a+"*"*number+" "*a)
피라미드 정도는 효율을 크게 높여도 높일 수 있는 부분이 거의 없어서 크게 신경쓰지 않으셔도 괜찮습니다 'ㅁ' ...! 방법이 워낙 다양해서 구글에서 찾아서 여러 사람들의 여러 방법들을 관찰하면서 "다른 사람은 이런 방법도 쓰는구나"를 느끼는게 더 좋을 것이라 생각합니다...!
안녕하세요. 책과 강의를 보면서 열심히 공부하는 중입니다. 강의 마지막에 나온 피라미드를 만들어보고 싶어서 나름대로 코드를 짜 보았는데, 이런 방식이 맞는지 모르겠습니다. # 피라미드 높이 입력하기 number = int(input("Select Line Number >>")) # 피라미드 쌓기 for line in range(number): blank = number - line print(" " * blank, "*" * ((line * 2) -1), " " * blank) 이렇게 만드니까 피라미드가 만들어지긴 한데 혹시 더 간단한 방법이나 다른 정답이 있을까요?
감사합니다. 선생님. 어떤 분이 표로 알려주셔서 생각보다 쉽게 매칭하면 된다는걸 알게 되었습니다. number함수의 숫자 9개가 순서대로 2차원 배열함수인 output 배열에 9개의 number함수 인수마다의 나머지값을 구한다음 그 값들이 배열인덱스 위치인 [0][1][2]에서 [1][2][0]마다의 순서대로 number값들을 배열 인덱스 위치마다에 떨구어준 것이군요. 히야~ 알고나니 하룻동안 다른 원리로 파고 있었네요. 아햩햩햩햩햩햩햩, 모든 분들 덕분에 잘 해결할 수 있었습니다. 다시 한번 감사드립니다. 사실 RGPRGP님의 의견에 가장 꽂혔어요. 물론 그 마저도 몇 분 걸렸습니다 ㅠㅠ
작가님 format 함수를 "{}안에 ()값을 하나씩 불러넣어줘"라고 이해하면 되는걸까요? 저는 아래와 같이 command를 만들었는데 이런식으로 할 경우에 작가님과 똑같이 결과값이 나옵니다만, 나중에 더 복잡한 command를 작성할 경우를 위해 format을 사용하는걸로 이해를 하면될까요? for number in numbers: if number % 2 == 1: print(number,"는 홀수입니다.") else: print(number,"는 짝수입니다.") for number in numbers: print(number,"는", len(str(number)),"자리수입니다.")
책을 사고 처음 부터 지금까지 쭉 따라만 하고 있습니다. 프로그램에 프자도 모르는 사람인데 일단 그냥 쭉 따라만 하고 있습니다. 일단 한번 익숙하게끔 전체적으로 따라하고 그다음에 다시 처음부터는 이해하면서 처음부터 해보려 합니다. 좀 비효율적일까요?? 그리고 [ ] 에 ( ) 를 넣었는데도 실행하는데 차이점이 있을까요??
안녕하세요! 전에 강의를 들었던 학생입니다 ㅠ 제가 코드를 공부하면서 막힌부분이 있어 질문드립니다. a = [1,2] b = [2,3] c = [5,6] d = [6,7] e = [9,10] f = [14,15] g = [22,23] h = [ ] t_list = [a,b,c,d,e,f,g] 처럼 있다고 하면 for문으로 range(len(t_list))을 이용해서 만약 b의 두 번째 요소와 c의 첫 번째요소가 같지 않다면 t_list에서 b와c사이에 h를 추가하여라 해서 이와 같은 맥락으로 t_list전체를 적용시키고 t_list = [a, b, h, c, d, h, f, h, g] 라고 만들고 싶은데 안됩니다 ㅜㅜ 도움을 주실 수 있으신가요?
교수님!! ㅎㅎ 피라미드 크기를 숫자로 받으면, 숫자피라미드를 만드는 코드까지 혼자 써봤어요!! 답은 아직 안찾아봐서 다른 사람들은 어떻게 쓰는지 모르겠지만.. 저는 지금은 이렇게 까지 썼어요. a = int(input ("피라미드 크기? ")) b = list(range(1,a+1)) for c in b: print(" "*(a-c), end="") d= list(range(1, c)) d.extend(list(range(c, 0, -1))) for e in d: f=print(e, end="") print() 1-21강까지 배운 내용을 총동원하고 range 라는것과 end 라는걸 네이버에서 추가로 정보를 얻어서 조합해서 만들어봤어요~! ㅋㅋ 근데 아직 문제는 10부터는 다시 한자리수 0으로 돌려서 만들어야 피라미드가 안깨지는데 ㅎㅎ 그건 아직 못했어요 ㅎㅎ 강의 이름은 혼자공부하는 파이썬인데, ㅋㅋ 교수님과 같이 공부하는 파이썬같아요~! :-) 이해가 잘 가게 알려주신 덕분에 ㅎㅎ 열심히 공부하며 따라가고 있습니다~ 오늘은 질문이 아니라, 감사를 표하려고 댓글을 남겨요! :) ㅎㅎ (p.s : 얼른 10이상 피라미드 과제를 수행해내고 ㅋㅋ 22강 듣고싶어요! ) ------------------------------------------------------------------------------------- 피라미드 크기? 9 1 121 12321 1234321 123454321 12345654321 1234567654321 123456787654321 12345678987654321 >> 댓글에서는 피라미드가 간격이 안맞아서 깨져보이지만, 파이썬에선 예쁘게 보여요 *'ㅁ'*
@@윤인성 교수님~! 오늘은 어제 하던 피라미드 예제를, 피라미드 크기 19까지 출력하는 코드를 완성했어요~! 1-9까지와 10-19까지를 추가로 출력하는건 또 다른 문제더라고요.. 그래서 엄청 고민 많이 했는데,, 완성입니다!! ㅎㅎ 그런데, 이제 [20이상~무한대 숫자]을 출력하는건 19까지와 또 다른 문제인것 같아요.. 'ㅁ');; 숫자가 올라갔다가 내려갔다가를 하다보니까, 오르막 코딩을 생각하고, 내리막 코딩을 생각하는게 다르고,, ㅎㅎ 숫자의 범위에 따라서 생각해야하는 것들이 달라져서, 머리가 아프지만.. 강의 마지막에, 한 문제를 놓고 일주일 이상씩 해석해보고 공부해보는게 그냥 맹목적으로 강의를 시청하는 것보다 중요하다고 하셨던 말을 기억하며, 열심히 도전하고 있어요!! ㅎㅎ 혼자하는 파이썬 공부다보니, 교수님께만 자랑할 수 있어서 오늘도 찾아왔어요 ㅎㅎ 그리고 오늘은 쓰다보니 40줄까지 길어진 코드를, 29줄로 줄여보기도 했어요! 굳이 케이스를 나누지 않았어도 되는데, 처음에 나눠놓아서 길게 늘어진 코드를 줄여보는 시간도 갖으며.. 이것도 공부가 되었겠다 싶더라고요! 코딩의 ㅋ 자도 모르는데, 늘 업무 마치고 코딩을 고민해보는 시간이 (고통스러우면서도...) 즐겁습니당 ㅎㅎ :-) 자꾸 늦게 자서 문제지만요 (;ㅁ;) 오늘도 코린이의 일과를 마치고 주저리 주저리 하다가 잡니당.. 얼른 무한대숫자까지 입력을 받아도, 뚝딱 만들어내는 숫자피라미드를 완성하고, 22강을 보고싶네요!! ㅎㅎ 어서 교수님께 자랑할 수 있게 되기를.. 'ㅁ')> 일주일 전까지만 해도 아무것도 모르던 저를, 이제 검은 바탕을 도화지 삼아 열심히 무언가를 써보게 해주셔서 감사합니다! :) ㅎㅎ
2:58 p.213의 확인문제 1번의 첫번째 문제 질문이 있습니다. 직접 vscode에 타이핑해서 돌렸는데요, list_a를 정의한 후 바로 print(list_a.extend(list_a))를 하니까 None이라고 나옵니다. 그러니까 코드를 아래와 같이 작성했더니 결과가 None이라고 나왔습니다. list_a = [0, 1, 2, 3, 4, 5, 6, 7] print(list_a.extend(list_a)) 이렇게 말고 아래와 같이 작성했을 땐 원하는 답이 나오는데요, 같은 코드인 거 같은데 위 코드처럼 작성하면 왜 원하는대로 나오지 않나요? ㅠㅠ list_a = [0, 1, 2, 3, 4, 5, 6, 7] list_a.extend(list_a) print(list_a)
extend() 등의 함수는 “파괴적 함수”로 만들어져서 아래 형태로 사용해야 합니다. 이건 “미국 사람들은 사과를 apple이라고 한다. 이유는 모르겠지만 그렇게 만들어졌다” 같은 느낌이라 외우셔야 합니다! Ps. 이후에 가시면 똑같은 기능인데 비파괴적으로 구현된 경우도 있고 해서 지금 위처럼 입력해서 코드 실행 이상하면, “파괴적인건가? 바꿔보자"하며 아래로 변경해보며 확인해보는 유연함이 좀 필요합니다! 참고로 현재 파이썬 강의는 개정판 강의가 2배 더 길게 자세하게 완강되어 있으므로, 개정판 강의를 참고하며 진행해보시는걸 추천드립니다!
@@윤인성 감사합니다..! 그럼 질문 하나만 더 하겠습니다. 지금 제가 공부하고 있는 방법이 일단 강좌를 먼저 보고 해당 파트 책에 있는 부분 전부 코딩해보고 해석해보고 확인문제 다시 풀어보고 막히면 다시 강좌보고 이런식으로 하고있는데 .. 더 나은 방법이 있는지 알고싶습니다.
[질문] p159 확인문제 5 output[number%3].append(number) 에서 output[number%3]은 output [[],[],[]] 의 대괄호 안의 "나머지" 번째의 괄호를 소환하고 append(number)는 소환된 괄호안에 숫자를 반복해서 채우라는 의미인 거 같습니다. 맞는지요? 여기서 이해가 가지 않는 것은 교재 146쪽에 append 함수는 리스트 맨뒤에 요소 추가하는 것이라는데 어떻게 []안으로 들어가는지요? [[],3,6,9],[],1,4,7,[]2,5,8] 출력되어야 하는 건 아닌가요? 정말 프로그래밍 언어를 처음 접해보는 거라 설명에 주셨어도 그냥 지나쳤을 수도 있습니다만..
넵 앞의 부분은 다 맞습니다. 『리스트.append(number)』는 리스트 뒤에 number를 추가하라는 의미입니다! 1. 처음에 output = [[], [], []]를 선언했습니다. 2. output은 리스트의 리스트이므로 - output[0]도 리스트 - output[1]도 리스트 - output[2]도 리스트 입니다. 3. output[number % 3]을 하면 number % 3이 계산되면서 output[0], output[1], output[3]을 구합니다. 4. 따라서 - output[1].append(1) # output = [[],[1],[]] - output[2].append(2) # output = [[],[1],[2]] - output[0].append(3) # output = [[3],[1],[2]] - output[1].append(4) # output = [[3],[1, 4],[2]] - output[2].append(5) # output = [[3],[1, 4],[2, 5]] 등이 됩니다. 5. 코드에서는 output[(number - 1) % 3]을 합니다. 따라서 - number가 1일 때는 (1 - 1 % 3) => 0 % 3 => 0 - number가 2일 때는 (2 - 1 % 3) => 1 % 3 => 1 하며 위와 같은 식으로 이루어집니다. 완전히 다른 분야에 있다가 하시면 처음에 버벅이는 것은 어쩔 수 없는 부분이라고 생각합니다. 처음 아이에게 덧셈 등을 알려줄 때도 1. 아예 수 체계도 제대로 안 잡혀 있어서 손가락으로 세면서 하는데 2. 손가락으로 세는데도 다른 숫자를 말하고 3. 거기에 덧셈 뺄셈까지 하면 = 어른(부모님)의 입장에서는 자신의 아이가 잘 이해되지 않는 상황이 발생합니다. 어른이 되어서 새로운 영역을 공부할 때는 "어른(나)의 입장에서 스스로가 잘 이해되지 않는 상황"이 동시에 발생할 수 밖에 없다고 생각합니다. 그래서 스스로가 공부하면서 스스로 답답해질 수 밖에 없습니다. 악기를 처음 배울 때 어릴 때 배우면 어떻게든 재미있게 배우지만 어른이 되어서 배우면 "아니 나는 손가락이 뭐 이것도 안 움직이냐"하는 생각에 스스로 답답해져서 빨리 포기하게 됩니다. 그림을 처음 배울 때도 어릴 때 배우면 어떻게든 아무거나 그리지만 어른이 되어서 배우면 "아니 나는 이거 뭐 이렇게 밖에 못 그리냐"하는 생각에 스스로 답답해져서 빨리 포기하게 됩니다. 개발도 어쩔 수 없이 똑같다고 생각합니다. 어른이 되서 배우면 """아니 이거 뭐 다들 빨리빨리 어떻게 하는 것 같은데 나는 이렇게 이해도 안 되냐"""라는 생각이 들 수 밖에 없습니다. PS. 모르는 부분이 발생한다면 물어봐주세요! 어른이 되면 "이것정도는 혼자서 해야할 것 같은데"하는 발상이 생기는데 누군가가 풀어주는 것이 훨씬 빠릅니다! 대학교에서도 처음 프로그래밍을 하러 온 학생은 처음 C 언어 등의 프로그래밍 언어를 배우고 1~2년이 되어도 "나는 누구인가 나는 무엇을 하고 있는가"라는 생각을 계속 합니다. 해결은 시간이 해준다고 생각합니다. 처음에 한 번에 몰아쳐서 한다고 생각하면 뇌도 "아니 갑자기 이게 뭔데 하라는거야?"라며 반발을 일으키지만 계속해서 생각하다보면 뇌도 어느 순간 영역을 받아들이게 됩니다. 그래서 조급하게 생각하시기보다는 느긋느긋하게 보시는 것을 추천드립니다! 해당 책은 대학교 1년 정도의 과정이며 실제로 사실 대학교 2학년도 이전에 프로그래밍을 했던 학생이 아니면 알고리즘 문제[현재 책에 나오는 문제 정도]도 제대로 못 풉니다. PS. 책은 그냥 이후에도 머리에서 고민하면서 떠올려볼 수 있게 넣은 것입니다. 따라서 조급하게 생각하지 마시고 느긋느긋하게 생각하시는 것을 추천합니다! 항상 뭔가 새로 배울 때는 처음에 "아 내가 이거 안되는거 아닌가?"라는 생각을 계속 마주하게 되는데 그걸 계속 반복하면서 어떻게든 하다보면 어느 순간 돌파되는 것처럼[물론 또 이후에 영역을 계속 공부하면서 반복되는 발상이지만] 어느 순간부터 이해되실거라 생각합니다. "우리 아이가 숫자도 제대로 못 세고, 덧셈도 못하고 좀 이상한거 아닌가"하다가도 어느 순간 숫자도 세고, 덧셈도 하고, 구구단도 외우고 수학 문제를 풀어나가는 것처럼요!
output[number > 3]에서 number > 3은 숫자를 만드는 코드가 아니라, 불(True 또는 False)를 만드는 코드입니다. 현재 실행 결과에서 결과가 0번째와 1번째에 들어가는 이유는 True는 숫자로 변환했을 때 1로 변환되고, False는 0으로 변환되기 때문입니다. 즉 number > 3이 True인 녀석들은 전부 True로 나오고 1로 변환되어 1번째로 들어가고, number
감사합니다 질문에 대한 이해가 완료되었습니다 그리고 추가질문 좀 드리겠습니다 일단 number % 3 할 시 값이 0 1 2 3 이 나올 수 있다고 하셨는데 0 1 2 만 나오지 않나요 그리고 이제 list=[ [], [], []] number= [1, 2, 3, 4, 5, 6, 7, 8, 9] list[number%3].append(number) 에서 list속 빈 []에 append를 할 때는 index 개념처럼 예를 들어 number=4을 append 했다고 하면 number % 3의 값이 1이니까 list 속 []중 1번째에 있는 리스트에 append가 되어 list = [ [], [4], []] 이렇게 이해 하였습니다 제가 이해한 이 개념이 맞는 지 알 수 있나요?
안녕하세요 선생님 질문 1. remove 함수는 해당 값을 list에서 제거하는 함수 잖아요? 이 때, a = [1, 3, 3, 5, 7, 7, 9] for b in a: if b > 2: a.remove(b) print(a) 제 생각으로는 list a의 각 요소 중 2보다 큰 수들만 제거되어 a = [1]로 출력될 것 같아서 이렇게 쓰고 돌려봤는데, a = [1, 3, 7, 9]라고 출력이 됐습니다. 왜 이런 결과가 나왔을까요? ----- 질문2. 영상 마무리에 언급하신 피라미드 문제는 현재 강의 내용까지만으로 풀 수 있는 문제인가요? c = [1, 2, 3, 4 ,5] for d in c: print((" " * (5 - d)) + ("*" * ((2 * d) - 1))) 저는 편법으로 이렇게 써봤는데요 ㅋㅋㅋ 그런데 이러면 반복되는 횟수와 *기호 숫자 등을 자동으로 확장시킬 수가 없으니까요. 입력받는 숫자 크기로 리스트를 만들게 하면 피라미드 크기 마음대로 할 수 있을 것 같은데, 어떻게 리스트에 0~입력숫자 순서대로 들어가게 할 수 있을지 아직 모르겠네요 :( for 반복문을 이용하면 list는 요소 숫자만큼의 반복시행을 할 수 있는데, 이 요소 숫자 이상 혹은 설정한 횟수만큼 반복문을 돌릴 수도 있을까요? 또, int로도 for 반복문을 쓸 수 있나요?
바로 다음 장에 range가 나와서 일단 저는 --- f = [] num = int(input("몇 줄?> ")) for elements in range(num): f.append(elements + 1) for ln in f: print((" " * (num - ln)) + ("*" * ((2 * ln) - 1))) --- 이런식으로 입력한 숫자의 층 수 만큼 출력되는 피라미드를 만들어 봤습니다 :) 그런데 아직 질문1.에서 위 코드가 왜 안되는지는 아직 잘 모르겠어요 :( 더 생각해 보겠습니다.
질문 1의 경우 리스트 요소 제거는 역 반복문을 돌려서 해야 합니다. 그냥 돌리게 되면 리스트의 요소가 제거되었을 때, 인덱스를 앞으로 당기게되면서 생략하고 넘어가는 부분이 발생하기 때문에 그런 문제가 생기게 됩니다. 질문 2의 경우는 추가로 구글에서 “파이썬 피라미드”등으로 한 번 검색해서 살펴보시기 바랍니다. 지금 푸신 형태도 답은 나오지만 피라미드가 반복문을 중첩으로 쓰는 기본 예제라서 초급 단계에서 발상하기 굉장히 어렵지만, 이해하고 나면 꽤 도움이 됩니다.
@@윤인성 감사합니다. 혹시 오른쪽부터 지워서 요소 순서가 엉켜서 안되나 싶었는데 지우는건 왼쪽부터 잘 지우더라구요. 역 반복문으로 해보니 되는데, 이건 역으로 돌려서 조건문 대입하고, 요소 제거는 원래 순서로 진행하니 인덱스가 꼬이지 않아서 그런건가요? 그러면 반대로, 조건을 정방향으로 집어넣고, 요소제거를 역방향으로 넣어도 될 것 같았는데, --- for b in a : if b > 5: reversed(a).remove(b) --- AttributeError: 'list_reverseiterator' object has no attribute 'remove' 위와 같은 에러가 나네요. reversed() 이렇게 하면 될 것 같은데 안되는 경우가 많다고 했는데 이런 경우 같아요 ㅜㅜ
확인 1에서요 list_a = [1,2 ,3] 이라 지정하고 list_a.extend(list_a)라고 입력해보면 아무런 결과 값이 없습니다. 혹시나 해서 print(list_a.extend(list_a)) 해놨는데 None이라고 뜨고요.. [1, 2, ,3 ,1, 2 , 3]이 나올 줄 알았는데 안 나오는 이유가 따로 있나요 ?
안녕하세요 해보다 이건 안되나? 싶은 게 있어서 질문 드립니다. 리스트의 요소의 갯수를 len()함수를 이용하여 구할 수 있는데요, a = [1, 11, 111, 1111, 11111] b = len(a[3]) print(b) 를 한다면 a의 3번째는 1111이므로 출력값은 4가 나와야 한다고 생각하는데 len함수로 이거는 못하는 건가요 ?
N%1을 하면 무조건 0이 나오므로, 0번째에 모두 꼽히고(예를 들어 3%1는 나머지 0) N%2는 무조건 0 또는 1이 나오므로, 0번째 또는 1번째에 꼽히며, N%3은 무조건 0, 1, 2가 나오므로 0번째 또는 1번째 또는 3번째에 꼽힙니다. 생각이 들었으면 실제로 돌려서 직접 눈으로 확인해보시는 것을 추천드립니다...!
항상 잘 보고 있습니다. 저는 아래코드에 2가지 질문이 있습니다. 1. output변수에 [[],[],[]]는 리스트안 리스트가 3개인데 코드 중간에는 output(number-1)%3]이라고 하니 output안에는 3개의 값이 필요한데... 이런 생각도 들고 그래서 배운대로 생각을 적어보면 number = 1일때 아래 for 문대로라면 output[(1-1)%3].append(1)이라고 생각해요. 그런데 output을 프린트 하려고 하니 "[]"가 3개인데.... output[0].append(1)을 어떻게 print하지? 생각이 복잡해집니다.. 답변 부탁드려요. for number in numbers: output[(number-1)%3].append(number) print(output)
어떤 것을 출력하고 싶어 하시는지 정확하게는 모르겠는데, 어떤 현상이 일어났어도, 현상만으로는 무슨 일이 일어난 것인지 정확하게 관측할 수는 없는 경우가 있습니다. - 예를 들어서 지진이 났을 때 이게 어디에서 어떻게 일어났는지를 지진이 일어났다는 사실만으로는 알 수 없습니다. 그러한 때는 현상과 동반되는 다른 지표들을 사용해서 관측하게 되는데요. - 예를 들어서 지진이 나면 S파와 P파의 시간차를 이용해 어느 정도 거리에서 발생했는지 확인할 수 있고 - 여러 지역의 정보를 취합해서 정확하게 어디에서 지진이 어느 깊이에 어느 정도 규모로 일어났는지 예측합니다. 현재 질문에서도 "output[0].append(1)을 어떻게 출력하지?"라면 프로그래밍은 이걸 그냥 관측할 수는 없습니다. 그리고 지진처럼 "발생했다" 이외의 정보를 이것만으로는 알 수 없습니다. 따라서 - 여기에 사용된 아이들 output, number - 더 자세히 보면 (number - 1) % 3 등을 관측해서 print("output:", output) print("number:", number) print("(number - 1) % 3:", (number - 1) % 3) 를 원하시는 위치에 넣어 출력하시면 어떤 현상이 일어나는 것인지 확실하게 관측하실 수 있을 것이라 생각합니다 'ㅁ' ...!
선생님 안녕하세요 교재 179쪽 질문있습니다 array = [273, 32, 103, 57, 52] for i in range(len(array)): print("{}번째 반복: {}".format(i, array[i])) 에서 왜 'array'로 리스트를 불러오지 않고 'range(len(array))' 이렇게 불러오는 건가요? + (범위(문자의 길이( array))
반복문을 접하면서 데이터 양이 많아지면 어떻게 될지 의문이 들다보니, 한 가지 질문이 떠오르는데요...(강의랑 조금 무관합니다...) 나중에 텐서플로우로 머신러닝을 다룰 수 있길 바라는 1인인데, 추후 데이터 양이 많아지면 일반 노트북 사용으로는 힘들지, 그리고 텐서플로우를 포함한 머신러닝/딥러닝을 다룰 때 어떤 OS(윈도우 / mac) 가 쓰기 편한지 궁금합니다.
데이터 양이 많아지면 어떤 노트북으로도 진행이 불가능해집니다. 일반적으로 노트북에서는 데이터 일부만을 갖고 진행하고 + 클라우드 서비스로 넘겨서 그쪽에서 진행합니다 = 클라우드 서비스를 활용하면 소유하고 있는 컴퓨터는 큰 의미가 없어서 윈도우와 맥 아무 것이나 써도 상관이 없습니다.
for문에서 for 키 변수 in 딕셔너리: 코드 이런식으로 사용을 하잖아요? 이때 키 변수는 제가 임의로 아무문자열로나 잡아줄 수 있는거구요.. 그런데 이때 키 변수를 어떤 식으로 컴퓨터가 인식하는지 궁금합니다. 딕셔너리일때는 앞에서부터 키와 값에 차근차근 접근하는 것 같고, 리스트일때는 앞에서부터 요소에 차례대로 접근하는 것 같고 그런데 이게 컴퓨터가 어떻게 인식을 하길래 순서대로 인식이 되는 건지 모르겠습니다. 만약 0,1,2,3,4,...이렇게 인식을 한다면, 딕셔너리는 값을 가져올때 딕셔너리명[키] 이렇게 입력해주어야 하므로 숫자로는 저렇게 차례대로 접근하지 못할 것 같은데.. 답변해주시면 감사드리겠습니다!
3.7버전 이전의 딕셔너리는 순서를 전혀 보장하지 않았습니다(일반적으로 어떤 값으로 순서 없이 키로 뭔가를 찾는 자료형을 해시, 해시맵 등으로 부르는데, 대부분의 프로그래밍 언어는 이 순서를 보장하지 않습니다). 하지만 3.7버전부터는 "넣은 순서"대로 들어가게 되었습니다. 다만 딕셔너리에 어떤 값을 넣었다면, 이는 "순서가 상관 없는 것"이므로 순서에 얽매이지 않게 만드는 것이 좋습니다(프로그램들끼리 커뮤니케이션을 거치는 과정에서 순서가 훼손될 가능성이 있습니다). 만약 순서가 중요하다면 리스트를 사용하는 것이 좋습니다.
안녕하세요 혼공파 책보고 잘 공부하고 있습니다. 반복문이 잘 이해가 안돼서 영상으로는 처음 봤는데 비주얼 스튜디오 쓰는 것은 처음봤네요 밑에 터미널이 되게 편해보여서 저도 이용해보려고 했는데 왜그러는지 쓸때마다 계속 오류가 납니다 ㅠㅠ IDLE에서는 잘 되는데 말이죠 혹시 저렇게 세팅하려면 어떻게 하는지 알려줄 수 있으신가요?
Traceback (most recent call last): File "C:\Users\PC_1M\qw.py", line 1, in asd NameError: name 'asd' is not defined 간단한 프린트로 해도 이렇게 뜨네요 저 폴더 관련된 게 문제 같기도 한데 저는 cd.. 해도 PS C:\> 이게 계속 남아있네요 선생님처럼 ~ 표시만 떠야되는거죠?
@@박영웅-s4p 앞에 c:\>가 정상입니다! 강의에서 저는 macOS에서 zsh라는 셸을 설정해서 쓰고 있어서, 조금 특이하게 뜨는 것입니다. 현재 코드를 보면 실행은 정상적으로 된 것으로 보입니다. 내부에서 print(asd)라고 하신 것 같은데, asd라는 변수가 없으므로 오류가 뜨는 것입니다. print("asd") 등으로 변경해보세요!
나중에 가면 터미널에 명령어를 입력해서 코드를 실행해야 하는 상황이 많아서 개인적으로 스크립트 언어 계열은 개발 도구에 붙어있는 실행 버튼보다는 명령어를 입력해서 실행해서 익숙해지는 것을 추천합니다! 예를 들어 - 인공지능 모델 구축은 개인 컴퓨터에서는 너무 오래 걸리고 - 웹 서버를 만들 경우에도 개인 컴퓨터에서 실행할 수는 없어서 클라우드를 통해 좋은 컴퓨터를 원격으로 대여 받고 여기에 프로그램을 넘기고 실행하는 경우가 많은데 이때는 명령어를 쓸 수 밖에 없습니다!
안녕하세요 output 이라는 함수가 잘 이해가 안갑니다. 그리고 output[(number -1) %3].append(number)에서 %3은 012 순서를 돌려 한 대괄호 안에 3개의 숫자를 집어 넣게 하는 거고 number -1은 끝에서 부터 숫 자를 채우너 넣을려고 설정 한건가요?
5번문제...하,,,, 드이어 이해 했습니다. 댓글보고 이해 했네요.. 혼자 꼭 풀어봐야지 하면서, 복습하면서 다시 강의봤는데.. 아무 생각없이 댓글 보다가.. 어?? 아아!!!!!!!!!!!!!!!!! 이러고 답을 찾았네요. 한가지 걱정이 있는데.. 직장다니면서 공부를 하다보니 아무래도 시간이 많지가 않더라구요.. 일단은 복습 많이 하면서, 예제문제를 계속 풀어보면서 익숙해지려고 하는데 분명이 직접 풀었던 문제인데.. 다시 보면 까막눈이 되어버려서...책 앞에 뒤져보고... 한참 생각하다가 다시 푸는경우가 많은데요 반복만이 살길인가요??ㅜㅜ
모든 공부가 런닝 머신 위를 뛰는 것과 같아서, 안 하면 계속 뒤로 밀리므로, 개발도 그냥 계속해서 공부해야 합니다. 이미 풀은 내용을 계속 반복해서 보는건 큰 의미는 없가고 생각해서, 계속 앞으로 나아가며 관련된 내용을 스치듯이 마주하는 것을 추천합니다[이 채널 최신 영상 중에 "이거 끝나면 뭐하지" 등을 참고해보세요!]
holzzak = ["짝수", "홀수"] for number in numbers: print("{}는 {}입니다.".format(number, holzzak[number % 2])) 여기서 numbers에 있는 숫자들을 하나씩 비교해서 %2를했을때 짝수로 판명되는건 holzzak의 첫번째인 짝수가되고 그렇지않은것은 홀수라고 표시되는건가요? 어떤원리로 이렇게되는지 원리를 잘 모르겠어서요
159페이지 5번 문제가 처음으로 몇번 생각해도 잘 이해가 안가는데요. 결국 핵심 부분인 output[number%3].append(number) 문장에서 output[1].append(1), output[2].append(2)......output[0].append(9) 까지 갈텐데요. 예제 앞의 본문내용에서는 리스트 전체에 append를 붙이는 형태(리스트.append함수)만 나오고 여기 5번문제에서와 같이 인덱싱[ ]이 들어가는, 즉, 리스트[ ].append함수 형태는 없었는데요. 그간 배운 규칙으로 생각해 보면 output[1].append(1)은 5번문제에서 정의된 output함수의 1자리 즉, 두번째 [ ]에 1을 append 하면서 ===> [ [ ], 1 ] 이런 형태 값이 되는 걸까요?
4-1 3번 문제 for number in numbers : output[(number-1)%3].append(number) print(output) => output 리스트에 0번째 요소에 1,4,7 1번째 요소에 2,5,8 2번째 요소에 3,6,9가 들어가는 것으로 이해했는데요 a = [[],[],[]] b = a[0].append(10) print(b) 이렇게 출력한 결과는 None이 나옵니다. 제가 3번문제를 제대로 이해한게 맞는지 궁금합니다.
안녕하세요 159page 4번 연습문제를 풀기위해서 이것 저것 코딩을 하던 중 궁금한게 있어서 여쭈어 봅니다. for element in list_of_list: for element_detail in list_of_list: print(element) 제가 이해 하기로는 element에 [1,2,3] , [4,5,6,7] , [8,9]이렇게 하나 하나 씩 저장이 되는 걸로 알고 있습니다. 그런데 element_detail에는 아무것도 들어있지 않습니다. 그런데 어떻게 그리고 왜 각 리스트의 요소 들이 3번씩 반복이 되어서 출력이 되는지 궁금합니다. [1, 2, 3] [1, 2, 3] [1, 2, 3] [4, 5, 6, 7] [4, 5, 6, 7] [4, 5, 6, 7] [8, 9] [8, 9] [8, 9]
박찬호 반복문은 요소의 개수 만큼 반복을 돕니다. list_of_list의 요소 개수가 3개 이므로 바깥의 반복문이 3번 * 안의 반복문이 3번 돕니다. 코드는 작성한대로 실행될 뿐이며, 현재 element_detail에는 아무 것도 없는게 아니라, list_of_list의 요소가 들어갑니다[위의 반목문과 똑같이 입력했으므로, 똑같은 형태로 반복됩니다]. 반복 변수를 print(element, element_detail)로 두 개 모두 출력해보시면 더 쉽게 이해하실 수 있을 것 같습니다.
안녕하세요~ 강의내용에는 없지만 for문 관련해서 질문좀 드려도 될까요? for문으로 반복할때 반복마다 생기는 결과를 각각 다른 변수로 저장하고싶은데 그렇게는 못하는건가요? 아님 방법이 있나요? 예를들면 for문으로 10번 반복할때 a0 = 첫번째 반복에서 나온 결과값 a1 = 두번째 반복에서 나온 결과값 ..... a9 = 열번째 반복에서 나온 결과값 이렇게 저장할수 있나요?
예시로 보여드리겠습니다. a=[1,2,3,4,5,6,7,8,9,10] for i in range(0,len(a)): globals()['a_{}'.format(i)]=a[i] print(a_0,a_1,a_2) 이런식으로 짜시면 결과가 1 2 3 나옵니다. 즉, 각 변수마다 값이 할당 되었음을 알 수 있습니다. 키워드는 동적 변수생성 으로 알면 도움 되실듯 합니다.
질문하나 하겠습니다. c언어나 c++을 할때, 프로세스 단위로 돌리게 되면 변수안의 데이터들이 변화는 과정을 볼 수가 있는데, 파이썬에는 그런기능 즉, 비주얼 코드 개발환경에는 그런 기능이 없는건가요..? 함수의 기능이 제대로 머릿속에 박혀있지 않은 문제도 있겠지만, 과정을 알게되면 이해가 빠른데 인터렉티브셀이나 비주얼코드에서 입력을 하게되면 결과만 출려되어 이해가 늦어지는 부분이 있어서 질문드립니다.ㅠㅠ c언어를 하고 파이썬을 하는 중인데,.. 파이썬이 어렵게 느껴지고 있네요 으음...
이준우 해당 기능은 C 언어와 C++의 기능이라기 보다는 개발 환경(비주얼 스튜디오 코드)의 디버그 기능입니다. 비주얼 스튜디오 코드도, 줄 번호 왼쪽에 클릭을 하시면 브레이크 포인트가 걸리는데, 이후 비주얼 스튜디오 코드 왼쪽에 있는 5개의 아이콘 중 벌레 잡는 모양 아이콘을 누르고 거기에 나오는 재생 버튼으로 코드를 실행해주시면 디버그가 가능합니다
확인문제 5번 하루동안 고민해봤는데.. 이렇게 이해하는게 맞는지 질문드려요 output[ (number -1 ) % 3 ].append(number) 부분을 나눠서 생각을 해봤는데요 output.append(number) code 실행 시 output list에 number list가 추가되는 code이고 # [ [], [] ,[], 1, 2, 3, 4, ... 9 ] output의 뒤 대괄호 "[]" 는 output list의 지정된 요소를 가져오는 인덱스로 책에 설명이 되어있는데 number % 3 을 해주는 것은 number의 각 요소를 3으로 나눈 나머지값인 "1, 2, 0"를 output list의 요소 위치 0, 1, 2에 나머지값과 위치값이 같은 요소를 해당 output list의 위치에 넣어준다 라고 이해하면 될까요? 그러면 -1을 해주는 것도 이해가 같이 될것같습니다. 도움 부탁드립니다 ㅠ
9:00 부분. for 안에서 지정해준 변수 a, b 등은 for 밖에서 지정해준 변수 a에는 전혀 영향을 받지도, 주지도 않는 건가요? 저 for문 실행전에 a=3이라고 한번 실험삼아 넣아봤는데, for문에는 영향을 전혀 주지 않는 것 같더라구요 답변 부탁드립니다. 감사합니다!
a=[1,2,3,4,5,6] for element in a: print(element) 으로 실행하면 아래와 같은 에러코드가 나오는데요 File "", line 1 python roop.py ^ SyntaxError: invalid syntax 파일명은 roop.py 로 같은 폴더명 내에 있는데도 작동이 안되서요.. 혹시 왜그런지 알수있을까요?
안녕하세요 numbers=[1,2,3,4,5,6,7,8,9] output=[[],[],[]] for number in numbers: output[number%3].append(number) print(output) 1 %3 =1 : 두번째 숫자 2 출력 2 %3 =2 : 세번쨰 숫자 3 출력 3 %3 =0 : 첫번째 숫나 1 출력 4 %3 =1 : 두번째 숫자 2 출력 5 %3 =2 : 세번쨰 숫자 3 출력 6 %3 =0 : 첫번째 숫나 1 출력 7 %3 =1 : 두번째 숫자 2 출력 8 %2 =2 : 세번쨰 숫자 3 출력 9 %3 =0 : 첫번째 숫나 1 출력 [2 ,3 ,1 ,2 ,3 ,1 ,2 ,3 ,1 ] 이렇게 출력이 될 거라 생각했는데 [[3, 6, 9], [1, 4, 7], [2, 5, 8]] 왜 이 값이 나오는지 도저히 이해가 안가요ㅠㅠㅠㅠㅠㅠ
3번 예제에 자릿수 구하는 문제에서 저는 굳이 str() 함수를 쓰지않아도 len(273) = 3 이니까 안붙여도 된다 생각했는데 오류가 뜨더라구요. 왜 문자열로 변환해서 자릿수를 나타내야하는지 알수있을까요? 그리고 number = [100] 을 설정한후에 len(number), len(str(number))을 입력하였더니 각각 1,5으로 나오더라구요. 저는 1,1로 나올거같았는데 왜 1,5로 나오는지이것도 알수있을까요?
1. len() 함수는 매개 변수로 숫자가 올 수 없습니다. 그냥 그렇게 만들어졌을 뿐입니다. 2. str([100])을 해보시면 "[100]"이라고 나옵니다. 5글자이므로 5가 출력됩니다. str([100])이 왜 "[100]"이 되는지는 그냥 그렇게 만들어졌기 때문입니다. 1번의 경우는 기억해두시는 것이 좋을 것 같고, 2번의 경우는 리스트를 문자열로 변환하는 일 자체가 없으므로 그냥 그러려니 한 뒤에 넘어가시면 좋을 것 같습니다.
안녕하세요! 강의 잘 보고 있습니다! 질문이 있어서 댓글 남겨요~ 혹시 연습문제 5번에 대해서, for문 > output[(number-1)%3].append(number) 부분이 연산되는 과정(?), 풀이(?)를 낱낱이 알 수 있을까요? 어떻게 [1,4,7],[2,5,8],[3,6,9]로 출력되는지 이해가 안 되어서요... P.S. [3,6,9], [1,4,7],[2,5,8]로 출력되는 number%3조차 이해를 하지 못했습니다.... 수학책 해답처럼 풀이를 좀 부탁드립니다;;^^
number에 직접 1부터 9까지 넣어보시면서 - number - (number - 1) % 3 를 정리해보신 뒤에 number로 묶어보시면 쉽게 알 수 있을 것이라 생각해요...! 딱 9번 정도만 계산해보면 되니 쉽게 하실 수 있을거라 생각합니다...! 예를 들어 - number = 1일 때 (1-1)% 3 = 0 - number = 2일 때 (2-1)%3 = 1 - number = 3일 때 (3-1)%3 = 2 - number = 4일 때 (4-1)%3 = 0 처럼요...![계산된 값이 결국 0-1-2-0-1-2-0-1-2로 돈다는 것을 확인하실 수 있을 것입니다]
@@윤인성 # for 1 in numbers output(1-1)%3=0.append(1) > 0번째 내부리스트에 1값을 추가. [1] # for 2 in numbers output(2-1)%3=1.append(2) > 1번째 내부리스트에 2값을 추가. [1],[2] # for 3 in numbers output(3-1)%3=2.append(3) > 2번째 내부리스트에 3값을 추가. [1],[2],[3] # for 4 in numbers output(4-1)%3=0.append(4) > 0번째 내부리스트에 4값을 추가. [1,4],[2],[3] # for 5 in numbers output(5-1)%3=1.append(5) > 1번째 내부리스트에 5값을 추가. [1,4],[2,5],[3] # for 6 in numbers output(6-1)%3=2.append(6) > 2번째 내부리스트에 6값을 추가. [1,4],[2,5],[3,6] # for 7 in numbers output(7-1)%3=0.append(7) > 0번째 내부리스트에 7값을 추가. [1,4,7],[2,5],[3,6] # for 8 in numbers output(8-1)%3=1.append(8) > 1번재 내부리스트에 8값을 추가. [1,4,7],[2,5,8],[3,6] # for 9 in numbers output(9-1)%3=2.append(9) > 2번째 내부리스트에 9값을 추가. [1,4,7],[2,5,8],[3,6,9] # 선언한 output = []이런 형태였을 경우에는 "IndexError가 발생함. index가 0,1,2세 가지인데 0번째 자리만 선언되어있으므로 맞지 않음. (list index out of range)" 이렇게 이해하면 내부적으로 도는 프로세스를 모두 이해한 것이 맞나요?
질문있어요!! 비주얼 스튜디오 코드의 터미널에서 실행해봣는데 >>> array = [0, 1, 2, 3, 4, 5, 6] >>> for element in array: ... print(element) File "", line 2 print(element) ^ IndentationError: expected an indented block 이런식으로 오류가 뜨네요ㅜ 왜그런건가요?!
앞에 들여쓰기(띄어쓰기 2개 등)을 넣어주셔야 합니다. Indentation은 들어쓰기를 의미하며, Indentation error는 따라서 들여쓰기 오류를 의미합니다. 인터랙티브 셸에서 입력할 때 각 줄 앞에 들여쓰기를 넣어주는게 쉬운 일이 아니라[한 줄 일 때는 괜찮은데, 여러 줄 되면 문제에, 이게 오류가 나중에 뜨니 오류 뜨고 나면 처음부터 다시 입력해야해서], 들어쓰기가 있는 구문들은 인터랙티브 셸에서 잘 사용하지 않습니다[그냥 간단한 한 줄 테스트 용도].
21강이 저에겐 정말 어려웠네요. 마지막 문제가 이해가 안되서... 반복문을 쫙~ 풀어서 써보니 그제서야 이해가 되네요. 순서를 바꾸기 위해서 -1 해주신 이유도 알게 되었습니다.
혹시 저처럼 이해 못하시는 분들은 반복문말고 풀어서 써보면 이해가 될 거 같아요. 강의 정말 최고예요. 감사합니다.^^
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [[], [], []]
output[1].append(1)
output[2].append(2)
output[0].append(3)
output[1].append(4)
output[2].append(5)
output[0].append(6)
output[1].append(7)
output[2].append(8)
output[0].append(9)
print(output)
이렇게 하면 1, 2, 0이 되어서 [[3, 6, 9], [1, 4, 7], [2, 5, 8]]이 출력되고
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [[], [], []]
output[1-1].append(1)
output[2-1].append(2)
output[0-1].append(3)
output[1-1].append(4)
output[2-1].append(5)
output[0-1].append(6)
output[1-1].append(7)
output[2-1].append(8)
output[0-1].append(9)
print(output) 요렇게 -1을 해줘야 0, 1, -1이 되어서 원하는 순서대로 나오네요.
와 덕분에 이해했습니다 감사해요
윈도우 계산기로 나누기하면 "몫" 나오는데 왜 "나머지"가 안나오지 하면서 해맸네요. 윈도우계산기에서 나머지 구하는 방법은 ruclips.net/video/GBN_tADU3ng/видео.html
저도 도움 많이되었습니다. 감사합니다.
또봐도 헷갈려서 내자신한테 덧글남기기..
리스트명.append(요소) 형태 #책146쪽 append
output[ ].append(요소) 형태 #책142쪽 output[]는 리스트인덱스
%는 나머지. kin.naver.com/qna/detail.nhn?d1id=11&dirId=1113&docId=353628961&qb=MeydmCDrgpjrqLjsp4A=&enc=utf8§ion=kin&rank=1&search_sort=0&spq=0
이상봉 풀어서 설명해주셔서 감사합니다만 아직 이해가 안 되어서요 질문 드립니다.
output 함수가 1,2,0 인지는 어떻게 아셨는지. 왜 0,1,2,3,4......
가 아닌지. 그냥 외워야 하는 거라면 하겠지만 궁금해서요.
@@seonakimparsons1722 조금 늦었지만, %는 나머지를 찾는 함수라서 그렇습니다. 1 나누기 3의 나머지는 1이라서 output(1), 2 나누기 3의 나머지는 2라서 output(2), 3은 나머지가 없으니 output(0)
오늘 강의는 제일 마지막에 말씀해주신 발상이 가장 중요한 것 같다고 생각 듭니다. 항상 감사합니다.
일단 5번 문제의 리스트인 output 속의 []들은 output이라는 리스트 속의 공백 리스트들이고 그것들은 0번째, 1번째, 2번째 공백 리스트로 분류됨.
그래서 답지 내용대로 output[(number + 2) % 3].append(number)가 무슨 말이냐 하면
먼저 리스트 numbers에 있는 숫자 1이 들어갔을때 (1+2)%3 의 수식이 되어서 나머지가 0이 되고 .append(number)에 의해서 숫자 1이 처음으로 0번째 리스트에 들어감. 즉, number 자리에 숫자가 들어갔을때 나머지가 0이 되면 0번째 리스트에 같은 숫자 1이 들어간다는 말임.
(이게 뭔 소리인지 이해가 안가면 for문 이해가 잘 안됬다는거임.)
또 2가 들어갔을때는 같은 이유로 나머지가 1임, 즉 1번째 리스트에 처음으로 2가 들어간다는 거임.
이런 과정이 반복되서 0번째,1번째,2번째 리스트에 들어갈 숫자들이 정해진다는 거임
이렇게도 해봅니다.
댓글보고 이해했어요.
numbers = ['일', '이', '삼', '사', '오', '육', '칠', '팔', '구']
output = [[], [], []]
i = 0
for number in numbers:
output[i % 3].append(number)
i += 1
print(output)
------------------------------------------------
[['일', '사', '칠'], ['이', '오', '팔'], ['삼', '육', '구']]
숫자가 아니라면 어떻게 작동할수있을까 생각하다가 이 댓글을 보았는데 i 가 뭔지 여쭤봐도 될까요?
@@hwang_hae 코드에 오타가 있었네요
혼란을 드려서 미안합니다 ^^
output[ i % 3 ].......
위 부분에 나머지 연산을 위해 임의로 설정한 변수입니다
a가 뜬금없이 들어갔네요 ㅋㅋㅋ
감사합니다!
우와~~~
오늘 정말 대단한 강의를 들었습니다.
공부 많이 했네요
감사 합니다.^^
좋은 하루 되세요~~~
피라미드 문제는 요롷게 하면 한번 반복으로도 될 수 있을거 같아요
num = input("> 피라미드 층수를 입력하세요: ")
num_list = [1] * int(num)
a = 0
for num1 in num_list:
a = int(num1)+a
print(" "*(int(num)-a),"*"*int(a*2-1))
다음장에 range를 쓰면 요롷게도 쓸수 있을것 같아요
num = input("> 피라미드 층수를 입력하세요: ")
for a in range(int(num)):
print(" "*(int(num)-int(a)-1),"*"*((int(a)+1)*2-1))
선생님 수업들으면서 하니까 너무 재밌네요 주말이 쭉쭉가네요
멋집니다...!!!
감사합니다. 댓글을 달아 주신 분들에게 감사드립니다. 읽다보니 이해가 되었습니다.
정말 너무 잘 가르치세요. 이런 강의를 무료로 볼 수 있다니 ! 천사세요^_^ 강의 잘들었습니다~~!!
작가님의 개인적인 경험담이 위로와 용기를 주는거 같아요!! 진짜 익숙해지면 쉽게 뚝딱 하는 날이 오겠죠
작가님 주신 팁을 꼭 기억하며 공부해야겠습니다 좋은강의 너무 감사합니다
159쪽 확인문제 5번의 정답은,for number in numbers: output[(number - 1) % 3 ].append(number) 이며, 143쪽의 설명처럼 리스트 안에 리스트가 사용된 예제입니다.output[(number - 1) % 3 ]는 큰리스트 안의 작은리스트 번호를 순서대로 선택하는 단계이고, append(number)는 현재는 완전 빈 공백으로 있던 작은리스트에 number를 차례로 끼워넣는 문제라고 해석해도 괜찮은지요.뿌리를 확실하게 이해하지 못하면 머릿솟에 남아있지 않아서 완전하게 이해하기 위해서 문의드립니다. 고맙습니다.
Jaeil Nam 넵 그렇습니다...! % 연산자와 리스트를 활용하는 예라고 생각해주시면 되겠습니다...!
와.. 감사합니다
output[ ].append(num) 함수에서 대괄호 안에 0, 1, 2가 뺑뺑이로 돌아야한다는 의미도 이해했고 (모든 수를 3으로 나눴을 때 가능한 나머지는 0, 1, 2이고, output 리스트 안의 리스트가 0번째, 1번째, 2번쨰 총 3개니까 %연산자를 사용한다는 의미로 이해했습니다)
for 문에서 가져온 요소를 순서대로 output 큰 리스트 안의 0번째, 1번째, 2번째 작은 리스트에 넣는 그 과정이 어렴풋이 이해가 됐습니다 ㅋㅋㅋ 정말 말로 설명하기 어렵네요
비슷한 의미로 생각해서 output[(num + 2) % 3].append(num)으로 해봤는데 결과값은 같네요.
그런데 아직 -1이 왜 가능한건지는 잘 모르겠습니다.
위에 제가 말씀드린 대로 output[(num + 2) % 3].append(num)을 사용할 경우
for 문 첫 번째 과정에서 numbers 리스트에서 첫 번째 값인 1을 가져와서 output 리스트의 (1 + 2) % 3 , 즉 0번째 리스트에 num 1을 추가하는걸로 이해했는데
output[(num - 1) % 3].append(num)일 경우 (1 - 1) % 3 이 되니까
아 0을 3으로 나눈 나머지는 0이니까 되네요 쓰면서 이해했네 세상에 감사합니다..
축하드립니다!![이해의 즐거움!]
-1이 가능한 것은 그냥 언어가 그렇게 설계되었기 때문입니다(다른 대부분의 프로그래밍 언어는 안 됩니다)!
좋은 강의 감사합니다. 유튜브에 있는 파이썬 강의 가운데 제일 상콤한 것 같아요~
좋은 영상 잘봤습니다.
설명을 너무 쉽게 해주셔서 이해하기 쉬웠습니다.
for반복문을어려워 하시는 분들이 많으실텐데 반복문을 한번 풀어서 써보면 이해하기 수월하실 겁니다.
초장에 잘 나가다가 뒤로 갈수록 확인 문제가 안 풀려서 나는 그냥 아무것도 아니구나 나 따위 역시 그렇지 끝없이 절망하다가.. 희망을 얻고 갑니다. 선생님 너무 설명 잘하세요!
열심히 따라 하고 있습니다. 프로그램밍을 공부하다가 돌대가리는 못 하는것이구나라고 여러번 포기했는데 응원의 멘트도 큰 도움이 되네요.
새로운게 나올때마다 외우기보다는 백지에 필기해놨더니 필요할때 쓰기 좋네요 ㅋㅋㅋ
여러개의 책과 강의를 보며 4번째 책이과 저자강의를 듣는 중인데 귀에 너무 쏙쏙 들어오는게 강의가 너무 좋습니다 ㅠㅠㅠ
예제는 못풀었는데 *피라미드는 15분만에 풀었네요 :D 휴....다행 ㅎㅎㅎ
빅데이터 분석, 딥러닝&머신러닝 쪽으로 공부를 쭉이어가고 싶은데
저자님의 책 중 다음으로 어떤 책으로 넘어가야할지 알려주실 수 있을까요?:D
앗 현재 혼공파 강의는 개정판 강의가 있는데 2배 길고 자세합니다! 해당 강의쪽을 살펴보는걸 추천드립니다!!
곧바로 넘어갈만한 제 책은 없어서 @_@
다른 책을 찾아보는걸 추천드립니다!!
연습문제 부분 일시정지하고 직접 풀어서 맞추니까 엄청 뿌듯하네요 ㅎㅎ
그냥 보는것 보다 직접 풀고 보면 좋을 것 같아요~!!
프로그래밍이 가면 갈수록 "내가 직접 하고 깨닫는 것"이 중요해져서, 기본서를 보는 단계부터 직접 풀어서 맞추는 재미에 익숙해지시면, 이후에도 큰 도움이 될 것이라 생각합니다!!
지금까지는 큰 어려움 없이 해오다가 이번 강의 5번에서 탁 막혀서 흐를 뻔한 눈물을 참고 머리 싸매고 있는 중입니다.... 다른 분들 질문이랑 답변도 보고 혼자 이해해보려고 노력하고 있는데 제대로 이해하고 있는 과정인지 모르겠고.... 머리가 터질 것 같아 몇 가지 질문 드립니다.........!!
1. 9개의 숫자들을 3으로 나눴을 때 나머지에 따라 1,4,7 / 2,5,8 / 3,6,9로 나뉘기 때문에 분류를 하기 위해 대괄호 안에서 %를 해주는 것인가요?
2. output[number % 3].append(number)일 때
output[1].append(1)에서 output[1]이 의미하는 바가 위에서 선언한 output = [[], [], []] 여기 안의 세 개의 리스트 중에 1번째, 즉 가운데 있는 리스트를 의미하고 append(1)로 인해 그 가운데 리스트에 1을 집어넣으라고 이해하면 되는 걸까요?
3. output[숫자]가 큰 리스트 안에서 '숫자'번째에 있는 작은 리스트를 의미하기 때문에 output = [[], [], []] 여기서는 총 3개의 리스트가 있으므로 각각 0번째, 1번째, 2번째라서 대괄호 안 '숫자'에 0,1,2만 들어갈 수 있는 것이 맞나요? 대괄호 안에 3 이상 숫자가 들어가면 index error가 나는 것도 맞는지 궁금합니다...ㅠㅠ
4. -1을 하는 목적은 첫번째로 number에 들어가는 1을 -1 함으로써 나머지를 0으로 만들어 output의 0번째 리스트에 1이 들어가게 해서 1,2,3 순서로 각각 0번째, 1번째, 2번째 리스트에 넣기 위함이 맞나요? 1,2,3 순서 말고 2,3,1 로 하고 싶으면 -1 대신 +1 하면 되는 것도 맞나요?
질문이 너무 많아서 죄송합니다ㅋ큐ㅠㅠㅠ 제가 조금이라도 잘못 생각하고 있는 부분이 있다면 알려주세요,,,,,,ToT
1-2. 넵 맞습니다.
3. 직접 해보셔서 눈으로 보는게 제일 좋을 것 같은데,
말씀하신대로 인덱스 에러가 발생합니다.
4. 넵 맞습니다.
프로그래밍은 원어민 선생님[컴퓨터]가
항상 앞에 앉아 있다보니, 의문이 생기신다면
실제로 여러 가지 테스트해보시면
더 기억에도 잘 남으실 것입니다!
@@윤인성 감사합니다!!! 직접 쳐보면서 하나하나 다시 생각해보겠습니다ㅎㅎ
5번 문제 답을 보고나면 하나씩 순차적으로 풀어서 보면 이해할 수 있는데, 혼자 풀 때는 손도 못댔네요
직접 코드를 실행시켜보니까 이해가 좀 더 잘되는거 같아요~ 좋아요~
이번강의 15분이라서 짧구나 했는데 댓글보면서 이해하니까 50분이 걸리네요 ㅋㅋㅋ 잘들었습니다.
반복문 함수 부분이 좀 어렵습니다 ;ㅁ; !!
ㅋㅋ 이 영상만 유독 질문이 많네요. 그만큼 난이도 있는 주제라서 그런가봅니다!
저도 이해가 안되는게 있는데 반복문 분석하는 강의보고 다시 봐도 이해안되면 질문드리겠습니다~
output[]가 뭔지 몰라서 이해가 안갔었는데 전에 있던 코드 보고 기억나서 깔끔히 해결됐네요~~~ 다시 쭉 가겠습니다!
감사히 정말 잘 보고 공부 하고 있습니다. 감사합니다.
선생님! 질문요.
전부 이해는 갑니다.
의문점. 예를들어
output[ number % 2 ].append(number) 시
직접 계산하고 나열하면,
[ [ 1 , 2 , 4 , 6 , 8 ] , [ 3 , 5 , 7 , 9 ] , [ ] ] 이렇게 나와야 하는데,
결과는
[ [ 2 , 4 , 6 , 8 ] , [ 1 , 3 , 5 , 7 , 9 ] , [ ] ]
이유는 1 % 2 = 0 아닌가요? 아~ 갑자기 생각났네요. Float 이 아닌 integer 로 생각해야되는 거죠?
그래서 1 % 2 = 1 이에요??
그냥 integer로 생각해도 1 % 2는 1입니다. 1을 2로 나누면 몫은 0이고, 나머지는 1이 됩니다.
윤인성 처음에는 1을 두개로 나누니 0.5 이고, 나머지는 0이 되서 첫번째 결과가 나와야 된다고 생각 했는데, 아니었던거죠.^^ 선생님 감사합니다.
자릿수 구하는 코드에서
numbers=[273,103,5,32,65,9,72,800,99]
for number in numbers:
if len(str(number))==3:
print("{}는3자리 수입니다".format(number))
elif len(str(number))==2:
print("{}는2자리 수입니다".format(number))
else :
print("{}는1자리 수입니다".format(number))
더 복잡하긴 하지만 이렇게 해도 문제없죠?
현재 예제에서는 문제는 없지만, 자릿수가 확대되는 경우(4자리 5자리 등)에 대응이 힘들 수 있으므로, 그냥 len(str(number))를 출력하는 것이 좋습니다...!
5번문제 가지고 2일을 고민했는데 드디어 이해했네요 바보같이 %기호를 나누기로 착각하고 거기에 맞춰서 생각하니까 답이 없는 생각에서 반복했네요ㅋㅋ
강의 잘 듣고 있습니다 감사합니다!
21강까지 왔습니다! 21강은 좀 반복해서 봐야 할 것 같아요. 강의 감사합니다!
a = [1, 2, 3, 4, 5, 6, 7]
for element in a:
print(element)
현재 코드에는 오류가 없습니다!
파일 저장을 안 하시는 등의 실수로 이전 코드가 실행되었을 가능성이 있으므로 파일을 저장해주세요![만약 인터랙티브셸 또는 IDLE를 사용했을 경우, 이는 들여쓰기가 있는 코드를 실행하는게 약간 힘듦으로 강의처럼 파일로 만들어서 진행해주세요].
일시 정지하면서 풀어 보는 것은 다음에 할께요~
책 열기 10일차.
책은 술술 넘어가는데 5번 문제 이게 뭔가 한참 고민하다가 댓글 봐도 대충 알 것 같은데 이게 뭔 소리 인가 싶다가
p.143 세번째 리스트안에 리스트보고 이해되었네요.
output = [ [ 좌표0 ] , [ 좌표1 ] , [ 좌표2 ] ]
나머지가 0인 좌표에 그 회차 숫자를 넣어라.
풀어놓고도.....
이게 영상 뒤에 추가로 3번 특이 풀이 부분 보니 단박에 이해가 가네요.
감사합니다.~~
5번 문제에 output(number % 3 ].append(number)을 할시에,[[], [1], []]
[[], [1], [2]]
[[3], [1], [2]]
[[3], [1, 4], [2]]
[[3], [1, 4], [2, 5]]
[[3, 6], [1, 4], [2, 5]]
[[3, 6], [1, 4, 7], [2, 5]]
[[3, 6], [1, 4, 7], [2, 5, 8]]
[[3, 6, 9], [1, 4, 7], [2, 5, 8]]이렇게 나오는데요. output[number % 3 ]은 0,1,2 밖에 안나오는걸로 알고있고, append는 그대로 뒤에 붙여서 나오는거라고 배웠었는데, 대입을 어떻게해야만 저 결과처럼 나올수있는지 알려주실수있을까요?
그냥 output[number % 3].append(number)를 할 경우, 저렇게 나옵니다. output[0], output[1], output[2] 번째에 있는 리스트들의 뒤에 요소들이 쭉쭉 추가되는 것입니다. 질문의 의도가 이것인지 잘 모르겠는데, 아니라면 조금 더 질문을 자세하게 설명해주실 수 있을까요...!
아 이해했습니다!! 제가너무 복잡하게생각했네요. 감사합니다.
드디어 제대로된 강의를 찾았네요!!!
Lamo 선생님(작가님)ㅋㅋㅋ TMI 넘 웃겨요 구구단 4학년 때까지 ㅋㅋㅋㅋ 강의 하나하나 놓칠 게 없는 데 그중에 선생님의 말풍선이 넘 잼나네요 감사합니다 !!!
잘 보았습니다. 허나 궁금하고 이해가 안되는게 있어 막히네요.
질문 좀 드려보자면, 보여주신 첫번째 예에서
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [[], [], []]
output[1].append(1) = 3(0,1,2,3,4... 중 두번째 위치 2 + 1)
output[2].append(2)
output[0].append(3)
output[1].append(4) = 6(0,1,2,3,4... 중 두번째 위치 2 + 4)
output[2].append(5)
output[0].append(6)
output[1].append(7) = 9(0,1,2,3,4... 중 두번째 위치 2 + 7)
output[2].append(8)
output[0].append(9)
print(output)
인 것 같은데 제가 서술한 방식대로라면 나머지 1,4,7과 2,5,8이 안나오는 것 같습니다. 너무 어렵네요. 혹시라도 어떻게 풀이가 되었는지 고견 부탁드려봅니다(뇌가 굳었나봐요), 즉 나열하신 것을 어떻게 결과값으로 해석되어 풀이가 되는지 뭐로던 설명 해 주실 수 있으시다면 부탁드리겠습니다.(feat : 누구나)
현재 표기해주신 것 중에서 = 3, = 6, = 9가 무엇을 의미하는지 알려주실 수 있을까요? 약간 잘못 이해하셔서 멀리 나간 것 같은데
append는 그냥 배열에 어떤 대상을 넣을 뿐입니다. output[ㅇ].appene(ㅁ)부분 바로 뒤에
print(output)을 넣어보시면 어떤 식으로 추가가 되는지 쉽게 이해하실 수 있을 것 같습니다!
@@윤인성 나머지값 + append된 매개변수?값이 더해져서 3,6,9 1,4,7, 2,5,8 이렇게 나온게 아닌가 해서요. 제가 이해력이 많이 딸린가봐요ㅎㅎㅎ append()영상떄는 나름 ()에 숫자를 넣으면 기존 값에 뒤에 붙는걸로 이해했는데 저 for문에서는 도통 이해가 되질 않네요. 제가 질문드린건 ([1 = 2] + (1)) = 3 + ((1 = 2]+(4)) = 6, ([1=2]+(7)) = 9까지는 한바퀴도는 마냥 이해를 했는데 1,4,7이나 2,5,8은 이해가 안되서 잘못 해석하고 있나 싶습니다. 접근을 어떻게 하느냐에 따라서 공부머리가 한참 고생하기도 하겠네요.
@@3535min2 값이 더해지거나 하는게 아니라, 그냥 각각의 값이 해당 리스트에 들어갈 뿐입니다.
@@윤인성 네 감사합니다, 대입과 형상이 안잡히네요, 리스트 대괄호 안에 append값이 어떻게 대입되고 연산되는지 모르는것같아요, 며칠이 걸리더라도 짬짬이 찾아내야겠네요
@@3535min2
output[number % 3].append(number)로 간단하게 한다면
1%3 = 1 => output[1]에 1 들어감
2%3 = 2 => output[2]에 2 들어감
3%3 = 0 => output[0]에 3 들어감
4%3 = 1 => output[1]에 4 들어감
5%3 = 2 => output[2]에 5 들어감
6%3 = 0 => output[0]에 6 들어감
7%3 = 1 => output[1]에 7 들어감
8%3 = 2 => output[2]에 8 들어감
9%3 = 0 => output[0]에 9 들어감
해서 들어간 것만 세면
output[0]에 [3, 6, 9]
output[1]에 [1, 4, 7]
output[2]에 [2, 5, 8]
이 됩니다. 이걸 이해하셨다면
output[(number - 1) % 3].append(number)
로 확장해서 생각하시기만 하면 됩니다 @_@
1 - 1 → 0%3 = 0 => output[0]에 1 들어감
2 - 1 → 1%3 = 1 => output[1]에 2 들어감
3 - 1 → 2%3 = 2 => output[2]에 3 들어감
4 - 1 → 3%3 = 0 => output[0]에 4 들어감
5 - 1 → 4%3 = 1 => output[1]에 5 들어감
6 - 1 → 5%3 = 2 => output[2]에 6 들어감
7 - 1 → 6%3 = 0 => output[0]에 7 들어감
8 - 1 → 7%3 = 1 => output[1]에 8 들어감
9 - 1 → 8%3 = 2 => output[2]에 9 들어감
해서
output[0]에 [1, 4, 7]
output[1]에 [2, 5, 8]
output[2]에 [3, 6, 9]
가 되는 것입니다.
저번달에 학원에서 파이썬 강의를 들었는데 중첩 For문 부터 헤맸거등요.. 이 책 보면서도 중첩 For에서 또 어려워서 헤매네요..흐아..
피라미드예제를
input("입력>")
a=[1,3,5,7,9]
for b in a:
print(input*b)
이렇게 짜서 입력> 에 *를 넣으면 왜 안 되나요?
input함수의 입력 자료형은 항상 문자열이니까 문자열*숫자하면 성립해야하는 거 아닌가요,,? 예를 들어서 안녕*2=안녕안녕 이렇게 나오는 거처럼요..!
지금 코드에서는 어떤 글자를 넣어도 안 됩니다. input() 함수는 입력을 받은 뒤 입력을 밖으로 내뺍니다.
변수 = input("프롬프트")
형태로 변수에 저장해주셔야 합니다.
훌륭한 강의에 감사드립니다.Visual Studio Code 편집창에서는 수정이 필요한 경우에 마우스로 아무 곳이나 찍어서 수정이 가능합니다. 하지만 인테랙티브셀에서는 마우스로 찍어서 수정이 안 됩니다. 물론 복사해서 붙여넣기는 가능합니다. 하지만 특정 부분에서 특정 단어나 철자 등을 수정은 안 되고 오직 백스페이스키로 삭제 후 수정만 가능합니다. 이것은 시스템의 설계이므로 어쩔수가 없는지요?
Jaeil Nam 넵 어쩔 수 없습니다...! 물론 후대 개발자들이 리눅스 맥의 터미널 등의 프로그램에서도 마우스클릭 할 수 있게 해주는 플러그인들을 만들기는 했지만, 이걸 쓰느니 그냥 Visual Studio code 같은 gui에디터를 쓰는 것이 편합니다...!
한바퀴 돌리고 다시 돌아오니 이제 이해가 됩니다!
"대괄호에 연산자를 사용할 수 있다"는 발상을 하기 위해 어떤 연습이나 노력이 필요할까요? 단순하게 다양한 복합적인 문제들을 풀어보면 되는 부분일까요?
넵 단순하게 다양한 문제들을 외워버리면 됩니다.
"단순하게 외워서 창작이 될까?"할 수 있는데, 외우는 것이 어느 양을 넘어가는 순간 됩니다.
마치 그림이라던지 음악이라던지 처음에는 다 외워서 따라 그리고 따라 연주하는데, 이게 어느 정도 쌓이면 스스로 그림도 그리고 작곡할 수 있는 것 비슷합니다!
PS. 아무 것도 안 보고 아무 것도 안 들으면
구석기 인류의 사람 또는 소 그림 정도 밖에 못 그립니다!
누적된 지식을 보고 듣고 외우고 따라하면서
현대적인 작품들을 만들 수 있는 것입니다.
개발도 수 많은 여러 작품(코드)를 보고 외우면 결국 됩니다!
이코드에서요
numbers= [100, 234, 355, 242, 5464, 2313, 556, 132, 643]
for number in numbers:
if number %2 == 0:
print("{}는 짝수입니다".format(number))
else:
print("{}는 홀수입니다".format(number))
반복은 if구문 밖에 안됬는데, else구문은 왜 반복되는거에요?
if 구문과 else 구문은 짝이라서,
하나만 반복을 먹이던가 라는 식으로 동작하지 않습니다.
그냥 for 구문에 의해서 if else 구문에 반복이 돌아갈 뿐입니다.
@@윤인성 그러면 하나는 반복하고 하나는 반복하지 않게 하는 것은 못하는 건가요? 그리고 elif구문도 짝인가요?
@@py4848 넵 못합니다. 아예 다른 if 문을 쓰셔야 합니다. if elif else 구문도 짝입니다.
안녕하세요! 이번 강의도 잘 봤습니다!
트리문제 혹시 답안이 어떻게 되는 지 알 수 있을까요...?
#트리만들기
high=[1,2,3,4,5]
star=["*"]
for h in high:
for s in star:
print((5-h)*" ", "*"*(2*h-1), (5-h)*" ")
저는 이렇게 풀었는데 너무 단순하게 푼 것 같아서요ㅋㅋ큐ㅠㅠ 그리고 트리 높이?를 입력받아서 푸는 방식도 해보고 싶었는데 위와 같은 방식으로 풀려니 이건 정말 생각이 막히더라구요ㅠ
프로그래밍은 일단 답만 나오면 전부 답입니다!
다만 "별 피라미드" 문제는 숫자를 기반으로 반복문을 돌리는 것리 메인인 문제라서, 기본 방법으로 풀어보시는 것이 좋습니다!
구글에서 "별 피라미드"로 검색해보시면, 다양한 프로그래밍 언어로 만드는 별 피라미드 문제들이 나옵니다! 그것들을 참고해보시면 좋을 것 같습이다!
[종류도 많고 코드도 길어서 유튜브 댓글로 모두 적기는 애매하네요 😂]
복습하면서, 마지막문제 다시 풀어보는데
output[number%3 -1].append(number)
이렇게 쓰면 좀 직관적으로 더 이해가 잘되지 않을까 싶은데
인성님 의견은 어떠신가요!?
독학으로 왠만큼 python 익혔지만 이 강의 들으면서 체계적으로 정리해가는 중인 1인입니다.
요번 확인문제는 저도 으잉?하면서 직접 타이핑해서 풀어봤네요ㅎㅎ
좋은 강의 감사합니다~ 중간중간 해주시는 잡담이 굉장히 와닿고 도움이 되네요^^
넘 나리 어려운 5번문제네요..
댓글 봐도 다 봐도 이해 안 되었는데.. 하나씩 뜯어보면서 억지로 이해하니 이해가 된듯합니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [[ ], [ ], [ ]]
output[a].append(b)
--> 이 의미가 output내 a번째 []칸에 숫자 b를 넣어라는 뜻인것 같고
그래서 3이상이 되면 range 에러로 %3 으로 조정하여 0
다음강의 코드 흐름으로 복습하자면
for number in numbers :
output[(number -1) % 3].append(number)
#3 1 >> 0, 1번쨰, 1넣시오 [[1],[],[]]
#4 2 >> 1, 2번쨰, 2넣시오 [[1],[2],[]]
#5 3 >> 2, 3번쨰, 3넣시오 [[1],[2],[3]]
#6 4 >> 0, 1번쨰, 4넣시오 [[1,4],[2],[3]]
#7 5 >> 1, 2번쨰, 5넣시오 [[1,4],[2,5],[3]]
#8 6 >> 2, 3번쨰, 6넣시오 [[1,4],[2,5],[3,6]]
#9 7 >> 0, 1번쨰, 7넣시오 [[1,4,7],[2,5],[3,6]]
#10 8 >> 1, 2번쨰, 8넣시오 [[1,4,7],[2,5,8],[3,6]]
#11 9 >> 2, 3번쨰, 9넣시오 [[1,4,7],[2,5,8],[3,6,9]]
연습문제 풀어보다가 4번, 5번 때문에 들어왔는데 동영상 강의 들으면서 보니 이해가 훨씬 쉽네요. 이해만 되는 게 문제고 나중에 다시 써보라고 하면 못 쓸 것 같지만 ㅠㅋㅋ 좋은 강의 정말 감사합니다 ^^
40대 중반..혼공파...쉽지 않네요!! 강의 내용은 무리없이 따라갔는데..확인 문제 5번에서..완전
멘붕!!! 다행히도...댓글에서 힌트를 얻어 해결하고 갑니다!! 감사합니다.
반복문+함수 부분이 제일 힘들다보니 @_@ ...!! 여기만 넘어가시면 나머지는 쉬울 것이라 생각합니다 @_@ ...!
서신영님 화이팅 입니다. 저도 늦은 나이에 맘 먹고 해보려는데, 맘만 앞서는것 깉다는 생각이.... 늘 화이팅 입니다.
저도 40대인데, 전 이해조차 못했어요. 오늘 하루종일 생각하고 있는데 배열 자리수 안의 숫자들이 %3을 주면 왜 append가 뒤에 붙는 위치가 제 생각대로의 숫자가 나오질 않네요. 뭔가 약간의 햇갈림에 이해안되는 원인 중 하나일텐데 그걸 못찾고 있네요.
3번 문제에서
for number in numbers:
if len(str(number)) = 3:
print("{}는 3 자리수입니다".format(number))
elif len(str(number)) = 2:
print("{}는 2 자리수입니다".format(number))
else:
print("{}는 1 자리수입니다".format(number))
이렇게 했는데 결과가 안나옵니다ㅠ 뭐가 잘못된건가요?
그리고 4번 문제에서 리스트 중첩을 하셨는데,
저는 이렇게 썼거든요.. 이것도 결과값이 동일한데 뭐가 다른 것인가요?
for element in list_of_list[0]:
print(element)
for element in list_of_list[1]:
print(element)
for element in list_of_list[2]:
print(element)
강의 매번 감사해요:)
일단 첫 번째는 조건 비교에 =를 사용했기 때문입니다. 조건 비교는 ==입니다![초기에 자주 하는 실수라 시험 등에 자주 나오는 문제입니다].
두 번째는 그렇게 하셔도 됩니다. 다만 중첩해서 쓰면, 코드가 간단하며, 요소의 수가 더 많은 리스트를 반복 돌릴 때도 별도의 코드 변경 없이 실행할 수 있습니다.
감사합니다! 그럼 첫번째는 ==으로 바꿔쓰면 복잡할 뿐이지 괜찮은거죠?
넵! 다만 3자리 이상의 숫자가 들어올 수도 있으므로, 최대한 범용적으로 쓸 수 있는 코드로 작성하는 것이 좋아서, 책의 형태를 더 추천합니다!
계속 책만 보고 진행하다가 답 봐도 이해가 안 돼서 영상을 찾아보게 되었는데 딱 제가 고민하고 있던 속마음을 얘기해 주네요.ㅎㅎ 중간중간 진지하게 "개소리"라 말하는 것도 웃기고요. ㅎㅎ 덕분에 재미있게 배워갑니다. 감사합니다.
안녕하세요 피라미드 문제 관련하여 코드를 작성해 보았는데요,
range라는 함수를 찾아서 사용하였는데, 일정범위구간을 array로 한번에 정의하는 다른 방법이 있는지 궁금합니다.
++ 더 코드의 효율을 높일 수 있는 방법이 있는지도 궁금합니다!
항상 좋은 강의 감사드립니다.
-------------------------------------------------------------------------------------------------------------
length=int(input("피라미드 높이를 입력해주세요"))
numbers=[]
for num in range(1,length+1):
numbers.append(num)
for number in numbers:
if number%2==0:
pass
else:
a=(length-int(number))//2
print(" "*a+"*"*number+" "*a)
지금 막 25강 영상을 보고 왔습니다! range 함수에 대해서 잘 알게 되어서 범위 구간 정하는 것에대해서는 이제 알 것 같습니다! 감사합니다 ㅎㅎ
피라미드 정도는 효율을 크게 높여도 높일 수 있는 부분이 거의 없어서 크게 신경쓰지 않으셔도 괜찮습니다 'ㅁ' ...! 방법이 워낙 다양해서 구글에서 찾아서 여러 사람들의 여러 방법들을 관찰하면서 "다른 사람은 이런 방법도 쓰는구나"를 느끼는게 더 좋을 것이라 생각합니다...!
@@윤인성 넵넵!! 빠르고 친절한 답변 감사합니다! 많은 도움이 되고 있습니다 ㅎㅎ
안녕하세요. 책과 강의를 보면서 열심히 공부하는 중입니다. 강의 마지막에 나온 피라미드를 만들어보고 싶어서 나름대로 코드를 짜 보았는데, 이런 방식이 맞는지 모르겠습니다.
# 피라미드 높이 입력하기
number = int(input("Select Line Number >>"))
# 피라미드 쌓기
for line in range(number):
blank = number - line
print(" " * blank, "*" * ((line * 2) -1), " " * blank)
이렇게 만드니까 피라미드가 만들어지긴 한데 혹시 더 간단한 방법이나 다른 정답이 있을까요?
실행만 되면 상관 없습니다.
다양한 방법 등은 구글에서 "파이썬 피라미드" 등으로 검색해보면 수 많은 사람들이 올린 예제가 나오므로 참고해보시기 바랍니다!
감사합니다. 선생님. 어떤 분이 표로 알려주셔서 생각보다 쉽게 매칭하면 된다는걸 알게 되었습니다.
number함수의 숫자 9개가 순서대로 2차원 배열함수인 output 배열에 9개의 number함수 인수마다의 나머지값을 구한다음 그 값들이 배열인덱스 위치인 [0][1][2]에서 [1][2][0]마다의 순서대로 number값들을 배열 인덱스 위치마다에 떨구어준 것이군요. 히야~ 알고나니 하룻동안 다른 원리로 파고 있었네요. 아햩햩햩햩햩햩햩, 모든 분들 덕분에 잘 해결할 수 있었습니다. 다시 한번 감사드립니다. 사실 RGPRGP님의 의견에 가장 꽂혔어요. 물론 그 마저도 몇 분 걸렸습니다 ㅠㅠ
23강에 선생님이 다시 설명해 놓으신거 읽고 output이 왜 0,1,2 여야 하는지 이해했습니다. 3으로 나눈 나머지 숫자이니까요. 그래서 1,2,0 으로 만들지 않으려면 number-1 해줘야 하는 것도 드디어 이해했습니다. 감사합니다.
이번 강의는 정말 몇번을 들어야 할것 같네요 ㅠㅠ
작가님 format 함수를 "{}안에 ()값을 하나씩 불러넣어줘"라고 이해하면 되는걸까요?
저는 아래와 같이 command를 만들었는데 이런식으로 할 경우에 작가님과 똑같이 결과값이 나옵니다만, 나중에 더 복잡한 command를 작성할 경우를 위해 format을 사용하는걸로 이해를 하면될까요?
for number in numbers:
if number % 2 == 1:
print(number,"는 홀수입니다.")
else:
print(number,"는 짝수입니다.")
for number in numbers:
print(number,"는", len(str(number)),"자리수입니다.")
넵 그렇게 이해하시면 됩니다.
결과가 그냥 원하는대로 나온다면 어떤 코드를 써도 큰 문제 없습니다.
책을 사고 처음 부터 지금까지 쭉 따라만 하고 있습니다. 프로그램에 프자도 모르는 사람인데 일단 그냥 쭉 따라만 하고 있습니다. 일단 한번 익숙하게끔 전체적으로 따라하고 그다음에 다시 처음부터는 이해하면서 처음부터 해보려 합니다. 좀 비효율적일까요?? 그리고 [ ] 에 ( ) 를 넣었는데도 실행하는데 차이점이 있을까요??
어떤 식을 해도 다 따라할 수만 있다면 효율은 크게 상관 없다고 생각합니다. []와 ()는 예시를 주셔야 조금 더 정확하게 답변드릴 수 있을 것 같습니다.
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
print(list_a.extend(list_a))
print(list_a.append(10))
print(list_a.insert(3,0))
print(list_a.remove(3))
print(list_a.pop(3))
print(list_a.clear())
라는 코드를 입력했는데 결과과
None
None
None
None
0
None
이렇게 나왔어요 왜 이렇게 나오는 건지 모르겠어요
어떻게 나와야 했다고 생각했는지 알려주실 수 있을까요? 모두 파괴적 함수라 리턴값이 아니라 본체[list_a]를 따로 출력하셔야 결과를 확인할 수 있습니다!
안녕하세요! 전에 강의를 들었던 학생입니다 ㅠ
제가 코드를 공부하면서 막힌부분이 있어 질문드립니다.
a = [1,2]
b = [2,3]
c = [5,6]
d = [6,7]
e = [9,10]
f = [14,15]
g = [22,23]
h = [ ]
t_list = [a,b,c,d,e,f,g] 처럼 있다고 하면
for문으로 range(len(t_list))을 이용해서
만약 b의 두 번째 요소와 c의 첫 번째요소가 같지 않다면
t_list에서 b와c사이에 h를 추가하여라 해서 이와 같은 맥락으로
t_list전체를 적용시키고
t_list = [a, b, h, c, d, h, f, h, g] 라고 만들고 싶은데
안됩니다 ㅜㅜ 도움을 주실 수 있으신가요?
설명이 무슨 의미인지 명확하게 모르겠습니다 @_@
다만 책 이외의 내용은 저도 본업이 있다보니 ;ㅁ; ...!
하나하나 답변하다보면 끝이 없어서 자제해주시는 것을 추천드립니다 ;ㅁ; ...!
교수님!! ㅎㅎ 피라미드 크기를 숫자로 받으면, 숫자피라미드를 만드는 코드까지 혼자 써봤어요!!
답은 아직 안찾아봐서 다른 사람들은 어떻게 쓰는지 모르겠지만.. 저는 지금은 이렇게 까지 썼어요.
a = int(input ("피라미드 크기? "))
b = list(range(1,a+1))
for c in b:
print(" "*(a-c), end="")
d= list(range(1, c))
d.extend(list(range(c, 0, -1)))
for e in d:
f=print(e, end="")
print()
1-21강까지 배운 내용을 총동원하고 range 라는것과 end 라는걸 네이버에서 추가로 정보를 얻어서
조합해서 만들어봤어요~! ㅋㅋ 근데 아직 문제는 10부터는 다시 한자리수 0으로 돌려서 만들어야 피라미드가 안깨지는데 ㅎㅎ 그건 아직 못했어요 ㅎㅎ 강의 이름은 혼자공부하는 파이썬인데, ㅋㅋ 교수님과 같이 공부하는 파이썬같아요~! :-)
이해가 잘 가게 알려주신 덕분에 ㅎㅎ 열심히 공부하며 따라가고 있습니다~ 오늘은 질문이 아니라, 감사를 표하려고 댓글을 남겨요! :) ㅎㅎ
(p.s : 얼른 10이상 피라미드 과제를 수행해내고 ㅋㅋ 22강 듣고싶어요! )
-------------------------------------------------------------------------------------
피라미드 크기? 9
1
121
12321
1234321
123454321
12345654321
1234567654321
123456787654321
12345678987654321
>> 댓글에서는 피라미드가 간격이 안맞아서 깨져보이지만, 파이썬에선 예쁘게 보여요 *'ㅁ'*
아앗 ;ㅁ; ...!! 굉장한 예제도 만들고 계시는군요 ;ㅁ; ...!! 멋집니다 ;ㅁ; ...!! 좋은 글 써주셔서 감사합니다...!!
@@윤인성 교수님~! 오늘은 어제 하던 피라미드 예제를, 피라미드 크기 19까지 출력하는 코드를 완성했어요~!
1-9까지와 10-19까지를 추가로 출력하는건 또 다른 문제더라고요.. 그래서 엄청 고민 많이 했는데,, 완성입니다!! ㅎㅎ
그런데, 이제 [20이상~무한대 숫자]을 출력하는건 19까지와 또 다른 문제인것 같아요.. 'ㅁ');;
숫자가 올라갔다가 내려갔다가를 하다보니까, 오르막 코딩을 생각하고, 내리막 코딩을 생각하는게 다르고,, ㅎㅎ
숫자의 범위에 따라서 생각해야하는 것들이 달라져서, 머리가 아프지만..
강의 마지막에, 한 문제를 놓고 일주일 이상씩 해석해보고 공부해보는게 그냥 맹목적으로 강의를 시청하는 것보다 중요하다고 하셨던 말을 기억하며, 열심히 도전하고 있어요!! ㅎㅎ
혼자하는 파이썬 공부다보니, 교수님께만 자랑할 수 있어서 오늘도 찾아왔어요 ㅎㅎ
그리고 오늘은 쓰다보니 40줄까지 길어진 코드를, 29줄로 줄여보기도 했어요! 굳이 케이스를 나누지 않았어도 되는데, 처음에 나눠놓아서 길게 늘어진 코드를 줄여보는 시간도 갖으며.. 이것도 공부가 되었겠다 싶더라고요!
코딩의 ㅋ 자도 모르는데, 늘 업무 마치고 코딩을 고민해보는 시간이 (고통스러우면서도...) 즐겁습니당 ㅎㅎ :-)
자꾸 늦게 자서 문제지만요 (;ㅁ;) 오늘도 코린이의 일과를 마치고 주저리 주저리 하다가 잡니당..
얼른 무한대숫자까지 입력을 받아도, 뚝딱 만들어내는 숫자피라미드를 완성하고, 22강을 보고싶네요!! ㅎㅎ 어서 교수님께 자랑할 수 있게 되기를.. 'ㅁ')>
일주일 전까지만 해도 아무것도 모르던 저를, 이제 검은 바탕을 도화지 삼아 열심히 무언가를 써보게 해주셔서 감사합니다! :) ㅎㅎ
Sumi lee 앗 제가 뭔가를 해드린 것보다 Sumi Lee 님이 엄청 열심히 하셔서 발전하시는 것 같아요 @_@...! 멋집니다 @_@ ...!!!
@@윤인성
a = int(input ("피라미드 크기? "))
b = list(range(1,a+1))
for c in b:
if c
댓글을 보다가 열심히 하시는 모습을 보고 삘 받아서 저도 짜봤습니다.
리스트내 문자열 합치기 함수인 join()함수를 이용하면 좀 더 간략하게 짜실수 있습니다.
h=int(input("피라미드의 높이를 입력하세요
2:58 p.213의 확인문제 1번의 첫번째 문제 질문이 있습니다. 직접 vscode에 타이핑해서 돌렸는데요, list_a를 정의한 후 바로 print(list_a.extend(list_a))를 하니까 None이라고 나옵니다. 그러니까 코드를 아래와 같이 작성했더니 결과가 None이라고 나왔습니다.
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
print(list_a.extend(list_a))
이렇게 말고 아래와 같이 작성했을 땐 원하는 답이 나오는데요, 같은 코드인 거 같은데 위 코드처럼 작성하면 왜 원하는대로 나오지 않나요? ㅠㅠ
list_a = [0, 1, 2, 3, 4, 5, 6, 7]
list_a.extend(list_a)
print(list_a)
extend() 등의 함수는 “파괴적 함수”로 만들어져서
아래 형태로 사용해야 합니다.
이건 “미국 사람들은 사과를 apple이라고 한다. 이유는 모르겠지만 그렇게 만들어졌다” 같은 느낌이라
외우셔야 합니다!
Ps. 이후에 가시면 똑같은 기능인데
비파괴적으로 구현된 경우도 있고 해서
지금 위처럼 입력해서 코드 실행 이상하면,
“파괴적인건가? 바꿔보자"하며 아래로 변경해보며 확인해보는 유연함이 좀 필요합니다!
참고로 현재 파이썬 강의는 개정판 강의가 2배 더 길게 자세하게 완강되어 있으므로,
개정판 강의를 참고하며 진행해보시는걸 추천드립니다!
와ㅜㅠㅜㅠㅜㅠㅠㅜㅠ진짜 한 20분동안 뭔말인지 모르고 계속 헤메다가 갑자기 뙇 이해했어요! 그러니까 output[] 에서 대괄호 안에 있는 숫자가 자릿수를 나타내는 거면 설명이 되는건데..제가 바르게 이해한 거 맞겠죠..?ㅎㅎ
인덱스(리스트에서 요소의 위치)[아마 이걸 자릿수라고 표현하신 것 같습니다!]를 넣는 것입니다!
아하 감사합니당ㅎㅎ!
항상 강의 잘 보고 있습니다. 그런데 마지막 확인문제 5번에서 책에 나온 코딩에 output[(number - 1) % 3].append(number)를 입력했는데 결과값이 이렇게 나왔습니다.
[[1], [], []]
[[1], [2], []]
[[1], [2], [3]]
[[1, 4], [2], [3]]
[[1, 4], [2, 5], [3]]
[[1, 4], [2, 5], [3, 6]]
[[1, 4, 7], [2, 5], [3, 6]]
[[1, 4, 7], [2, 5, 8], [3, 6]]
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
코딩은
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [[], [], []]
for number in numbers :
output[(number - 1) % 3].append(number)
print(output)
이렇게 했습니다. 뭐가 잘못된걸까요..?
앗 댓글을 늦게 보았군요. print(output)을 들여쓰기 하나 해주셔서 여러개 출력된 것입니다. 들여쓰기를 하나 제거해주시면 됩니다...!
print(output) 위의 공백을 제거 해보세요
output[(number - 1) % 3].append(number)
print(output)
좋은 하루 되세요^^
@@윤인성 혹시 print(out) 이 for 문에 포함되버려서 여러번 출력되는건가요 ?
honey bear 넵 그렇습니다....!
@@윤인성 감사합니다..! 그럼 질문 하나만 더 하겠습니다. 지금 제가 공부하고 있는 방법이 일단 강좌를 먼저 보고 해당 파트 책에 있는 부분 전부 코딩해보고 해석해보고 확인문제 다시 풀어보고 막히면 다시 강좌보고 이런식으로 하고있는데 .. 더 나은 방법이 있는지 알고싶습니다.
안녕하세요, 강의 잘듣고 있습니다!
number나 element 같은 것들은 키워드가 아니라 그냥 a,b 처럼 임의로 쓰는 단어일 뿐인가요?
넵 그렇습니다!
[질문] p159 확인문제 5
output[number%3].append(number) 에서 output[number%3]은 output [[],[],[]] 의 대괄호 안의 "나머지" 번째의 괄호를 소환하고 append(number)는 소환된 괄호안에 숫자를 반복해서 채우라는 의미인 거 같습니다. 맞는지요?
여기서 이해가 가지 않는 것은 교재 146쪽에 append 함수는 리스트 맨뒤에 요소 추가하는 것이라는데 어떻게 []안으로 들어가는지요?
[[],3,6,9],[],1,4,7,[]2,5,8] 출력되어야 하는 건 아닌가요? 정말 프로그래밍 언어를 처음 접해보는 거라 설명에 주셨어도 그냥 지나쳤을 수도 있습니다만..
output.append(10)를 하면, [[],[],[],10]처럼 뒤에 추가됩니다.
하지만 output[0].append(10)을 했으므로,
output 내부에 있는 0번째 리스트에 10을 추가합니다.
따라서 [[10],[],[]]이 됩니다!
40대 임대업자는 오늘 연습문제 5번에서 파이썬을 접습니다..우선,[1,4,7]이 -1%3 했을때 나머지가 0 인 순자들의 모임이라는것, 같은원리로 [2,5,8]이 나머지가 1인애들의 모임 이라는것, [3,6,9]가 나머지가2인 애들의 모임이라는것이라고 이해했습니다.(이것도 맞을란지..) 여기서 append(number)가 뭔역할을 하는지를 모르겠습니다. append는 원래 마지막에 추가해주라 는것 아니었나요? output안의 [ ]에 numbers안에 있는 숫자들을 (number-1)%3 해서 차례대로 넣으라는 명령인가요? 대환장파티입니다. ㅎㅎ 선생님도 저같은사람에게 어디서 부터 어떻게 설명해야 할까 싶습니다만..도와주십쇼..
넵 앞의 부분은 다 맞습니다.
『리스트.append(number)』는 리스트 뒤에 number를 추가하라는 의미입니다!
1. 처음에 output = [[], [], []]를 선언했습니다.
2. output은 리스트의 리스트이므로
- output[0]도 리스트
- output[1]도 리스트
- output[2]도 리스트
입니다.
3. output[number % 3]을 하면 number % 3이 계산되면서
output[0], output[1], output[3]을 구합니다.
4. 따라서
- output[1].append(1) # output = [[],[1],[]]
- output[2].append(2) # output = [[],[1],[2]]
- output[0].append(3) # output = [[3],[1],[2]]
- output[1].append(4) # output = [[3],[1, 4],[2]]
- output[2].append(5) # output = [[3],[1, 4],[2, 5]]
등이 됩니다.
5. 코드에서는 output[(number - 1) % 3]을 합니다. 따라서
- number가 1일 때는 (1 - 1 % 3) => 0 % 3 => 0
- number가 2일 때는 (2 - 1 % 3) => 1 % 3 => 1
하며 위와 같은 식으로 이루어집니다.
완전히 다른 분야에 있다가 하시면
처음에 버벅이는 것은 어쩔 수 없는 부분이라고 생각합니다.
처음 아이에게 덧셈 등을 알려줄 때도
1. 아예 수 체계도 제대로 안 잡혀 있어서 손가락으로 세면서 하는데
2. 손가락으로 세는데도 다른 숫자를 말하고
3. 거기에 덧셈 뺄셈까지 하면
= 어른(부모님)의 입장에서는 자신의 아이가 잘 이해되지 않는 상황이 발생합니다.
어른이 되어서 새로운 영역을 공부할 때는
"어른(나)의 입장에서 스스로가 잘 이해되지 않는 상황"이 동시에 발생할 수 밖에 없다고 생각합니다.
그래서 스스로가 공부하면서 스스로 답답해질 수 밖에 없습니다.
악기를 처음 배울 때
어릴 때 배우면 어떻게든 재미있게 배우지만
어른이 되어서 배우면 "아니 나는 손가락이 뭐 이것도 안 움직이냐"하는 생각에
스스로 답답해져서 빨리 포기하게 됩니다.
그림을 처음 배울 때도
어릴 때 배우면 어떻게든 아무거나 그리지만
어른이 되어서 배우면 "아니 나는 이거 뭐 이렇게 밖에 못 그리냐"하는 생각에
스스로 답답해져서 빨리 포기하게 됩니다.
개발도 어쩔 수 없이 똑같다고 생각합니다.
어른이 되서 배우면 """아니 이거 뭐 다들 빨리빨리
어떻게 하는 것 같은데 나는 이렇게 이해도 안 되냐"""라는 생각이 들 수 밖에 없습니다.
PS. 모르는 부분이 발생한다면 물어봐주세요!
어른이 되면 "이것정도는 혼자서 해야할 것 같은데"하는 발상이 생기는데
누군가가 풀어주는 것이 훨씬 빠릅니다!
대학교에서도 처음 프로그래밍을 하러 온 학생은
처음 C 언어 등의 프로그래밍 언어를 배우고
1~2년이 되어도 "나는 누구인가 나는 무엇을 하고 있는가"라는 생각을 계속 합니다.
해결은 시간이 해준다고 생각합니다.
처음에 한 번에 몰아쳐서 한다고 생각하면
뇌도 "아니 갑자기 이게 뭔데 하라는거야?"라며 반발을 일으키지만
계속해서 생각하다보면 뇌도 어느 순간 영역을 받아들이게 됩니다.
그래서 조급하게 생각하시기보다는
느긋느긋하게 보시는 것을 추천드립니다!
해당 책은 대학교 1년 정도의 과정이며
실제로 사실 대학교 2학년도
이전에 프로그래밍을 했던 학생이 아니면
알고리즘 문제[현재 책에 나오는 문제 정도]도 제대로 못 풉니다.
PS. 책은 그냥 이후에도 머리에서 고민하면서 떠올려볼 수 있게 넣은 것입니다.
따라서 조급하게 생각하지 마시고
느긋느긋하게 생각하시는 것을 추천합니다!
항상 뭔가 새로 배울 때는 처음에 "아 내가 이거 안되는거 아닌가?"라는 생각을 계속 마주하게 되는데
그걸 계속 반복하면서 어떻게든 하다보면
어느 순간 돌파되는 것처럼[물론 또 이후에 영역을 계속 공부하면서 반복되는 발상이지만]
어느 순간부터 이해되실거라 생각합니다.
"우리 아이가 숫자도 제대로 못 세고, 덧셈도 못하고 좀 이상한거 아닌가"하다가도
어느 순간 숫자도 세고, 덧셈도 하고, 구구단도 외우고 수학 문제를 풀어나가는 것처럼요!
@@윤인성 감사합니다. 여전히 온전히 이해하진 못했지만 어느정도 짐작할 정도는 된듯합니다.
문제 5번이 이해가 도저히 되지 않아 비슷한 코드로 다른 결과를 출력해보았습니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
output = [ [], [],[], [] ]
for number in reversed(numbers):
output[number > 3].append(number)
print(output)
이런 코드를 입력하니 아래와 같이 출력되었습니다
[[], [9], [], []]
[[], [9, 8], [], []]
[[], [9, 8, 7], [], []]
[[], [9, 8, 7, 6], [], []]
[[], [9, 8, 7, 6, 5], [], []]
[[], [9, 8, 7, 6, 5, 4], [], []]
[[3], [9, 8, 7, 6, 5, 4], [], []]
[[3, 2], [9, 8, 7, 6, 5, 4], [], []]
[[3, 2, 1], [9, 8, 7, 6, 5, 4], [], []]
9가 왜 0번째 리스트가 아닌 1번째 리스트로 들어가는지 알 수 있나요
output[number > 3]에서 number > 3은 숫자를 만드는 코드가 아니라, 불(True 또는 False)를 만드는 코드입니다. 현재 실행 결과에서 결과가 0번째와 1번째에 들어가는 이유는 True는 숫자로 변환했을 때 1로 변환되고, False는 0으로 변환되기 때문입니다. 즉 number > 3이 True인 녀석들은 전부 True로 나오고 1로 변환되어 1번째로 들어가고, number
감사합니다 질문에 대한 이해가 완료되었습니다 그리고 추가질문 좀 드리겠습니다
일단 number % 3 할 시 값이 0 1 2 3 이 나올 수 있다고 하셨는데 0 1 2 만 나오지 않나요
그리고 이제
list=[ [], [], []]
number= [1, 2, 3, 4, 5, 6, 7, 8, 9]
list[number%3].append(number)
에서 list속 빈 []에 append를 할 때는 index 개념처럼 예를 들어 number=4을 append 했다고 하면 number % 3의 값이 1이니까 list 속 []중
1번째에 있는 리스트에 append가 되어
list = [ [], [4], []] 이렇게 이해 하였습니다 제가 이해한 이 개념이 맞는 지 알 수 있나요?
최주원 앗 실수했군요 012가 나옵니다 'ㅁ' ...! 그리고 지금 이해하신게 맞습니다...!
안녕하세요 선생님
질문 1. remove 함수는 해당 값을 list에서 제거하는 함수 잖아요? 이 때,
a = [1, 3, 3, 5, 7, 7, 9]
for b in a:
if b > 2:
a.remove(b)
print(a)
제 생각으로는 list a의 각 요소 중 2보다 큰 수들만 제거되어 a = [1]로 출력될 것 같아서 이렇게 쓰고 돌려봤는데,
a = [1, 3, 7, 9]라고 출력이 됐습니다.
왜 이런 결과가 나왔을까요?
-----
질문2. 영상 마무리에 언급하신 피라미드 문제는 현재 강의 내용까지만으로 풀 수 있는 문제인가요?
c = [1, 2, 3, 4 ,5]
for d in c:
print((" " * (5 - d)) + ("*" * ((2 * d) - 1)))
저는 편법으로 이렇게 써봤는데요 ㅋㅋㅋ 그런데 이러면 반복되는 횟수와 *기호 숫자 등을 자동으로 확장시킬 수가 없으니까요.
입력받는 숫자 크기로 리스트를 만들게 하면 피라미드 크기 마음대로 할 수 있을 것 같은데, 어떻게 리스트에 0~입력숫자 순서대로 들어가게 할 수 있을지 아직 모르겠네요 :(
for 반복문을 이용하면 list는 요소 숫자만큼의 반복시행을 할 수 있는데,
이 요소 숫자 이상 혹은 설정한 횟수만큼 반복문을 돌릴 수도 있을까요?
또, int로도 for 반복문을 쓸 수 있나요?
바로 다음 장에 range가 나와서 일단 저는
---
f = []
num = int(input("몇 줄?> "))
for elements in range(num):
f.append(elements + 1)
for ln in f:
print((" " * (num - ln)) + ("*" * ((2 * ln) - 1)))
---
이런식으로 입력한 숫자의 층 수 만큼 출력되는 피라미드를 만들어 봤습니다 :)
그런데 아직 질문1.에서 위 코드가 왜 안되는지는 아직 잘 모르겠어요 :(
더 생각해 보겠습니다.
질문 1의 경우
리스트 요소 제거는 역 반복문을 돌려서 해야 합니다.
그냥 돌리게 되면 리스트의 요소가 제거되었을 때,
인덱스를 앞으로 당기게되면서 생략하고 넘어가는 부분이 발생하기 때문에 그런 문제가 생기게 됩니다.
질문 2의 경우는
추가로 구글에서 “파이썬 피라미드”등으로 한 번 검색해서 살펴보시기 바랍니다.
지금 푸신 형태도 답은 나오지만
피라미드가 반복문을 중첩으로 쓰는 기본 예제라서
초급 단계에서 발상하기 굉장히 어렵지만,
이해하고 나면 꽤 도움이 됩니다.
@@윤인성 감사합니다.
혹시 오른쪽부터 지워서 요소 순서가 엉켜서 안되나 싶었는데 지우는건 왼쪽부터 잘 지우더라구요.
역 반복문으로 해보니 되는데, 이건 역으로 돌려서 조건문 대입하고, 요소 제거는 원래 순서로 진행하니 인덱스가 꼬이지 않아서 그런건가요?
그러면 반대로, 조건을 정방향으로 집어넣고, 요소제거를 역방향으로 넣어도 될 것 같았는데,
---
for b in a :
if b > 5:
reversed(a).remove(b)
---
AttributeError: 'list_reverseiterator' object has no attribute 'remove'
위와 같은 에러가 나네요. reversed() 이렇게 하면 될 것 같은데 안되는 경우가 많다고 했는데 이런 경우 같아요 ㅜㅜ
@@EliteKBS 앗 역반복문은 다음과 같이 해주셔야 합니다.
a = [1, 3, 3, 5, 7, 7, 9]
for b in reversed(a):
if b > 2:
a.remove(b)
print(a)
@@윤인성 감사합니다! :)
안녕하세요 강의 잘 보고 있습니다
확인문제 5번에서
output[number % 3].append(number)를
output의 number % 3 번째의 요소에 number를 추가해라 라는 의미로 해석해도 되나요?
넵!
확인 1에서요
list_a = [1,2 ,3] 이라 지정하고 list_a.extend(list_a)라고 입력해보면 아무런 결과 값이 없습니다.
혹시나 해서 print(list_a.extend(list_a)) 해놨는데 None이라고 뜨고요..
[1, 2, ,3 ,1, 2 , 3]이 나올 줄 알았는데 안 나오는 이유가 따로 있나요 ?
파괴적 함수이므로 list_a를 출력해서 값을 확인하셔야 합니다!
안녕하세요 해보다 이건 안되나? 싶은 게 있어서 질문 드립니다.
리스트의 요소의 갯수를 len()함수를 이용하여 구할 수 있는데요,
a = [1, 11, 111, 1111, 11111]
b = len(a[3])
print(b)
를 한다면 a의 3번째는 1111이므로 출력값은 4가 나와야 한다고 생각하는데 len함수로 이거는 못하는 건가요 ?
len 함수는 문자열과 리스트 등에 적용할 수 있습니다. 숫자에는 적용이 안 됩니다. 자릿수를 구하고 싶으시면 문자열로 바꾼 뒤에 → 검사하셔야 합니다.
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]output = [[], [], [],]
for number in numbers : output[(number -1 ) %3 ].append(number)
print(output)이 문제 생각을 해봤습니다 % 1때는 numbers 그대로 1, 2, 3, 4, 5, 6, 7, 8, 9가 실행되고% 2때는 2자리수씩 밀려서 1, 3, 5, 7, 9, 2, 4, 6, 8% 3때는 3자리수씩 밀려서 1 4 7, 2 5 8, 3 6 9가 출력되는게 맞는건가요?
N%1을 하면 무조건 0이 나오므로, 0번째에 모두 꼽히고(예를 들어 3%1는 나머지 0)
N%2는 무조건 0 또는 1이 나오므로, 0번째 또는 1번째에 꼽히며,
N%3은 무조건 0, 1, 2가 나오므로 0번째 또는 1번째 또는 3번째에 꼽힙니다. 생각이 들었으면 실제로 돌려서 직접 눈으로 확인해보시는 것을 추천드립니다...!
항상 잘 보고 있습니다. 저는 아래코드에 2가지 질문이 있습니다.
1. output변수에 [[],[],[]]는 리스트안 리스트가 3개인데 코드 중간에는 output(number-1)%3]이라고 하니
output안에는 3개의 값이 필요한데... 이런 생각도 들고 그래서 배운대로 생각을 적어보면
number = 1일때
아래 for 문대로라면 output[(1-1)%3].append(1)이라고 생각해요.
그런데 output을 프린트 하려고 하니 "[]"가 3개인데.... output[0].append(1)을 어떻게 print하지?
생각이 복잡해집니다.. 답변 부탁드려요.
for number in numbers:
output[(number-1)%3].append(number)
print(output)
어떤 것을 출력하고 싶어 하시는지 정확하게는 모르겠는데,
어떤 현상이 일어났어도, 현상만으로는 무슨 일이 일어난 것인지 정확하게 관측할 수는 없는 경우가 있습니다.
- 예를 들어서 지진이 났을 때 이게 어디에서 어떻게 일어났는지를 지진이 일어났다는 사실만으로는 알 수 없습니다.
그러한 때는 현상과 동반되는 다른 지표들을 사용해서 관측하게 되는데요.
- 예를 들어서 지진이 나면 S파와 P파의 시간차를 이용해 어느 정도 거리에서 발생했는지 확인할 수 있고
- 여러 지역의 정보를 취합해서 정확하게 어디에서 지진이 어느 깊이에 어느 정도 규모로 일어났는지 예측합니다.
현재 질문에서도 "output[0].append(1)을 어떻게 출력하지?"라면
프로그래밍은 이걸 그냥 관측할 수는 없습니다. 그리고 지진처럼 "발생했다" 이외의 정보를 이것만으로는 알 수 없습니다.
따라서
- 여기에 사용된 아이들 output, number
- 더 자세히 보면 (number - 1) % 3 등을
관측해서
print("output:", output)
print("number:", number)
print("(number - 1) % 3:", (number - 1) % 3)
를 원하시는 위치에 넣어 출력하시면
어떤 현상이 일어나는 것인지 확실하게 관측하실 수 있을 것이라 생각합니다 'ㅁ' ...!
어쨋거나 설명 정말 잘 하시네요. 학교에서 답답했던 부분이 여기서 뚫리네요.
안녕하세요? 강의 잘 설명해 주셔서 잘 듣고 있습니다! 4번 문제에서 for a in_list_of_list와 for b in a에서 a와 b는 임의로 넣은 값이라고 보면 될까요? for 뒤에는 반복자를 넣으라고 하셨는데 a와 b가 반복자인지요?
넵 a와 b가 반복자(반복 변수)이며, 원하는 이름으로 넣어주시면 됩니다...!
선생님 안녕하세요 교재 179쪽 질문있습니다
array = [273, 32, 103, 57, 52]
for i in range(len(array)):
print("{}번째 반복: {}".format(i, array[i]))
에서
왜 'array'로 리스트를 불러오지 않고 'range(len(array))' 이렇게 불러오는 건가요? + (범위(문자의 길이( array))
인덱스를 추출하기 위해서 range(len())을 활용했습니다![파이썬은 단순하게 for element in array할 때 인덱스를 알아낼 수 없습니다]
이 이외에도 이후에 enumerate를 사용하는 방법 등등으로 인덱스를 추출할 수 있습니다!
강의 수강하면서 잘 따라하고 있었는데 갑자기 파일을 불러오려고 python ex01.py 이런 식으로 입력을 하니까 파일을 찾을 수 없다고 에러만 자꾸 뜨네요.. 이런 경우에는 어떻게 해야 하나요 ..ㅠㅠ?
어떤 오류가 뜨는지 알려주실 수 있을까요!
can’t find file 이라는 말만 자꾸 뜹니다 ㅠㅠ!
@@hayan-yan 파일이 현재 폴더에 없어서 그렇습니다. 앞쪽의 강의를 다시보면서 폴더 열기로 폴더를 열고, 그곳에 파일을 만들어서 진행해보시기 바랍니다!
반복문을 접하면서 데이터 양이 많아지면 어떻게 될지 의문이 들다보니, 한 가지 질문이 떠오르는데요...(강의랑 조금 무관합니다...)
나중에 텐서플로우로 머신러닝을 다룰 수 있길 바라는 1인인데, 추후 데이터 양이 많아지면 일반 노트북 사용으로는 힘들지, 그리고 텐서플로우를 포함한 머신러닝/딥러닝을 다룰 때 어떤 OS(윈도우 / mac) 가 쓰기 편한지 궁금합니다.
데이터 양이 많아지면 어떤 노트북으로도 진행이 불가능해집니다.
일반적으로 노트북에서는 데이터 일부만을 갖고 진행하고
+ 클라우드 서비스로 넘겨서 그쪽에서 진행합니다
= 클라우드 서비스를 활용하면 소유하고 있는 컴퓨터는 큰 의미가 없어서 윈도우와 맥 아무 것이나 써도 상관이 없습니다.
@@윤인성 친절한 답변 감사합니다.
for문에서
for 키 변수 in 딕셔너리:
코드
이런식으로 사용을 하잖아요? 이때 키 변수는 제가 임의로 아무문자열로나 잡아줄 수 있는거구요..
그런데 이때 키 변수를 어떤 식으로 컴퓨터가 인식하는지 궁금합니다.
딕셔너리일때는 앞에서부터 키와 값에 차근차근 접근하는 것 같고,
리스트일때는 앞에서부터 요소에 차례대로 접근하는 것 같고 그런데
이게 컴퓨터가 어떻게 인식을 하길래 순서대로 인식이 되는 건지 모르겠습니다.
만약 0,1,2,3,4,...이렇게 인식을 한다면,
딕셔너리는 값을 가져올때
딕셔너리명[키]
이렇게 입력해주어야 하므로 숫자로는 저렇게 차례대로 접근하지 못할 것 같은데..
답변해주시면 감사드리겠습니다!
3.7버전 이전의 딕셔너리는 순서를 전혀 보장하지 않았습니다(일반적으로 어떤 값으로 순서 없이 키로 뭔가를 찾는 자료형을 해시, 해시맵 등으로 부르는데, 대부분의 프로그래밍 언어는 이 순서를 보장하지 않습니다).
하지만 3.7버전부터는 "넣은 순서"대로 들어가게 되었습니다. 다만 딕셔너리에 어떤 값을 넣었다면, 이는 "순서가 상관 없는 것"이므로 순서에 얽매이지 않게 만드는 것이 좋습니다(프로그램들끼리 커뮤니케이션을 거치는 과정에서 순서가 훼손될 가능성이 있습니다).
만약 순서가 중요하다면 리스트를 사용하는 것이 좋습니다.
@@윤인성 감사합니다!
안녕하세요 혼공파 책보고 잘 공부하고 있습니다.
반복문이 잘 이해가 안돼서 영상으로는 처음 봤는데 비주얼 스튜디오 쓰는 것은 처음봤네요
밑에 터미널이 되게 편해보여서 저도 이용해보려고 했는데 왜그러는지 쓸때마다 계속 오류가 납니다 ㅠㅠ IDLE에서는 잘 되는데 말이죠
혹시 저렇게 세팅하려면 어떻게 하는지 알려줄 수 있으신가요?
어떤 오류가 발생하는지 알려주실 수 있을까요!
Traceback (most recent call last):
File "C:\Users\PC_1M\qw.py", line 1, in
asd
NameError: name 'asd' is not defined
간단한 프린트로 해도 이렇게 뜨네요
저 폴더 관련된 게 문제 같기도 한데 저는 cd.. 해도 PS C:\> 이게 계속 남아있네요
선생님처럼 ~ 표시만 떠야되는거죠?
@@박영웅-s4p 앞에 c:\>가 정상입니다! 강의에서 저는 macOS에서 zsh라는 셸을 설정해서 쓰고 있어서, 조금 특이하게 뜨는 것입니다.
현재 코드를 보면 실행은 정상적으로 된 것으로 보입니다. 내부에서 print(asd)라고 하신 것 같은데, asd라는 변수가 없으므로 오류가 뜨는 것입니다.
print("asd") 등으로 변경해보세요!
아 프린트 오류는 단순 제 실수인데 잘못올렸네요
for 반복문이 오류가 떠서 댓글을 썼는데 Shift F5 가 아니라 실행버튼 누르니까 되더라구요
빠른 답변 감사합니다!
나중에 가면 터미널에 명령어를 입력해서 코드를 실행해야 하는 상황이 많아서
개인적으로 스크립트 언어 계열은
개발 도구에 붙어있는 실행 버튼보다는
명령어를 입력해서 실행해서 익숙해지는 것을 추천합니다!
예를 들어
- 인공지능 모델 구축은 개인 컴퓨터에서는 너무 오래 걸리고
- 웹 서버를 만들 경우에도 개인 컴퓨터에서 실행할 수는 없어서
클라우드를 통해 좋은 컴퓨터를 원격으로 대여 받고
여기에 프로그램을 넘기고 실행하는 경우가 많은데
이때는 명령어를 쓸 수 밖에 없습니다!
안녕하세요 output 이라는 함수가 잘 이해가 안갑니다. 그리고 output[(number -1) %3].append(number)에서 %3은 012 순서를 돌려 한 대괄호 안에 3개의 숫자를 집어 넣게 하는 거고 number -1은 끝에서 부터 숫 자를 채우너 넣을려고 설정 한건가요?
넵 "원하는 순서대로 차근차근 넣으려고", 두 가지를 했다라고 생각해주시면 될 것 같습니다...!
9:08 문제에서 for list in list_of_list:
for i in list:
print("{}".format(i))
이렇게 짜도 상관없을까요? 결과값은 똑같이 나오더라구요,,
넵 식별자 이름만 다른 것이므로 같은 코드입니다!
5번문제...하,,,,
드이어 이해 했습니다. 댓글보고 이해 했네요.. 혼자 꼭 풀어봐야지 하면서, 복습하면서 다시 강의봤는데..
아무 생각없이 댓글 보다가.. 어?? 아아!!!!!!!!!!!!!!!!! 이러고 답을 찾았네요.
한가지 걱정이 있는데.. 직장다니면서 공부를 하다보니 아무래도 시간이 많지가 않더라구요.. 일단은 복습 많이 하면서, 예제문제를 계속 풀어보면서 익숙해지려고 하는데
분명이 직접 풀었던 문제인데.. 다시 보면 까막눈이 되어버려서...책 앞에 뒤져보고... 한참 생각하다가 다시 푸는경우가 많은데요
반복만이 살길인가요??ㅜㅜ
모든 공부가 런닝 머신 위를 뛰는 것과 같아서, 안 하면 계속 뒤로 밀리므로, 개발도 그냥 계속해서 공부해야 합니다. 이미 풀은 내용을 계속 반복해서 보는건 큰 의미는 없가고 생각해서, 계속 앞으로 나아가며 관련된 내용을 스치듯이 마주하는 것을 추천합니다[이 채널 최신 영상 중에 "이거 끝나면 뭐하지" 등을 참고해보세요!]
안녕하세요! 항상 강의 잘 보고 있습니다.
len(str(number))를 구해서 자릿수를 구할 때, len(number)로 쓰면 안되는 이유가 숫자들을 문자로 바꿔서 문자의 자릿수를 세기 위해선가요? len(number)로는 파이썬에서 구할 수 없나봐요?..
len은 반복 가능한 녀석들(문자열, 리스트)에만 적용할 수 있습니다. 그래서 문자열로 바꾼 뒤 세는 것입니다.
@@윤인성 감사합니다! 이것말고도 반복문은 바로 이해 안가는게 많네요ㅠ 많은 복습 후 계속 강의 듣겠습니다!
holzzak = ["짝수", "홀수"]
for number in numbers:
print("{}는 {}입니다.".format(number, holzzak[number % 2]))
여기서 numbers에 있는 숫자들을 하나씩 비교해서 %2를했을때 짝수로 판명되는건 holzzak의 첫번째인 짝수가되고 그렇지않은것은 홀수라고 표시되는건가요?
어떤원리로 이렇게되는지 원리를 잘 모르겠어서요
숫자 % 2를 하면
- 결과 0 - 나머지가 0인 경우 = holzzak[0] => 짝수
- 결과 1 - 나머지가 1인 경우 = holzzak[1] => 홀수
이 되는 것입니다.
159페이지 5번 문제가 처음으로 몇번 생각해도 잘 이해가 안가는데요. 결국 핵심 부분인 output[number%3].append(number) 문장에서 output[1].append(1), output[2].append(2)......output[0].append(9) 까지 갈텐데요. 예제 앞의 본문내용에서는 리스트 전체에 append를 붙이는 형태(리스트.append함수)만 나오고 여기 5번문제에서와 같이 인덱싱[ ]이 들어가는, 즉, 리스트[ ].append함수 형태는 없었는데요. 그간 배운 규칙으로 생각해 보면 output[1].append(1)은 5번문제에서 정의된 output함수의 1자리 즉, 두번째 [ ]에 1을 append 하면서 ===> [ [ ], 1 ] 이런 형태 값이 되는 걸까요?
리스트[].append()이라고 특이한 형태로 생각하지 마시고 그냥 리스트.append()로 생각해주세요. 현재 코드에서 output[1]이 그냥 리스트일 뿐입니다.
@@윤인성 100% fully 이해는 아니지만, 말씀하신대로 output[1] 자체를 그냥 리스트라고 하면 답이 풀리네요. 일단은 이렇게 외우고 해야할것 같습니다. 감사합니다!
4-1 3번 문제
for number in numbers :
output[(number-1)%3].append(number)
print(output)
=> output 리스트에 0번째 요소에 1,4,7 1번째 요소에 2,5,8 2번째 요소에 3,6,9가 들어가는 것으로 이해했는데요
a = [[],[],[]]
b = a[0].append(10)
print(b)
이렇게 출력한 결과는 None이 나옵니다. 제가 3번문제를 제대로 이해한게 맞는지 궁금합니다.
앗 어떤 결과를 원하셨던 것인지 자세하게 이야기 해주실 수 있을까요? 현재 코드의 경우 append() 함수는 파괴적 함수이며 실행 결과로 내는 것이 없어서 b에는 아무 것도 들어가지 않아 None이 나오는 것입니다.
@@윤인성 답글 감사합니다.
저는 3번 문제와 같이 0번째 요소에 10이 들어가는 것으로 b의 출력 결과가 [[10],[],[]] 이렇게 나오는 줄 알았습니다..
@@희맹 파괴적 함수라서 print(a)로 a를 확인해야 결과를 알 수 있습니다...!
@@윤인성 ㅇㅏ 그렇네요..!! 감사합니다 ㅎㅎ 인강 잘 듣고 있습니다 ㅎㅎ!!
안녕하세요 159page 4번 연습문제를 풀기위해서 이것 저것 코딩을 하던 중 궁금한게 있어서
여쭈어 봅니다.
for element in list_of_list:
for element_detail in list_of_list:
print(element)
제가 이해 하기로는 element에 [1,2,3] , [4,5,6,7] , [8,9]이렇게 하나 하나 씩 저장이 되는 걸로
알고 있습니다. 그런데 element_detail에는 아무것도 들어있지 않습니다. 그런데 어떻게 그리고 왜 각 리스트의
요소 들이 3번씩 반복이 되어서 출력이 되는지 궁금합니다.
[1, 2, 3]
[1, 2, 3]
[1, 2, 3]
[4, 5, 6, 7]
[4, 5, 6, 7]
[4, 5, 6, 7]
[8, 9]
[8, 9]
[8, 9]
박찬호 반복문은 요소의 개수 만큼 반복을 돕니다. list_of_list의 요소 개수가 3개 이므로
바깥의 반복문이 3번 * 안의 반복문이 3번 돕니다. 코드는 작성한대로 실행될 뿐이며, 현재 element_detail에는 아무 것도 없는게 아니라, list_of_list의 요소가 들어갑니다[위의 반목문과 똑같이 입력했으므로, 똑같은 형태로 반복됩니다].
반복 변수를 print(element, element_detail)로 두 개 모두 출력해보시면 더 쉽게 이해하실 수 있을 것 같습니다.
안녕하세요~ 강의내용에는 없지만 for문 관련해서 질문좀 드려도 될까요?
for문으로 반복할때 반복마다 생기는 결과를 각각 다른 변수로 저장하고싶은데 그렇게는 못하는건가요? 아님 방법이 있나요?
예를들면
for문으로 10번 반복할때
a0 = 첫번째 반복에서 나온 결과값
a1 = 두번째 반복에서 나온 결과값
.....
a9 = 열번째 반복에서 나온 결과값
이렇게 저장할수 있나요?
배열을 활용하시면 됩니다...! 배열의 i번째에 저장하면 됩니다.
예시로 보여드리겠습니다.
a=[1,2,3,4,5,6,7,8,9,10]
for i in range(0,len(a)):
globals()['a_{}'.format(i)]=a[i]
print(a_0,a_1,a_2)
이런식으로 짜시면 결과가 1 2 3 나옵니다. 즉, 각 변수마다 값이 할당 되었음을 알 수 있습니다.
키워드는 동적 변수생성 으로 알면 도움 되실듯 합니다.
질문하나 하겠습니다.
c언어나 c++을 할때, 프로세스 단위로 돌리게 되면 변수안의 데이터들이 변화는 과정을 볼 수가 있는데, 파이썬에는 그런기능 즉, 비주얼 코드 개발환경에는 그런 기능이 없는건가요..? 함수의 기능이 제대로 머릿속에 박혀있지 않은 문제도 있겠지만, 과정을 알게되면 이해가 빠른데 인터렉티브셀이나 비주얼코드에서 입력을 하게되면 결과만 출려되어 이해가 늦어지는 부분이 있어서 질문드립니다.ㅠㅠ c언어를 하고 파이썬을 하는 중인데,.. 파이썬이 어렵게 느껴지고 있네요 으음...
이준우 해당 기능은 C 언어와 C++의 기능이라기 보다는 개발 환경(비주얼 스튜디오 코드)의 디버그 기능입니다. 비주얼 스튜디오 코드도, 줄 번호 왼쪽에 클릭을 하시면 브레이크 포인트가 걸리는데, 이후 비주얼 스튜디오 코드 왼쪽에 있는 5개의 아이콘 중 벌레 잡는 모양 아이콘을 누르고 거기에 나오는 재생 버튼으로 코드를 실행해주시면 디버그가 가능합니다
Traceback (most recent call last):
File"", line 1, in
NameError: name'element'is not defined 오류가 발생됩니다ㅠ
제가 shift+enter로 실행 해서 문제가 발생했네요......
확인문제 5번 하루동안 고민해봤는데.. 이렇게 이해하는게 맞는지 질문드려요
output[ (number -1 ) % 3 ].append(number) 부분을 나눠서 생각을 해봤는데요
output.append(number) code 실행 시 output list에 number list가 추가되는 code이고 # [ [], [] ,[], 1, 2, 3, 4, ... 9 ]
output의 뒤 대괄호 "[]" 는 output list의 지정된 요소를 가져오는 인덱스로 책에 설명이 되어있는데
number % 3 을 해주는 것은 number의 각 요소를 3으로 나눈 나머지값인 "1, 2, 0"를 output list의 요소 위치 0, 1, 2에
나머지값과 위치값이 같은 요소를 해당 output list의 위치에 넣어준다 라고 이해하면 될까요?
그러면 -1을 해주는 것도 이해가 같이 될것같습니다.
도움 부탁드립니다 ㅠ
어떤 흐름으로 생각을 하셨는지 정확하게는 모르겠지만
어느 정도 잘 이해하신 것 같습니다.
일반적으로 "그럼 -2를 하면 어떻게 되나?", "+1을 하면 어떻게 하나?"로 변형해서 스스로 예측을 할 수 있으면 완벽하게 이해했다고 할 수 있을 것 같습니다!
@@윤인성 선생님께서 생각하시는 number % 3을 하는 이유를 알 수 있을까요? ㅠ
@@호시딘-b8h일단 문제가 0, 1, 2, 0, 1, 2 뺑뺑이를 돌려야 해서 넣어야 합니다. % 3을 안 넣으면, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9로 값이 나아가면서 리스트의 없는 부분을 잡게 됩니다(그래서 오류가 납니다).
7:15 확인 문제 3번 자릿수 문제 풀때요... for number in numbers: ... print("{}는 {}자릿수 입니다.".format(number,len(number)) 이렇게는 안되는건가요??? str을 꼭 붙여야되는이유가뭔지 궁금해요 ㅠㅠ
len()이라는 함수는 문자열, 리스트에만 사용할 수 있는 함수이기 때문입니다!
감사합니다!
9:00 부분.
for 안에서 지정해준 변수 a, b 등은
for 밖에서 지정해준 변수 a에는 전혀 영향을 받지도, 주지도 않는 건가요?
저 for문 실행전에 a=3이라고 한번 실험삼아 넣아봤는데,
for문에는 영향을 전혀 주지 않는 것 같더라구요
답변 부탁드립니다. 감사합니다!
반복문을 진입하면서 a에 새로운 할당이 일어납니다. 따라서 그 전에 어떤 값이 있었어도 무시하고 반복문 내부에서는 리스트 내부의 요소가 들어갑니다.
@@윤인성 감사합니다!
a=[1,2,3,4,5,6]
for element in a:
print(element) 으로 실행하면 아래와 같은 에러코드가 나오는데요
File "", line 1
python roop.py
^
SyntaxError: invalid syntax
파일명은 roop.py
로 같은 폴더명 내에 있는데도 작동이 안되서요.. 혹시 왜그런지 알수있을까요?
파이썬 인터랙티브 쉘에서 명령어를 입력하신 것으로 보입니다. 파이썬 인터랙티브 쉘는 exit() 함수로 벗어나시고 외부의 일반 쉘(윈도우는 파워쉘)에서 진행하시기 바랍니다.
마지막 문제 이해가 안돼서 이것저것 해보니 약간이나마 이해가 되네요 (a+2)%3 부분이 [ ]의 위치를 정하고 그 위치에 number가 들어가는 거군요
넵!!
안녕하세요
numbers=[1,2,3,4,5,6,7,8,9]
output=[[],[],[]]
for number in numbers:
output[number%3].append(number)
print(output)
1 %3 =1 : 두번째 숫자 2 출력
2 %3 =2 : 세번쨰 숫자 3 출력
3 %3 =0 : 첫번째 숫나 1 출력
4 %3 =1 : 두번째 숫자 2 출력
5 %3 =2 : 세번쨰 숫자 3 출력
6 %3 =0 : 첫번째 숫나 1 출력
7 %3 =1 : 두번째 숫자 2 출력
8 %2 =2 : 세번쨰 숫자 3 출력
9 %3 =0 : 첫번째 숫나 1 출력
[2 ,3 ,1 ,2 ,3 ,1 ,2 ,3 ,1 ]
이렇게 출력이 될 거라 생각했는데
[[3, 6, 9], [1, 4, 7], [2, 5, 8]] 왜 이 값이 나오는지 도저히 이해가 안가요ㅠㅠㅠㅠㅠㅠ
output은 처음에 선언한 리스트 변수 [[], [], []]입니다. 지금 적어주신 것은 number % 3의 값일 뿐입니다.
%1 과 %2 를 넣고 실행 해보시면, 이해가 갈거라 생각이 듭니다.
평소에 강사님 좋은 수업 잘 듣고 있는 학생입니다! 5번 문제에서 외우려고 해도 이해가 살짝 부족해서 질문드립니다.
만약 list = [ [ [ ], [ ] ] , [ ] ]의 경우라면 넣는 방법이 있을 까요?
복잡하게 구현하면 어떻게든 되겠지만, 강의처럼 수식 하나로는 안 되며, 의미가 전혀 없는 코드입니다.
3번 예제에 자릿수 구하는 문제에서 저는 굳이 str() 함수를 쓰지않아도 len(273) = 3 이니까 안붙여도 된다 생각했는데 오류가 뜨더라구요. 왜 문자열로 변환해서 자릿수를 나타내야하는지 알수있을까요? 그리고 number = [100] 을 설정한후에 len(number), len(str(number))을 입력하였더니 각각 1,5으로 나오더라구요. 저는 1,1로 나올거같았는데 왜 1,5로 나오는지이것도 알수있을까요?
1. len() 함수는 매개 변수로 숫자가 올 수 없습니다. 그냥 그렇게 만들어졌을 뿐입니다.
2. str([100])을 해보시면 "[100]"이라고 나옵니다. 5글자이므로 5가 출력됩니다. str([100])이 왜 "[100]"이 되는지는 그냥 그렇게 만들어졌기 때문입니다.
1번의 경우는 기억해두시는 것이 좋을 것 같고, 2번의 경우는 리스트를 문자열로 변환하는 일 자체가 없으므로 그냥 그러려니 한 뒤에 넘어가시면 좋을 것 같습니다.
선생님 p.159 5번에 마지막 print(output)이 맨 왼쪽에 써져 있는데 tab키를 누르고 실행을 하면
[1],[2],[3]
[1,4],[2],[3] 이런식으로 나오는데 무슨 차이인가요?
들여쓰기가 블록의 위치를 결정하므로, 들여쓰기가 달라지면 아예 코드의 실행 구조 자체가 바뀝니다!
안녕하세요! 강의 잘 보고 있습니다!
질문이 있어서 댓글 남겨요~
혹시 연습문제 5번에 대해서,
for문 > output[(number-1)%3].append(number) 부분이
연산되는 과정(?), 풀이(?)를 낱낱이 알 수 있을까요?
어떻게 [1,4,7],[2,5,8],[3,6,9]로 출력되는지 이해가 안 되어서요...
P.S. [3,6,9], [1,4,7],[2,5,8]로 출력되는 number%3조차 이해를 하지 못했습니다....
수학책 해답처럼 풀이를 좀 부탁드립니다;;^^
number에 직접 1부터 9까지 넣어보시면서
- number
- (number - 1) % 3
를 정리해보신 뒤에 number로 묶어보시면 쉽게 알 수 있을 것이라 생각해요...! 딱 9번 정도만 계산해보면 되니 쉽게 하실 수 있을거라 생각합니다...!
예를 들어
- number = 1일 때 (1-1)% 3 = 0
- number = 2일 때 (2-1)%3 = 1
- number = 3일 때 (3-1)%3 = 2
- number = 4일 때 (4-1)%3 = 0
처럼요...![계산된 값이 결국 0-1-2-0-1-2-0-1-2로 돈다는 것을 확인하실 수 있을 것입니다]
@@윤인성 이 부분까지는 이해가 되는데요. 리스트 안에 리스트에 값이 배정(?)되는 과정이 이해가 안 되어서요..... 외부 리스트는 이해가 되나, 내부 리스트가 이해가 안 갑니다....
장은미 어떻게 이해가 안 되는지 조금 더 자세하게 설명해주실 수 있나요...! 내부에 있는 리스트를 (number - 1) % 3으로 선택하고, append해서 추가하는 것이 전부입니다...!
@@윤인성 # for 1 in numbers output(1-1)%3=0.append(1) > 0번째 내부리스트에 1값을 추가. [1]
# for 2 in numbers output(2-1)%3=1.append(2) > 1번째 내부리스트에 2값을 추가. [1],[2]
# for 3 in numbers output(3-1)%3=2.append(3) > 2번째 내부리스트에 3값을 추가. [1],[2],[3]
# for 4 in numbers output(4-1)%3=0.append(4) > 0번째 내부리스트에 4값을 추가. [1,4],[2],[3]
# for 5 in numbers output(5-1)%3=1.append(5) > 1번째 내부리스트에 5값을 추가. [1,4],[2,5],[3]
# for 6 in numbers output(6-1)%3=2.append(6) > 2번째 내부리스트에 6값을 추가. [1,4],[2,5],[3,6]
# for 7 in numbers output(7-1)%3=0.append(7) > 0번째 내부리스트에 7값을 추가. [1,4,7],[2,5],[3,6]
# for 8 in numbers output(8-1)%3=1.append(8) > 1번재 내부리스트에 8값을 추가. [1,4,7],[2,5,8],[3,6]
# for 9 in numbers output(9-1)%3=2.append(9) > 2번째 내부리스트에 9값을 추가. [1,4,7],[2,5,8],[3,6,9]
# 선언한 output = []이런 형태였을 경우에는 "IndexError가 발생함. index가 0,1,2세 가지인데 0번째 자리만 선언되어있으므로 맞지 않음. (list index out of range)"
이렇게 이해하면 내부적으로 도는 프로세스를 모두 이해한 것이 맞나요?
장은미 넵!
질문있어요!!
비주얼 스튜디오 코드의 터미널에서 실행해봣는데
>>> array = [0, 1, 2, 3, 4, 5, 6]
>>> for element in array:
... print(element)
File "", line 2
print(element)
^
IndentationError: expected an indented block
이런식으로 오류가 뜨네요ㅜ
왜그런건가요?!
앞에 들여쓰기(띄어쓰기 2개 등)을 넣어주셔야 합니다. Indentation은 들어쓰기를 의미하며, Indentation error는 따라서 들여쓰기 오류를 의미합니다.
인터랙티브 셸에서 입력할 때 각 줄 앞에 들여쓰기를 넣어주는게 쉬운 일이 아니라[한 줄 일 때는 괜찮은데, 여러 줄 되면 문제에, 이게 오류가 나중에 뜨니 오류 뜨고 나면 처음부터 다시 입력해야해서], 들어쓰기가 있는 구문들은 인터랙티브 셸에서 잘 사용하지 않습니다[그냥 간단한 한 줄 테스트 용도].