일단 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번째 리스트에 들어갈 숫자들이 정해진다는 거임
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배 더 길게 자세하게 완강되어 있으므로, 개정판 강의를 참고하며 진행해보시는걸 추천드립니다!
피라미드 문제는 요롷게 하면 한번 반복으로도 될 수 있을거 같아요 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를 차례로 끼워넣는 문제라고 해석해도 괜찮은지요.뿌리를 확실하게 이해하지 못하면 머릿솟에 남아있지 않아서 완전하게 이해하기 위해서 문의드립니다. 고맙습니다.
이코드에서요 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구문은 왜 반복되는거에요?
여러개의 책과 강의를 보며 4번째 책이과 저자강의를 듣는 중인데 귀에 너무 쏙쏙 들어오는게 강의가 너무 좋습니다 ㅠㅠㅠ 예제는 못풀었는데 *피라미드는 15분만에 풀었네요 :D 휴....다행 ㅎㅎㅎ 빅데이터 분석, 딥러닝&머신러닝 쪽으로 공부를 쭉이어가고 싶은데 저자님의 책 중 다음으로 어떤 책으로 넘어가야할지 알려주실 수 있을까요?:D
i = 0 for number in numbers: output[i % 3].append(number) i += 1 print(output) ------------------------------------------------ [['일', '사', '칠'], ['이', '오', '팔'], ['삼', '육', '구']]
안녕하세요. 책과 강의를 보면서 열심히 공부하는 중입니다. 강의 마지막에 나온 피라미드를 만들어보고 싶어서 나름대로 코드를 짜 보았는데, 이런 방식이 맞는지 모르겠습니다. # 피라미드 높이 입력하기 number = int(input("Select Line Number >>")) # 피라미드 쌓기 for line in range(number): blank = number - line print(" " * blank, "*" * ((line * 2) -1), " " * blank) 이렇게 만드니까 피라미드가 만들어지긴 한데 혹시 더 간단한 방법이나 다른 정답이 있을까요?
안녕하세요 혼공파 책보고 잘 공부하고 있습니다. 반복문이 잘 이해가 안돼서 영상으로는 처음 봤는데 비주얼 스튜디오 쓰는 것은 처음봤네요 밑에 터미널이 되게 편해보여서 저도 이용해보려고 했는데 왜그러는지 쓸때마다 계속 오류가 납니다 ㅠㅠ 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") 등으로 변경해보세요!
나중에 가면 터미널에 명령어를 입력해서 코드를 실행해야 하는 상황이 많아서 개인적으로 스크립트 언어 계열은 개발 도구에 붙어있는 실행 버튼보다는 명령어를 입력해서 실행해서 익숙해지는 것을 추천합니다! 예를 들어 - 인공지능 모델 구축은 개인 컴퓨터에서는 너무 오래 걸리고 - 웹 서버를 만들 경우에도 개인 컴퓨터에서 실행할 수는 없어서 클라우드를 통해 좋은 컴퓨터를 원격으로 대여 받고 여기에 프로그램을 넘기고 실행하는 경우가 많은데 이때는 명령어를 쓸 수 밖에 없습니다!
작가님 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)),"자리수입니다.")
9:00 부분. for 안에서 지정해준 변수 a, b 등은 for 밖에서 지정해준 변수 a에는 전혀 영향을 받지도, 주지도 않는 건가요? 저 for문 실행전에 a=3이라고 한번 실험삼아 넣아봤는데, for문에는 영향을 전혀 주지 않는 것 같더라구요 답변 부탁드립니다. 감사합니다!
지금까지는 큰 어려움 없이 해오다가 이번 강의 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. 넵 맞습니다. 프로그래밍은 원어민 선생님[컴퓨터]가 항상 앞에 앉아 있다보니, 의문이 생기신다면 실제로 여러 가지 테스트해보시면 더 기억에도 잘 남으실 것입니다!
선생님 안녕하세요 교재 179쪽 질문있습니다 array = [273, 32, 103, 57, 52] for i in range(len(array)): print("{}번째 반복: {}".format(i, array[i])) 에서 왜 'array'로 리스트를 불러오지 않고 'range(len(array))' 이렇게 불러오는 건가요? + (범위(문자의 길이( array))
안녕하세요 피라미드 문제 관련하여 코드를 작성해 보았는데요, 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)
피라미드 정도는 효율을 크게 높여도 높일 수 있는 부분이 거의 없어서 크게 신경쓰지 않으셔도 괜찮습니다 'ㅁ' ...! 방법이 워낙 다양해서 구글에서 찾아서 여러 사람들의 여러 방법들을 관찰하면서 "다른 사람은 이런 방법도 쓰는구나"를 느끼는게 더 좋을 것이라 생각합니다...!
안녕하세요 output 이라는 함수가 잘 이해가 안갑니다. 그리고 output[(number -1) %3].append(number)에서 %3은 012 순서를 돌려 한 대괄호 안에 3개의 숫자를 집어 넣게 하는 거고 number -1은 끝에서 부터 숫 자를 채우너 넣을려고 설정 한건가요?
반복문을 접하면서 데이터 양이 많아지면 어떻게 될지 의문이 들다보니, 한 가지 질문이 떠오르는데요...(강의랑 조금 무관합니다...) 나중에 텐서플로우로 머신러닝을 다룰 수 있길 바라는 1인인데, 추후 데이터 양이 많아지면 일반 노트북 사용으로는 힘들지, 그리고 텐서플로우를 포함한 머신러닝/딥러닝을 다룰 때 어떤 OS(윈도우 / mac) 가 쓰기 편한지 궁금합니다.
데이터 양이 많아지면 어떤 노트북으로도 진행이 불가능해집니다. 일반적으로 노트북에서는 데이터 일부만을 갖고 진행하고 + 클라우드 서비스로 넘겨서 그쪽에서 진행합니다 = 클라우드 서비스를 활용하면 소유하고 있는 컴퓨터는 큰 의미가 없어서 윈도우와 맥 아무 것이나 써도 상관이 없습니다.
[질문] p159 확인문제 5 output[number%3].append(number) 에서 output[number%3]은 output [[],[],[]] 의 대괄호 안의 "나머지" 번째의 괄호를 소환하고 append(number)는 소환된 괄호안에 숫자를 반복해서 채우라는 의미인 거 같습니다. 맞는지요? 여기서 이해가 가지 않는 것은 교재 146쪽에 append 함수는 리스트 맨뒤에 요소 추가하는 것이라는데 어떻게 []안으로 들어가는지요? [[],3,6,9],[],1,4,7,[]2,5,8] 출력되어야 하는 건 아닌가요? 정말 프로그래밍 언어를 처음 접해보는 거라 설명에 주셨어도 그냥 지나쳤을 수도 있습니다만..
넵 단순하게 다양한 문제들을 외워버리면 됩니다. "단순하게 외워서 창작이 될까?"할 수 있는데, 외우는 것이 어느 양을 넘어가는 순간 됩니다. 마치 그림이라던지 음악이라던지 처음에는 다 외워서 따라 그리고 따라 연주하는데, 이게 어느 정도 쌓이면 스스로 그림도 그리고 작곡할 수 있는 것 비슷합니다! PS. 아무 것도 안 보고 아무 것도 안 들으면 구석기 인류의 사람 또는 소 그림 정도 밖에 못 그립니다! 누적된 지식을 보고 듣고 외우고 따라하면서 현대적인 작품들을 만들 수 있는 것입니다. 개발도 수 많은 여러 작품(코드)를 보고 외우면 결국 됩니다!
안녕하세요! 이번 강의도 잘 봤습니다! 트리문제 혹시 답안이 어떻게 되는 지 알 수 있을까요...? #트리만들기 high=[1,2,3,4,5] star=["*"] for h in high: for s in star: print((5-h)*" ", "*"*(2*h-1), (5-h)*" ") 저는 이렇게 풀었는데 너무 단순하게 푼 것 같아서요ㅋㅋ큐ㅠㅠ 그리고 트리 높이?를 입력받아서 푸는 방식도 해보고 싶었는데 위와 같은 방식으로 풀려니 이건 정말 생각이 막히더라구요ㅠ
프로그래밍은 일단 답만 나오면 전부 답입니다! 다만 "별 피라미드" 문제는 숫자를 기반으로 반복문을 돌리는 것리 메인인 문제라서, 기본 방법으로 풀어보시는 것이 좋습니다! 구글에서 "별 피라미드"로 검색해보시면, 다양한 프로그래밍 언어로 만드는 별 피라미드 문제들이 나옵니다! 그것들을 참고해보시면 좋을 것 같습이다! [종류도 많고 코드도 길어서 유튜브 댓글로 모두 적기는 애매하네요 😂]
질문하나 하겠습니다. c언어나 c++을 할때, 프로세스 단위로 돌리게 되면 변수안의 데이터들이 변화는 과정을 볼 수가 있는데, 파이썬에는 그런기능 즉, 비주얼 코드 개발환경에는 그런 기능이 없는건가요..? 함수의 기능이 제대로 머릿속에 박혀있지 않은 문제도 있겠지만, 과정을 알게되면 이해가 빠른데 인터렉티브셀이나 비주얼코드에서 입력을 하게되면 결과만 출려되어 이해가 늦어지는 부분이 있어서 질문드립니다.ㅠㅠ c언어를 하고 파이썬을 하는 중인데,.. 파이썬이 어렵게 느껴지고 있네요 으음...
이준우 해당 기능은 C 언어와 C++의 기능이라기 보다는 개발 환경(비주얼 스튜디오 코드)의 디버그 기능입니다. 비주얼 스튜디오 코드도, 줄 번호 왼쪽에 클릭을 하시면 브레이크 포인트가 걸리는데, 이후 비주얼 스튜디오 코드 왼쪽에 있는 5개의 아이콘 중 벌레 잡는 모양 아이콘을 누르고 거기에 나오는 재생 버튼으로 코드를 실행해주시면 디버그가 가능합니다
훌륭한 강의에 감사드립니다.Visual Studio Code 편집창에서는 수정이 필요한 경우에 마우스로 아무 곳이나 찍어서 수정이 가능합니다. 하지만 인테랙티브셀에서는 마우스로 찍어서 수정이 안 됩니다. 물론 복사해서 붙여넣기는 가능합니다. 하지만 특정 부분에서 특정 단어나 철자 등을 수정은 안 되고 오직 백스페이스키로 삭제 후 수정만 가능합니다. 이것은 시스템의 설계이므로 어쩔수가 없는지요?
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 ] 이런 형태 값이 되는 걸까요?
확인 1에서요 list_a = [1,2 ,3] 이라 지정하고 list_a.extend(list_a)라고 입력해보면 아무런 결과 값이 없습니다. 혹시나 해서 print(list_a.extend(list_a)) 해놨는데 None이라고 뜨고요.. [1, 2, ,3 ,1, 2 , 3]이 나올 줄 알았는데 안 나오는 이유가 따로 있나요 ?
피라미드예제를 input("입력>") a=[1,3,5,7,9] for b in a: print(input*b) 이렇게 짜서 입력> 에 *를 넣으면 왜 안 되나요? input함수의 입력 자료형은 항상 문자열이니까 문자열*숫자하면 성립해야하는 거 아닌가요,,? 예를 들어서 안녕*2=안녕안녕 이렇게 나오는 거처럼요..!
안녕하세요! 전에 강의를 들었던 학생입니다 ㅠ 제가 코드를 공부하면서 막힌부분이 있어 질문드립니다. 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] 라고 만들고 싶은데 안됩니다 ㅜㅜ 도움을 주실 수 있으신가요?
책을 사고 처음 부터 지금까지 쭉 따라만 하고 있습니다. 프로그램에 프자도 모르는 사람인데 일단 그냥 쭉 따라만 하고 있습니다. 일단 한번 익숙하게끔 전체적으로 따라하고 그다음에 다시 처음부터는 이해하면서 처음부터 해보려 합니다. 좀 비효율적일까요?? 그리고 [ ] 에 ( ) 를 넣었는데도 실행하는데 차이점이 있을까요??
항상 잘 보고 있습니다. 저는 아래코드에 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) 를 원하시는 위치에 넣어 출력하시면 어떤 현상이 일어나는 것인지 확실하게 관측하실 수 있을 것이라 생각합니다 'ㅁ' ...!
안녕하세요 해보다 이건 안되나? 싶은 게 있어서 질문 드립니다. 리스트의 요소의 갯수를 len()함수를 이용하여 구할 수 있는데요, a = [1, 11, 111, 1111, 11111] b = len(a[3]) print(b) 를 한다면 a의 3번째는 1111이므로 출력값은 4가 나와야 한다고 생각하는데 len함수로 이거는 못하는 건가요 ?
holzzak = ["짝수", "홀수"] for number in numbers: print("{}는 {}입니다.".format(number, holzzak[number % 2])) 여기서 numbers에 있는 숫자들을 하나씩 비교해서 %2를했을때 짝수로 판명되는건 holzzak의 첫번째인 짝수가되고 그렇지않은것은 홀수라고 표시되는건가요? 어떤원리로 이렇게되는지 원리를 잘 모르겠어서요
안녕하세요 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)로 두 개 모두 출력해보시면 더 쉽게 이해하실 수 있을 것 같습니다.
와.. 감사합니다 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이니까 되네요 쓰면서 이해했네 세상에 감사합니다..
그냥 output[number % 3].append(number)를 할 경우, 저렇게 나옵니다. output[0], output[1], output[2] 번째에 있는 리스트들의 뒤에 요소들이 쭉쭉 추가되는 것입니다. 질문의 의도가 이것인지 잘 모르겠는데, 아니라면 조금 더 질문을 자세하게 설명해주실 수 있을까요...!
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) 강의 매번 감사해요:)
일단 첫 번째는 조건 비교에 =를 사용했기 때문입니다. 조건 비교는 ==입니다![초기에 자주 하는 실수라 시험 등에 자주 나오는 문제입니다]. 두 번째는 그렇게 하셔도 됩니다. 다만 중첩해서 쓰면, 코드가 간단하며, 요소의 수가 더 많은 리스트를 반복 돌릴 때도 별도의 코드 변경 없이 실행할 수 있습니다.
신기하네요^^ 제 생각에는 일단 모양이 같은 변수 'a' 라해도 반복문 for 다음 'a' 와 in 다음 나오는 'a'는 틀린 변수 이고, print함수 안의 변수 'a' 는 순서대로 앞의 for 다음 'a'로 인식해서 결과가 똑 같이 나오는 거 아닐까요? 제 생각이고, 선생님 답변 기다려 보죠.. 저도 궁금 하네요.
자릿수 구하는 코드에서 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)) 더 복잡하긴 하지만 이렇게 해도 문제없죠?
안녕하세요~ 강의내용에는 없지만 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 나옵니다. 즉, 각 변수마다 값이 할당 되었음을 알 수 있습니다. 키워드는 동적 변수생성 으로 알면 도움 되실듯 합니다.
안녕하세요 선생님 질문 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() 이렇게 하면 될 것 같은데 안되는 경우가 많다고 했는데 이런 경우 같아요 ㅜㅜ
안녕하세요! 강의 잘 보고 있습니다! 질문이 있어서 댓글 남겨요~ 혹시 연습문제 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)" 이렇게 이해하면 내부적으로 도는 프로세스를 모두 이해한 것이 맞나요?
책 열기 10일차. 책은 술술 넘어가는데 5번 문제 이게 뭔가 한참 고민하다가 댓글 봐도 대충 알 것 같은데 이게 뭔 소리 인가 싶다가 p.143 세번째 리스트안에 리스트보고 이해되었네요. output = [ [ 좌표0 ] , [ 좌표1 ] , [ 좌표2 ] ] 나머지가 0인 좌표에 그 회차 숫자를 넣어라. 풀어놓고도..... 이게 영상 뒤에 추가로 3번 특이 풀이 부분 보니 단박에 이해가 가네요. 감사합니다.~~
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번문제를 제대로 이해한게 맞는지 궁금합니다.
연습분제 5번에서 for number in umber: output[number % 3].append(number) --> 이렇게하면 리스트에서 3부터 들어가는이유가 이해가 되질 않습니다. print(output) for number in umber: output[(number - 1) % 3].append(number) ---> -1을 할경우 3,6,9가 맨 뒤로 가는 이유가 output[[0],[1],[2]] ouput[0] -1 = ouput[2] 이기 때문인가요? print(output)
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번의 경우는 리스트를 문자열로 변환하는 일 자체가 없으므로 그냥 그러려니 한 뒤에 넘어가시면 좋을 것 같습니다.
@@인버스냐레버냐 for number in numbers: ....str(number) + "는 ㅇㅇ입니다." 또는 ...."{ㅇㅇ}는 ㅇㅇ입니다.".format(number) 로 str(number) 또는 format() 함수로 변환해서 사용해주시면 됩니다. 강의에서는 두 번째 방법으로 12:19 처리하고 있습니다!
확인문제 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을 해주는 것도 이해가 같이 될것같습니다. 도움 부탁드립니다 ㅠ
a=[1,2,3,4,5,6] for element in a: print(element) 으로 실행하면 아래와 같은 에러코드가 나오는데요 File "", line 1 python roop.py ^ SyntaxError: invalid syntax 파일명은 roop.py 로 같은 폴더명 내에 있는데도 작동이 안되서요.. 혹시 왜그런지 알수있을까요?
선생님 근데 비쥬얼 스튜디오 코드에서요, 새파일 만들고 코드 작성 후에 ctrl+s로 세이브하고 run 하면 syntax error invalid syntax라고 오류메시지가 나오는데 왜 이러는걸까요? 실제로 코드에 오류는 없는 상태고, 그대로 비쥬얼 스튜디오 껐다가 새로키고 run 하면 제대로 실행 되요. 세 네번째 이러니까 제가 뭔가 실수하고 있는게 있나 싶네요
@@윤인성 감사합니다..! 그럼 질문 하나만 더 하겠습니다. 지금 제가 공부하고 있는 방법이 일단 강좌를 먼저 보고 해당 파트 책에 있는 부분 전부 코딩해보고 해석해보고 확인문제 다시 풀어보고 막히면 다시 강좌보고 이런식으로 하고있는데 .. 더 나은 방법이 있는지 알고싶습니다.
넵 앞의 부분은 다 맞습니다. 『리스트.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. 책은 그냥 이후에도 머리에서 고민하면서 떠올려볼 수 있게 넣은 것입니다. 따라서 조급하게 생각하지 마시고 느긋느긋하게 생각하시는 것을 추천합니다! 항상 뭔가 새로 배울 때는 처음에 "아 내가 이거 안되는거 아닌가?"라는 생각을 계속 마주하게 되는데 그걸 계속 반복하면서 어떻게든 하다보면 어느 순간 돌파되는 것처럼[물론 또 이후에 영역을 계속 공부하면서 반복되는 발상이지만] 어느 순간부터 이해되실거라 생각합니다. "우리 아이가 숫자도 제대로 못 세고, 덧셈도 못하고 좀 이상한거 아닌가"하다가도 어느 순간 숫자도 세고, 덧셈도 하고, 구구단도 외우고 수학 문제를 풀어나가는 것처럼요!
질문있어요!! 비주얼 스튜디오 코드의 터미널에서 실행해봣는데 >>> 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는 따라서 들여쓰기 오류를 의미합니다. 인터랙티브 셸에서 입력할 때 각 줄 앞에 들여쓰기를 넣어주는게 쉬운 일이 아니라[한 줄 일 때는 괜찮은데, 여러 줄 되면 문제에, 이게 오류가 나중에 뜨니 오류 뜨고 나면 처음부터 다시 입력해야해서], 들어쓰기가 있는 구문들은 인터랙티브 셸에서 잘 사용하지 않습니다[그냥 간단한 한 줄 테스트 용도].
@@윤인성 numbers = [273,103,5,32,65,9,72,800,99] for number in numbers: if numbers >= 100: print("- 100 이상의 수:", number) ------------전체 코드입니다---------- 122342141234125-MacBookPro 혼자공부하는 파이썬 % python3 number.py Traceback (most recent call last): File "/Users/341341234214/Downloads/혼자공부하는 파이썬/number.py", line 4, in if numbers >= 100: TypeError: '>=' not supported between instances of 'list' and 'int' 1234123412341341341-MacBookPro 혼자공부하는 파이썬 % -----------오류 메세지 입니다!!----------
for문에서 for 키 변수 in 딕셔너리: 코드 이런식으로 사용을 하잖아요? 이때 키 변수는 제가 임의로 아무문자열로나 잡아줄 수 있는거구요.. 그런데 이때 키 변수를 어떤 식으로 컴퓨터가 인식하는지 궁금합니다. 딕셔너리일때는 앞에서부터 키와 값에 차근차근 접근하는 것 같고, 리스트일때는 앞에서부터 요소에 차례대로 접근하는 것 같고 그런데 이게 컴퓨터가 어떻게 인식을 하길래 순서대로 인식이 되는 건지 모르겠습니다. 만약 0,1,2,3,4,...이렇게 인식을 한다면, 딕셔너리는 값을 가져올때 딕셔너리명[키] 이렇게 입력해주어야 하므로 숫자로는 저렇게 차례대로 접근하지 못할 것 같은데.. 답변해주시면 감사드리겠습니다!
3.7버전 이전의 딕셔너리는 순서를 전혀 보장하지 않았습니다(일반적으로 어떤 값으로 순서 없이 키로 뭔가를 찾는 자료형을 해시, 해시맵 등으로 부르는데, 대부분의 프로그래밍 언어는 이 순서를 보장하지 않습니다). 하지만 3.7버전부터는 "넣은 순서"대로 들어가게 되었습니다. 다만 딕셔너리에 어떤 값을 넣었다면, 이는 "순서가 상관 없는 것"이므로 순서에 얽매이지 않게 만드는 것이 좋습니다(프로그램들끼리 커뮤니케이션을 거치는 과정에서 순서가 훼손될 가능성이 있습니다). 만약 순서가 중요하다면 리스트를 사용하는 것이 좋습니다.
N%1을 하면 무조건 0이 나오므로, 0번째에 모두 꼽히고(예를 들어 3%1는 나머지 0) N%2는 무조건 0 또는 1이 나오므로, 0번째 또는 1번째에 꼽히며, N%3은 무조건 0, 1, 2가 나오므로 0번째 또는 1번째 또는 3번째에 꼽힙니다. 생각이 들었으면 실제로 돌려서 직접 눈으로 확인해보시는 것을 추천드립니다...!
5번 문제항에서 어려움을 겪고 있으며매우 점점 혼란 스러워집니다 선생님. 1. output =[[],[],[]] 실행결과가 숫자가 나누어 지기 위해 설정한 값(?)인가요? 그리고 왜 output[(number-1)%3].append(number) 이 되는지 도저히 어떻게 생각해야 되는지 모르겠습니다. 도와주세요 ㅜㅜㅜㅜ
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번째 리스트에 들어갈 숫자들이 정해진다는 거임
감사합니다. 댓글을 달아 주신 분들에게 감사드립니다. 읽다보니 이해가 되었습니다.
초장에 잘 나가다가 뒤로 갈수록 확인 문제가 안 풀려서 나는 그냥 아무것도 아니구나 나 따위 역시 그렇지 끝없이 절망하다가.. 희망을 얻고 갑니다. 선생님 너무 설명 잘하세요!
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배 더 길게 자세하게 완강되어 있으므로,
개정판 강의를 참고하며 진행해보시는걸 추천드립니다!
좋은 강의 감사합니다. 유튜브에 있는 파이썬 강의 가운데 제일 상콤한 것 같아요~
새로운게 나올때마다 외우기보다는 백지에 필기해놨더니 필요할때 쓰기 좋네요 ㅋㅋㅋ
정말 너무 잘 가르치세요. 이런 강의를 무료로 볼 수 있다니 ! 천사세요^_^ 강의 잘들었습니다~~!!
피라미드 문제는 요롷게 하면 한번 반복으로도 될 수 있을거 같아요
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 넵 그렇습니다...! % 연산자와 리스트를 활용하는 예라고 생각해주시면 되겠습니다...!
직접 코드를 실행시켜보니까 이해가 좀 더 잘되는거 같아요~ 좋아요~
이코드에서요
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 구문도 짝입니다.
여러개의 책과 강의를 보며 4번째 책이과 저자강의를 듣는 중인데 귀에 너무 쏙쏙 들어오는게 강의가 너무 좋습니다 ㅠㅠㅠ
예제는 못풀었는데 *피라미드는 15분만에 풀었네요 :D 휴....다행 ㅎㅎㅎ
빅데이터 분석, 딥러닝&머신러닝 쪽으로 공부를 쭉이어가고 싶은데
저자님의 책 중 다음으로 어떤 책으로 넘어가야할지 알려주실 수 있을까요?:D
앗 현재 혼공파 강의는 개정판 강의가 있는데 2배 길고 자세합니다! 해당 강의쪽을 살펴보는걸 추천드립니다!!
곧바로 넘어갈만한 제 책은 없어서 @_@
다른 책을 찾아보는걸 추천드립니다!!
Lamo 선생님(작가님)ㅋㅋㅋ TMI 넘 웃겨요 구구단 4학년 때까지 ㅋㅋㅋㅋ 강의 하나하나 놓칠 게 없는 데 그중에 선생님의 말풍선이 넘 잼나네요 감사합니다 !!!
연습문제 부분 일시정지하고 직접 풀어서 맞추니까 엄청 뿌듯하네요 ㅎㅎ
그냥 보는것 보다 직접 풀고 보면 좋을 것 같아요~!!
프로그래밍이 가면 갈수록 "내가 직접 하고 깨닫는 것"이 중요해져서, 기본서를 보는 단계부터 직접 풀어서 맞추는 재미에 익숙해지시면, 이후에도 큰 도움이 될 것이라 생각합니다!!
21강까지 왔습니다! 21강은 좀 반복해서 봐야 할 것 같아요. 강의 감사합니다!
9:08 문제에서 for list in list_of_list:
for i in list:
print("{}".format(i))
이렇게 짜도 상관없을까요? 결과값은 똑같이 나오더라구요,,
넵 식별자 이름만 다른 것이므로 같은 코드입니다!
이렇게도 해봅니다.
댓글보고 이해했어요.
numbers = ['일', '이', '삼', '사', '오', '육', '칠', '팔', '구']
output = [[], [], []]
i = 0
for number in numbers:
output[i % 3].append(number)
i += 1
print(output)
------------------------------------------------
[['일', '사', '칠'], ['이', '오', '팔'], ['삼', '육', '구']]
숫자가 아니라면 어떻게 작동할수있을까 생각하다가 이 댓글을 보았는데 i 가 뭔지 여쭤봐도 될까요?
@@hwang_hae 코드에 오타가 있었네요
혼란을 드려서 미안합니다 ^^
output[ i % 3 ].......
위 부분에 나머지 연산을 위해 임의로 설정한 변수입니다
a가 뜬금없이 들어갔네요 ㅋㅋㅋ
감사합니다!
안녕하세요. 책과 강의를 보면서 열심히 공부하는 중입니다. 강의 마지막에 나온 피라미드를 만들어보고 싶어서 나름대로 코드를 짜 보았는데, 이런 방식이 맞는지 모르겠습니다.
# 피라미드 높이 입력하기
number = int(input("Select Line Number >>"))
# 피라미드 쌓기
for line in range(number):
blank = number - line
print(" " * blank, "*" * ((line * 2) -1), " " * blank)
이렇게 만드니까 피라미드가 만들어지긴 한데 혹시 더 간단한 방법이나 다른 정답이 있을까요?
실행만 되면 상관 없습니다.
다양한 방법 등은 구글에서 "파이썬 피라미드" 등으로 검색해보면 수 많은 사람들이 올린 예제가 나오므로 참고해보시기 바랍니다!
좋은 영상 잘봤습니다.
설명을 너무 쉽게 해주셔서 이해하기 쉬웠습니다.
for반복문을어려워 하시는 분들이 많으실텐데 반복문을 한번 풀어서 써보면 이해하기 수월하실 겁니다.
감사히 정말 잘 보고 공부 하고 있습니다. 감사합니다.
선생님! 질문요.
전부 이해는 갑니다.
의문점. 예를들어
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이 되서 첫번째 결과가 나와야 된다고 생각 했는데, 아니었던거죠.^^ 선생님 감사합니다.
7:15 확인 문제 3번 자릿수 문제 풀때요... for number in numbers: ... print("{}는 {}자릿수 입니다.".format(number,len(number)) 이렇게는 안되는건가요??? str을 꼭 붙여야되는이유가뭔지 궁금해요 ㅠㅠ
len()이라는 함수는 문자열, 리스트에만 사용할 수 있는 함수이기 때문입니다!
감사합니다!
안녕하세요 혼공파 책보고 잘 공부하고 있습니다.
반복문이 잘 이해가 안돼서 영상으로는 처음 봤는데 비주얼 스튜디오 쓰는 것은 처음봤네요
밑에 터미널이 되게 편해보여서 저도 이용해보려고 했는데 왜그러는지 쓸때마다 계속 오류가 납니다 ㅠㅠ 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 가 아니라 실행버튼 누르니까 되더라구요
빠른 답변 감사합니다!
나중에 가면 터미널에 명령어를 입력해서 코드를 실행해야 하는 상황이 많아서
개인적으로 스크립트 언어 계열은
개발 도구에 붙어있는 실행 버튼보다는
명령어를 입력해서 실행해서 익숙해지는 것을 추천합니다!
예를 들어
- 인공지능 모델 구축은 개인 컴퓨터에서는 너무 오래 걸리고
- 웹 서버를 만들 경우에도 개인 컴퓨터에서 실행할 수는 없어서
클라우드를 통해 좋은 컴퓨터를 원격으로 대여 받고
여기에 프로그램을 넘기고 실행하는 경우가 많은데
이때는 명령어를 쓸 수 밖에 없습니다!
작가님 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)),"자리수입니다.")
넵 그렇게 이해하시면 됩니다.
결과가 그냥 원하는대로 나온다면 어떤 코드를 써도 큰 문제 없습니다.
선생님 5:13에 format함수를 쓰는 이유가 있나요?ㅜㅠ
그냥 썼습니다 'ㅁ'
+ str(number)로 대체하셔도 됩니다.
@@윤인성 작가님, 책에서는 그냥 number라고 되어있던데 두개를 다 돌려도 결과값은 같던데 차이가 있나요..?
@@resolution6404 어떤 두 개 인지 조금 더 자세하게 설명해주실 수 있을까요! 결과가 같다면 아무거나 쓰셔도 됩니다.
@@dlsrks1002 어떤 부분의 코드인지 등과 함께 조금 더 자세히 설명주실 수 있을까요!
안녕하세요, 강의 잘듣고 있습니다!
number나 element 같은 것들은 키워드가 아니라 그냥 a,b 처럼 임의로 쓰는 단어일 뿐인가요?
넵 그렇습니다!
안녕하세요 강의 잘 보고 있습니다
확인문제 5번에서
output[number % 3].append(number)를
output의 number % 3 번째의 요소에 number를 추가해라 라는 의미로 해석해도 되나요?
넵!
9:00 부분.
for 안에서 지정해준 변수 a, b 등은
for 밖에서 지정해준 변수 a에는 전혀 영향을 받지도, 주지도 않는 건가요?
저 for문 실행전에 a=3이라고 한번 실험삼아 넣아봤는데,
for문에는 영향을 전혀 주지 않는 것 같더라구요
답변 부탁드립니다. 감사합니다!
반복문을 진입하면서 a에 새로운 할당이 일어납니다. 따라서 그 전에 어떤 값이 있었어도 무시하고 반복문 내부에서는 리스트 내부의 요소가 들어갑니다.
@@윤인성 감사합니다!
지금까지는 큰 어려움 없이 해오다가 이번 강의 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. 넵 맞습니다.
프로그래밍은 원어민 선생님[컴퓨터]가
항상 앞에 앉아 있다보니, 의문이 생기신다면
실제로 여러 가지 테스트해보시면
더 기억에도 잘 남으실 것입니다!
@@윤인성 감사합니다!!! 직접 쳐보면서 하나하나 다시 생각해보겠습니다ㅎㅎ
ㅋㅋ 이 영상만 유독 질문이 많네요. 그만큼 난이도 있는 주제라서 그런가봅니다!
저도 이해가 안되는게 있는데 반복문 분석하는 강의보고 다시 봐도 이해안되면 질문드리겠습니다~
output[]가 뭔지 몰라서 이해가 안갔었는데 전에 있던 코드 보고 기억나서 깔끔히 해결됐네요~~~ 다시 쭉 가겠습니다!
복습하면서, 마지막문제 다시 풀어보는데
output[number%3 -1].append(number)
이렇게 쓰면 좀 직관적으로 더 이해가 잘되지 않을까 싶은데
인성님 의견은 어떠신가요!?
이번강의 15분이라서 짧구나 했는데 댓글보면서 이해하니까 50분이 걸리네요 ㅋㅋㅋ 잘들었습니다.
반복문 함수 부분이 좀 어렵습니다 ;ㅁ; !!
5번 문제 답을 보고나면 하나씩 순차적으로 풀어서 보면 이해할 수 있는데, 혼자 풀 때는 손도 못댔네요
선생님 안녕하세요 교재 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를 사용하는 방법 등등으로 인덱스를 추출할 수 있습니다!
안녕하세요 피라미드 문제 관련하여 코드를 작성해 보았는데요,
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 함수에 대해서 잘 알게 되어서 범위 구간 정하는 것에대해서는 이제 알 것 같습니다! 감사합니다 ㅎㅎ
피라미드 정도는 효율을 크게 높여도 높일 수 있는 부분이 거의 없어서 크게 신경쓰지 않으셔도 괜찮습니다 'ㅁ' ...! 방법이 워낙 다양해서 구글에서 찾아서 여러 사람들의 여러 방법들을 관찰하면서 "다른 사람은 이런 방법도 쓰는구나"를 느끼는게 더 좋을 것이라 생각합니다...!
@@윤인성 넵넵!! 빠르고 친절한 답변 감사합니다! 많은 도움이 되고 있습니다 ㅎㅎ
5번문제 가지고 2일을 고민했는데 드디어 이해했네요 바보같이 %기호를 나누기로 착각하고 거기에 맞춰서 생각하니까 답이 없는 생각에서 반복했네요ㅋㅋ
강의 잘 듣고 있습니다 감사합니다!
한바퀴 돌리고 다시 돌아오니 이제 이해가 됩니다!
연습문제 풀어보다가 4번, 5번 때문에 들어왔는데 동영상 강의 들으면서 보니 이해가 훨씬 쉽네요. 이해만 되는 게 문제고 나중에 다시 써보라고 하면 못 쓸 것 같지만 ㅠㅋㅋ 좋은 강의 정말 감사합니다 ^^
드디어 제대로된 강의를 찾았네요!!!
안녕하세요 output 이라는 함수가 잘 이해가 안갑니다. 그리고 output[(number -1) %3].append(number)에서 %3은 012 순서를 돌려 한 대괄호 안에 3개의 숫자를 집어 넣게 하는 거고 number -1은 끝에서 부터 숫 자를 채우너 넣을려고 설정 한건가요?
넵 "원하는 순서대로 차근차근 넣으려고", 두 가지를 했다라고 생각해주시면 될 것 같습니다...!
강의 수강하면서 잘 따라하고 있었는데 갑자기 파일을 불러오려고 python ex01.py 이런 식으로 입력을 하니까 파일을 찾을 수 없다고 에러만 자꾸 뜨네요.. 이런 경우에는 어떻게 해야 하나요 ..ㅠㅠ?
어떤 오류가 뜨는지 알려주실 수 있을까요!
can’t find file 이라는 말만 자꾸 뜹니다 ㅠㅠ!
@@hayan-yan 파일이 현재 폴더에 없어서 그렇습니다. 앞쪽의 강의를 다시보면서 폴더 열기로 폴더를 열고, 그곳에 파일을 만들어서 진행해보시기 바랍니다!
반복문을 접하면서 데이터 양이 많아지면 어떻게 될지 의문이 들다보니, 한 가지 질문이 떠오르는데요...(강의랑 조금 무관합니다...)
나중에 텐서플로우로 머신러닝을 다룰 수 있길 바라는 1인인데, 추후 데이터 양이 많아지면 일반 노트북 사용으로는 힘들지, 그리고 텐서플로우를 포함한 머신러닝/딥러닝을 다룰 때 어떤 OS(윈도우 / mac) 가 쓰기 편한지 궁금합니다.
데이터 양이 많아지면 어떤 노트북으로도 진행이 불가능해집니다.
일반적으로 노트북에서는 데이터 일부만을 갖고 진행하고
+ 클라우드 서비스로 넘겨서 그쪽에서 진행합니다
= 클라우드 서비스를 활용하면 소유하고 있는 컴퓨터는 큰 의미가 없어서 윈도우와 맥 아무 것이나 써도 상관이 없습니다.
@@윤인성 친절한 답변 감사합니다.
[질문] 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],[],[]]이 됩니다!
"대괄호에 연산자를 사용할 수 있다"는 발상을 하기 위해 어떤 연습이나 노력이 필요할까요? 단순하게 다양한 복합적인 문제들을 풀어보면 되는 부분일까요?
넵 단순하게 다양한 문제들을 외워버리면 됩니다.
"단순하게 외워서 창작이 될까?"할 수 있는데, 외우는 것이 어느 양을 넘어가는 순간 됩니다.
마치 그림이라던지 음악이라던지 처음에는 다 외워서 따라 그리고 따라 연주하는데, 이게 어느 정도 쌓이면 스스로 그림도 그리고 작곡할 수 있는 것 비슷합니다!
PS. 아무 것도 안 보고 아무 것도 안 들으면
구석기 인류의 사람 또는 소 그림 정도 밖에 못 그립니다!
누적된 지식을 보고 듣고 외우고 따라하면서
현대적인 작품들을 만들 수 있는 것입니다.
개발도 수 많은 여러 작품(코드)를 보고 외우면 결국 됩니다!
안녕하세요! 이번 강의도 잘 봤습니다!
트리문제 혹시 답안이 어떻게 되는 지 알 수 있을까요...?
#트리만들기
high=[1,2,3,4,5]
star=["*"]
for h in high:
for s in star:
print((5-h)*" ", "*"*(2*h-1), (5-h)*" ")
저는 이렇게 풀었는데 너무 단순하게 푼 것 같아서요ㅋㅋ큐ㅠㅠ 그리고 트리 높이?를 입력받아서 푸는 방식도 해보고 싶었는데 위와 같은 방식으로 풀려니 이건 정말 생각이 막히더라구요ㅠ
프로그래밍은 일단 답만 나오면 전부 답입니다!
다만 "별 피라미드" 문제는 숫자를 기반으로 반복문을 돌리는 것리 메인인 문제라서, 기본 방법으로 풀어보시는 것이 좋습니다!
구글에서 "별 피라미드"로 검색해보시면, 다양한 프로그래밍 언어로 만드는 별 피라미드 문제들이 나옵니다! 그것들을 참고해보시면 좋을 것 같습이다!
[종류도 많고 코드도 길어서 유튜브 댓글로 모두 적기는 애매하네요 😂]
일시 정지하면서 풀어 보는 것은 다음에 할께요~
저도 40대인데, 전 이해조차 못했어요. 오늘 하루종일 생각하고 있는데 배열 자리수 안의 숫자들이 %3을 주면 왜 append가 뒤에 붙는 위치가 제 생각대로의 숫자가 나오질 않네요. 뭔가 약간의 햇갈림에 이해안되는 원인 중 하나일텐데 그걸 못찾고 있네요.
질문하나 하겠습니다.
c언어나 c++을 할때, 프로세스 단위로 돌리게 되면 변수안의 데이터들이 변화는 과정을 볼 수가 있는데, 파이썬에는 그런기능 즉, 비주얼 코드 개발환경에는 그런 기능이 없는건가요..? 함수의 기능이 제대로 머릿속에 박혀있지 않은 문제도 있겠지만, 과정을 알게되면 이해가 빠른데 인터렉티브셀이나 비주얼코드에서 입력을 하게되면 결과만 출려되어 이해가 늦어지는 부분이 있어서 질문드립니다.ㅠㅠ c언어를 하고 파이썬을 하는 중인데,.. 파이썬이 어렵게 느껴지고 있네요 으음...
이준우 해당 기능은 C 언어와 C++의 기능이라기 보다는 개발 환경(비주얼 스튜디오 코드)의 디버그 기능입니다. 비주얼 스튜디오 코드도, 줄 번호 왼쪽에 클릭을 하시면 브레이크 포인트가 걸리는데, 이후 비주얼 스튜디오 코드 왼쪽에 있는 5개의 아이콘 중 벌레 잡는 모양 아이콘을 누르고 거기에 나오는 재생 버튼으로 코드를 실행해주시면 디버그가 가능합니다
훌륭한 강의에 감사드립니다.Visual Studio Code 편집창에서는 수정이 필요한 경우에 마우스로 아무 곳이나 찍어서 수정이 가능합니다. 하지만 인테랙티브셀에서는 마우스로 찍어서 수정이 안 됩니다. 물론 복사해서 붙여넣기는 가능합니다. 하지만 특정 부분에서 특정 단어나 철자 등을 수정은 안 되고 오직 백스페이스키로 삭제 후 수정만 가능합니다. 이것은 시스템의 설계이므로 어쩔수가 없는지요?
Jaeil Nam 넵 어쩔 수 없습니다...! 물론 후대 개발자들이 리눅스 맥의 터미널 등의 프로그램에서도 마우스클릭 할 수 있게 해주는 플러그인들을 만들기는 했지만, 이걸 쓰느니 그냥 Visual Studio code 같은 gui에디터를 쓰는 것이 편합니다...!
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] 자체를 그냥 리스트라고 하면 답이 풀리네요. 일단은 이렇게 외우고 해야할것 같습니다. 감사합니다!
확인 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를 출력해서 값을 확인하셔야 합니다!
계속 책만 보고 진행하다가 답 봐도 이해가 안 돼서 영상을 찾아보게 되었는데 딱 제가 고민하고 있던 속마음을 얘기해 주네요.ㅎㅎ 중간중간 진지하게 "개소리"라 말하는 것도 웃기고요. ㅎㅎ 덕분에 재미있게 배워갑니다. 감사합니다.
저번달에 학원에서 파이썬 강의를 들었는데 중첩 For문 부터 헤맸거등요.. 이 책 보면서도 중첩 For에서 또 어려워서 헤매네요..흐아..
피라미드예제를
input("입력>")
a=[1,3,5,7,9]
for b in a:
print(input*b)
이렇게 짜서 입력> 에 *를 넣으면 왜 안 되나요?
input함수의 입력 자료형은 항상 문자열이니까 문자열*숫자하면 성립해야하는 거 아닌가요,,? 예를 들어서 안녕*2=안녕안녕 이렇게 나오는 거처럼요..!
지금 코드에서는 어떤 글자를 넣어도 안 됩니다. input() 함수는 입력을 받은 뒤 입력을 밖으로 내뺍니다.
변수 = input("프롬프트")
형태로 변수에 저장해주셔야 합니다.
안녕하세요? 강의 잘 설명해 주셔서 잘 듣고 있습니다! 4번 문제에서 for a in_list_of_list와 for b in a에서 a와 b는 임의로 넣은 값이라고 보면 될까요? for 뒤에는 반복자를 넣으라고 하셨는데 a와 b가 반복자인지요?
넵 a와 b가 반복자(반복 변수)이며, 원하는 이름으로 넣어주시면 됩니다...!
이번 강의는 정말 몇번을 들어야 할것 같네요 ㅠㅠ
안녕하세요! 전에 강의를 들었던 학생입니다 ㅠ
제가 코드를 공부하면서 막힌부분이 있어 질문드립니다.
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] 라고 만들고 싶은데
안됩니다 ㅜㅜ 도움을 주실 수 있으신가요?
설명이 무슨 의미인지 명확하게 모르겠습니다 @_@
다만 책 이외의 내용은 저도 본업이 있다보니 ;ㅁ; ...!
하나하나 답변하다보면 끝이 없어서 자제해주시는 것을 추천드립니다 ;ㅁ; ...!
책을 사고 처음 부터 지금까지 쭉 따라만 하고 있습니다. 프로그램에 프자도 모르는 사람인데 일단 그냥 쭉 따라만 하고 있습니다. 일단 한번 익숙하게끔 전체적으로 따라하고 그다음에 다시 처음부터는 이해하면서 처음부터 해보려 합니다. 좀 비효율적일까요?? 그리고 [ ] 에 ( ) 를 넣었는데도 실행하는데 차이점이 있을까요??
어떤 식을 해도 다 따라할 수만 있다면 효율은 크게 상관 없다고 생각합니다. []와 ()는 예시를 주셔야 조금 더 정확하게 답변드릴 수 있을 것 같습니다.
항상 잘 보고 있습니다. 저는 아래코드에 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)
를 원하시는 위치에 넣어 출력하시면
어떤 현상이 일어나는 것인지 확실하게 관측하실 수 있을 것이라 생각합니다 'ㅁ' ...!
안녕하세요 해보다 이건 안되나? 싶은 게 있어서 질문 드립니다.
리스트의 요소의 갯수를 len()함수를 이용하여 구할 수 있는데요,
a = [1, 11, 111, 1111, 11111]
b = len(a[3])
print(b)
를 한다면 a의 3번째는 1111이므로 출력값은 4가 나와야 한다고 생각하는데 len함수로 이거는 못하는 건가요 ?
len 함수는 문자열과 리스트 등에 적용할 수 있습니다. 숫자에는 적용이 안 됩니다. 자릿수를 구하고 싶으시면 문자열로 바꾼 뒤에 → 검사하셔야 합니다.
holzzak = ["짝수", "홀수"]
for number in numbers:
print("{}는 {}입니다.".format(number, holzzak[number % 2]))
여기서 numbers에 있는 숫자들을 하나씩 비교해서 %2를했을때 짝수로 판명되는건 holzzak의 첫번째인 짝수가되고 그렇지않은것은 홀수라고 표시되는건가요?
어떤원리로 이렇게되는지 원리를 잘 모르겠어서요
숫자 % 2를 하면
- 결과 0 - 나머지가 0인 경우 = holzzak[0] => 짝수
- 결과 1 - 나머지가 1인 경우 = holzzak[1] => 홀수
이 되는 것입니다.
안녕하세요 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)로 두 개 모두 출력해보시면 더 쉽게 이해하실 수 있을 것 같습니다.
안녕하세요! 항상 강의 잘 보고 있습니다.
len(str(number))를 구해서 자릿수를 구할 때, len(number)로 쓰면 안되는 이유가 숫자들을 문자로 바꿔서 문자의 자릿수를 세기 위해선가요? len(number)로는 파이썬에서 구할 수 없나봐요?..
len은 반복 가능한 녀석들(문자열, 리스트)에만 적용할 수 있습니다. 그래서 문자열로 바꾼 뒤 세는 것입니다.
@@윤인성 감사합니다! 이것말고도 반복문은 바로 이해 안가는게 많네요ㅠ 많은 복습 후 계속 강의 듣겠습니다!
와.. 감사합니다
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이 가능한 것은 그냥 언어가 그렇게 설계되었기 때문입니다(다른 대부분의 프로그래밍 언어는 안 됩니다)!
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]를 따로 출력하셔야 결과를 확인할 수 있습니다!
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] 번째에 있는 리스트들의 뒤에 요소들이 쭉쭉 추가되는 것입니다. 질문의 의도가 이것인지 잘 모르겠는데, 아니라면 조금 더 질문을 자세하게 설명해주실 수 있을까요...!
아 이해했습니다!! 제가너무 복잡하게생각했네요. 감사합니다.
Traceback (most recent call last):
File"", line 1, in
NameError: name'element'is not defined 오류가 발생됩니다ㅠ
제가 shift+enter로 실행 해서 문제가 발생했네요......
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자리 이상의 숫자가 들어올 수도 있으므로, 최대한 범용적으로 쓸 수 있는 코드로 작성하는 것이 좋아서, 책의 형태를 더 추천합니다!
8:46 에서 for b in a대신에 for a in a 하고 print(a)해도 값이 똑같이나오던데 뭐가 맞는거죠??
신기하네요^^
제 생각에는 일단 모양이 같은 변수 'a' 라해도 반복문 for 다음 'a' 와 in 다음 나오는 'a'는 틀린 변수 이고, print함수 안의 변수 'a' 는 순서대로 앞의 for 다음 'a'로 인식해서 결과가 똑 같이 나오는 거 아닐까요?
제 생각이고, 선생님 답변 기다려 보죠.. 저도 궁금 하네요.
출력만 정상적으로 나오면 둘 다 맞는 것입니다.
다만 일반적으로 코드를 읽을 때 변수 이름을 그렇게 같게 써버리면 코드를 읽기 힘듦으로 안 하는 것이 좋습니다.
자릿수 구하는 코드에서
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))를 출력하는 것이 좋습니다...!
NameError: name 'element' is not defined 계속 출력이 되네요....ㅠ
23강에 선생님이 다시 설명해 놓으신거 읽고 output이 왜 0,1,2 여야 하는지 이해했습니다. 3으로 나눈 나머지 숫자이니까요. 그래서 1,2,0 으로 만들지 않으려면 number-1 해줘야 하는 것도 드디어 이해했습니다. 감사합니다.
안녕하세요~ 강의내용에는 없지만 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 나옵니다. 즉, 각 변수마다 값이 할당 되었음을 알 수 있습니다.
키워드는 동적 변수생성 으로 알면 도움 되실듯 합니다.
안녕하세요 선생님
질문 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번에 대해서,
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)"
이렇게 이해하면 내부적으로 도는 프로세스를 모두 이해한 것이 맞나요?
장은미 넵!
책 열기 10일차.
책은 술술 넘어가는데 5번 문제 이게 뭔가 한참 고민하다가 댓글 봐도 대충 알 것 같은데 이게 뭔 소리 인가 싶다가
p.143 세번째 리스트안에 리스트보고 이해되었네요.
output = [ [ 좌표0 ] , [ 좌표1 ] , [ 좌표2 ] ]
나머지가 0인 좌표에 그 회차 숫자를 넣어라.
풀어놓고도.....
이게 영상 뒤에 추가로 3번 특이 풀이 부분 보니 단박에 이해가 가네요.
감사합니다.~~
if 절만 입력했더니 오류가 뜨더라구요, 왜 굳이 for in반복문이 들어가야하는지 설명해주실 수 있으세요?
전체 코드와 오류 내역을 보여주세요!
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를 확인해야 결과를 알 수 있습니다...!
@@윤인성 ㅇㅏ 그렇네요..!! 감사합니다 ㅎㅎ 인강 잘 듣고 있습니다 ㅎㅎ!!
연습분제 5번에서
for number in umber:
output[number % 3].append(number)
--> 이렇게하면 리스트에서 3부터 들어가는이유가 이해가 되질 않습니다.
print(output)
for number in umber:
output[(number - 1) % 3].append(number)
---> -1을 할경우 3,6,9가 맨 뒤로 가는 이유가 output[[0],[1],[2]]
ouput[0] -1 = ouput[2] 이기 때문인가요?
print(output)
1%3=1
2%3=2
3%3=0이므로
3이 0번째, 1이 1번째, 2가 2번째 위치에 꼽힙니다.
@@윤인성 이해됬습니다 감사합니다~
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번의 경우는 리스트를 문자열로 변환하는 일 자체가 없으므로 그냥 그러려니 한 뒤에 넘어가시면 좋을 것 같습니다.
안녕하세요 ^^ 3번문제에서 출력값을 붙여서 쓸수는 없을까요? 375 는 홀수입니다.를 375는 홀수 입니다. 형식으로 할 수 있는지 궁금합니다
문자열 연결 "+" 연산자를 사용하는 형태로 바꿔주시면 됩니다!
@@윤인성 배열로 선언한것도 문자열로변경하면 가능한가요?
@@인버스냐레버냐 가능합니다. 다만 현재 코드에서는 따로 그러실 필요도 없이 반복문 돌 때 내부에서 숫자를 문자열로 변환한 뒤 결합하시면 됩니다!
@@인버스냐레버냐 for number in numbers:
....str(number) + "는 ㅇㅇ입니다."
또는
...."{ㅇㅇ}는 ㅇㅇ입니다.".format(number)
로 str(number) 또는 format() 함수로 변환해서 사용해주시면 됩니다.
강의에서는 두 번째 방법으로 12:19 처리하고 있습니다!
numbers = [273, 103, 5, 32, 65, 9, 72, 800, 99]
for number in numbers:
if number % 2 == 0:
print("{}는 짝수입니다.".format(number))
else:
print("{}는 홀수입니다.".format(number))
이렇게 코드를 짠후 test.py로 저장하고나서 터미널에 python test.py
를 치니
PS C:\혼공파이썬> python test.py
File "C:\혼공파이썬\test.py", line 6
else:
^^^^
SyntaxError: invalid syntax
라고 뜨네요 뭐가문제인가요?
현재 주신 코드를 복사해서 실행했을 때 문제가 없습니다.
아마도 코드를 완성하기 전에 저장하고 실행해서 오류가 발생하는 것으로 보입니다!
코드를 다시 한 번 저장하고 실행해보세요!
확인문제 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로 값이 나아가면서 리스트의 없는 부분을 잡게 됩니다(그래서 오류가 납니다).
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() 함수로 벗어나시고 외부의 일반 쉘(윈도우는 파워쉘)에서 진행하시기 바랍니다.
선생님 근데 비쥬얼 스튜디오 코드에서요, 새파일 만들고 코드 작성 후에 ctrl+s로 세이브하고 run 하면 syntax error invalid syntax라고 오류메시지가 나오는데 왜 이러는걸까요? 실제로 코드에 오류는 없는 상태고, 그대로 비쥬얼 스튜디오 껐다가 새로키고 run 하면 제대로 실행 되요. 세 네번째 이러니까 제가 뭔가 실수하고 있는게 있나 싶네요
오류 메시지 전체를 올려주실 수 있을까요? 추가로 버튼 눌러서 실행하는 것보다는 강의처럼 명령어를 쓰는 것에 익숙해지시는게 이후에 활용도가 훨씬 높습니다!
독학으로 왠만큼 python 익혔지만 이 강의 들으면서 체계적으로 정리해가는 중인 1인입니다.
요번 확인문제는 저도 으잉?하면서 직접 타이핑해서 풀어봤네요ㅎㅎ
좋은 강의 감사합니다~ 중간중간 해주시는 잡담이 굉장히 와닿고 도움이 되네요^^
40대 중반..혼공파...쉽지 않네요!! 강의 내용은 무리없이 따라갔는데..확인 문제 5번에서..완전
멘붕!!! 다행히도...댓글에서 힌트를 얻어 해결하고 갑니다!! 감사합니다.
반복문+함수 부분이 제일 힘들다보니 @_@ ...!! 여기만 넘어가시면 나머지는 쉬울 것이라 생각합니다 @_@ ...!
서신영님 화이팅 입니다. 저도 늦은 나이에 맘 먹고 해보려는데, 맘만 앞서는것 깉다는 생각이.... 늘 화이팅 입니다.
저도 40대인데, 전 이해조차 못했어요. 오늘 하루종일 생각하고 있는데 배열 자리수 안의 숫자들이 %3을 주면 왜 append가 뒤에 붙는 위치가 제 생각대로의 숫자가 나오질 않네요. 뭔가 약간의 햇갈림에 이해안되는 원인 중 하나일텐데 그걸 못찾고 있네요.
항상 강의 잘 보고 있습니다. 그런데 마지막 확인문제 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 넵 그렇습니다....!
@@윤인성 감사합니다..! 그럼 질문 하나만 더 하겠습니다. 지금 제가 공부하고 있는 방법이 일단 강좌를 먼저 보고 해당 파트 책에 있는 부분 전부 코딩해보고 해석해보고 확인문제 다시 풀어보고 막히면 다시 강좌보고 이런식으로 하고있는데 .. 더 나은 방법이 있는지 알고싶습니다.
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. 책은 그냥 이후에도 머리에서 고민하면서 떠올려볼 수 있게 넣은 것입니다.
따라서 조급하게 생각하지 마시고
느긋느긋하게 생각하시는 것을 추천합니다!
항상 뭔가 새로 배울 때는 처음에 "아 내가 이거 안되는거 아닌가?"라는 생각을 계속 마주하게 되는데
그걸 계속 반복하면서 어떻게든 하다보면
어느 순간 돌파되는 것처럼[물론 또 이후에 영역을 계속 공부하면서 반복되는 발상이지만]
어느 순간부터 이해되실거라 생각합니다.
"우리 아이가 숫자도 제대로 못 세고, 덧셈도 못하고 좀 이상한거 아닌가"하다가도
어느 순간 숫자도 세고, 덧셈도 하고, 구구단도 외우고 수학 문제를 풀어나가는 것처럼요!
@@윤인성 감사합니다. 여전히 온전히 이해하진 못했지만 어느정도 짐작할 정도는 된듯합니다.
numbers = [1,2,3,4,5,6,7,8,9]
output = [[],[],[]]
for number in numbers:
output[(number - 1) % 3].append(number)
print(output)
실행 값이 왜
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
이렇게 나오는지..
도저히 이해가 안가요 ㅠ
output 에 number를 하나씩 넣어주면 처음에 (1-1) % 3, (2-1) % 3, (3-1) % 3..
이게 아닌건가요?
넵 그렇게 되는 것이 맞아서 리스트의 0,1,2,0,1,2,0,1,2 위치에 차례차례 들어가는 것입니다!
질문있어요!!
비주얼 스튜디오 코드의 터미널에서 실행해봣는데
>>> 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는 따라서 들여쓰기 오류를 의미합니다.
인터랙티브 셸에서 입력할 때 각 줄 앞에 들여쓰기를 넣어주는게 쉬운 일이 아니라[한 줄 일 때는 괜찮은데, 여러 줄 되면 문제에, 이게 오류가 나중에 뜨니 오류 뜨고 나면 처음부터 다시 입력해야해서], 들어쓰기가 있는 구문들은 인터랙티브 셸에서 잘 사용하지 않습니다[그냥 간단한 한 줄 테스트 용도].
마무리문제 2번에 저는 if numbers >=100: 이렇게 적었는데 오류가 나더군요 numbers가 리스트라서 오류가 나는 것인가요 ?? 맞다면 리스트는 왜 안되는 걸까요????
전체 코드와 함께 오류 메시지도 복사해서 붙여넣어 올려주실 수 있을까요!
@@윤인성 numbers = [273,103,5,32,65,9,72,800,99]
for number in numbers:
if numbers >= 100:
print("- 100 이상의 수:", number)
------------전체 코드입니다----------
122342141234125-MacBookPro 혼자공부하는 파이썬 % python3 number.py
Traceback (most recent call last):
File "/Users/341341234214/Downloads/혼자공부하는 파이썬/number.py", line 4, in
if numbers >= 100:
TypeError: '>=' not supported between instances of 'list' and 'int'
1234123412341341341-MacBookPro 혼자공부하는 파이썬 %
-----------오류 메세지 입니다!!----------
넵 리스트라서 안 되는 것입니다.
리스트에 숫자 비교는 파이썬에 구현되어있지 않습니다[그냥 생각해도 어떤 식으로 동작해야할지 생각이 안 되기도 하고]
for문에서
for 키 변수 in 딕셔너리:
코드
이런식으로 사용을 하잖아요? 이때 키 변수는 제가 임의로 아무문자열로나 잡아줄 수 있는거구요..
그런데 이때 키 변수를 어떤 식으로 컴퓨터가 인식하는지 궁금합니다.
딕셔너리일때는 앞에서부터 키와 값에 차근차근 접근하는 것 같고,
리스트일때는 앞에서부터 요소에 차례대로 접근하는 것 같고 그런데
이게 컴퓨터가 어떻게 인식을 하길래 순서대로 인식이 되는 건지 모르겠습니다.
만약 0,1,2,3,4,...이렇게 인식을 한다면,
딕셔너리는 값을 가져올때
딕셔너리명[키]
이렇게 입력해주어야 하므로 숫자로는 저렇게 차례대로 접근하지 못할 것 같은데..
답변해주시면 감사드리겠습니다!
3.7버전 이전의 딕셔너리는 순서를 전혀 보장하지 않았습니다(일반적으로 어떤 값으로 순서 없이 키로 뭔가를 찾는 자료형을 해시, 해시맵 등으로 부르는데, 대부분의 프로그래밍 언어는 이 순서를 보장하지 않습니다).
하지만 3.7버전부터는 "넣은 순서"대로 들어가게 되었습니다. 다만 딕셔너리에 어떤 값을 넣었다면, 이는 "순서가 상관 없는 것"이므로 순서에 얽매이지 않게 만드는 것이 좋습니다(프로그램들끼리 커뮤니케이션을 거치는 과정에서 순서가 훼손될 가능성이 있습니다).
만약 순서가 중요하다면 리스트를 사용하는 것이 좋습니다.
@@윤인성 감사합니다!
평소에 강사님 좋은 수업 잘 듣고 있는 학생입니다! 5번 문제에서 외우려고 해도 이해가 살짝 부족해서 질문드립니다.
만약 list = [ [ [ ], [ ] ] , [ ] ]의 경우라면 넣는 방법이 있을 까요?
복잡하게 구현하면 어떻게든 되겠지만, 강의처럼 수식 하나로는 안 되며, 의미가 전혀 없는 코드입니다.
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번째에 꼽힙니다. 생각이 들었으면 실제로 돌려서 직접 눈으로 확인해보시는 것을 추천드립니다...!
5번 문제항에서 어려움을 겪고 있으며매우 점점 혼란 스러워집니다 선생님. 1. output =[[],[],[]] 실행결과가 숫자가 나누어 지기 위해 설정한 값(?)인가요? 그리고 왜 output[(number-1)%3].append(number) 이 되는지 도저히 어떻게 생각해야 되는지 모르겠습니다. 도와주세요 ㅜㅜㅜㅜ
"어떤 것을 기대했는데 어떤 것으로 되어 있어서 모르겠다"의 "어떤 것을 기대했는데"를 써주시면 조금 더 자세히 답변이 될 것 같습니다. 해당 문제의 질문은 댓글로도 좀 많아서 댓글을 쭉 둘러보시는 것도 추천드립니다.
@@윤인성 number 뒤에 -1 과 %3 을 어떻게 찾아서 알 수 있는지를 모르겠습니다.
리스트 내부에 리스트(요소)가 3개이므로 3을 썼고, -1은 인덱스를 그렇게 당기기 위해 쓴 것입니다. 숫자를 변경해보시면서 실행결과를 생각해보시면 쉽게 이해될 것입니다.