3번의 해설을 적어봅니다. 동영상으로는 이해가 안되어 한참 생각하다가 적어봤습니다. 3번을 이해하기 위하여 먼저 p163의 라인 17을 다시 보자. dictionary ["name"] = "8D 건조 망고" 라는 코드로 인하여 dictionary의 "name"이라는 키를 가진 요소의 값이 "8D 건조 망고"로 변경되었다. 여기서 "name"은 키의 이름이다. 즉 '딕셔너리명 [키 이름] = 그 키를 가진 요소의 값'이라는 코드로 인하여 요소의 값이 변경된다. 마찬가지로 counter[number] = 1 또는 counter[number] += 1이라는 코드로 인해 counter라는 이름을 가진 딕셔너리의 number라는 키를 가진 요소의 값이 1이 되거나 +1씩 증가된다. 첫번째 루프를 보자. for number in numbers라는 코드는 "numbers라는 리스트에 있는 모든 각각의 반복자를 number라고 명명함과 동시에 이 반복자들을 모두 반복하면서 아래의 코드를 실행하라"라는 뜻이다. 그러므로 numbers[0]인 1이라는 요소가 제일 먼저 루프로 들어간다. 1이 counter에 없으니까 counter[1] = 1이 실행된다. 여기서 좌측의 1은 키, 우측의 1은 그 키를 가진 요소의 값이다. 그러면 아무 값도 들어있지 않던 counter는 일단 {1:1}로 변경된다. 두번째 루프인 2 역시 counter에 없으니까 counter[2] = 1이 실행된다. counter는 {1:1, 2:1}이 된다. 다음으로는 6이 들어가고 counter는 {1:1, 2:1, 6:1}이 된다. 이런 식으로 {1:1, 2:1, 6:1, 8:1, 4:1, 3:1}까지 되고, 이번에는 2가 들어가는데 이 때는 2가 이미 counter에 있으므로 counter[2] += 1이 실행된다. 그러면 counter는 {1:1, 2:2, 6:1, 8:1, 4:1, 3:1}이 된다. 이런 식으로 반복되면 최종적으로 책에 적혀있는 실행결과와 같아진다. (책도 이렇게 하나 하나 풀어서 서술해주시면 정말 좋겠습니다. 저 같은 초보자에게는 이런 게 꼭 필요합니다. )
물론 다들 능숙하신 수준이시라 헷갈릴 일은 없으시겠지만, elif구문 하위 for문에 반복자가 리스트에 해당하는 "skill"이 아니라, 딕셔너리로 제시되어있는 "item"으로 소스가 구성되어 이해하는데 혼선이 있을 수도 있겠다는 생각이 드네요! P.S. 동영상을 다시 보면서, if, elif, else구문별로 쪼개 실행하니 이해가 되었네요~!
안녕하세요. 강의 잘 듣고 있습니다. 궁금증이 있어 질문 남깁니다. 첫번째 3번 문제에서 출력이 {1:3....}으로 나오는데 print에서는 : 표시를 해주지 않았는데 1:3 ,~ 로 나오는거는 python 내부 기능인가요? 두번째 4번 문제에서 print("{}:{}".format(k, character[key][k]))
대괄호는 요소라서 감싸주는 것이 아니라 "인덱스"와 "키"라서 감싸주는 것입니다! 리스트와 딕셔너리 뒤에 [인덱스 또는 키]를 넣으시면 요소를 꺼낼 수 있습니다. 강의 내용이 조금 어렵게 느껴진다면 개정판 강의를 추천드립니다! 개정판 강의는 2배 분량으로 차근차근 느리게 설명합니다!
와... 3,4번이 복병이었네요 처음 보고 이걸 어떻게 풀지 하고 한시간 동안 앓다가 이건 아니다 싶어서 답안지 보고 3번은 바로 이해 했는데 4번은 봐도 어찌 이렇게 되나 싶어서 4번만 30분 동안 혼자보고 이해했네요.. 그리고 4번을 하면서 For문에서 변수자에 어떠한 값을 주고 출력에서 변수자명을 그대로 쓰면 전체를 리스트 형태로 출력하고, 어떠한 값에[변수자명]을 쓰면 노멀하게 아래로 내려가게 출력하는 것도 알았네요 이때 제가 진짜 이 길에 재능이 없구나 했는데 다른 분들도 4번이해하는데 힘드셨다기에 위안?이 됩니다 ㅠㅠ
처음 운동을 하면 팔굽혀펴기 10개 하는 것도 힘들어서 + "이걸 어떻게 100개나 사람이 할 수 있냐"하는 생각이 드는데 . 어느 정도 근육이 붙고나면 그냥 쉽게 되는 것처럼, 개발 실력도 조금씩 조금씩 늘리시면 나중에는 "내가 왜 이걸 못했었지 ㅋㅋㅋㅋ"하고 그냥 재미있게 회상할 수 있는 날이 올 것입니다!!
12:30 if type(charater[key]) is dict: 부분과 elif type(charater[key]) is list: 부분이 이해가 가지 않습니다. if type(charater[key]) is dict: 에서 해당되는 문장은 "items" : {"sword" : "불꽃의 검", "armor" : "풀플레이트" }인데 이 경우 key는 "items"이고 value는 {"sword" : "불꽃의 검", "armor" : "풀플레이트" }일텐데 왜 key로 작성하면 인식하는 건가요? 위와 마찬가지로 elif type(charater[key]) is list: 에서도 해당되는 문장은 "skill" : ["베기, "세게 베기", 아주세게 베기"] 이기에 type이 list 인것은 key(skill)의 value값인 ["베기, "세게 베기", 아주세게 베기"] 이 list로 인식되어야 하지 않나요? 왜 파이썬이 key의 속성이 아닌 value의 속성으로 이해하는 건가요?
4번 문제에서 왜 str을 먼저 하지 않고 dict먼저 if문에 넣는건가요? 특별한 이유가 있을까요? 그리고 첫 print부분을 "{} : {}".format(small_key, character [key][small_key]이런 형식으로 바꾸면 syntaxerror가 나는데 왜 이러는 건가요?
앗 추가적인 정보를 주실 수 있을까요? 1. 전체 코드를 올려주세요! 어떤 코드를 어떻게 바꿨는지 약간 이해하기 힘듭니다[변경 중에 오탈자가 나시는 경우가 많아서요][현재 주신 코드는 닫는 둥근 괄호가 없어서 문법 오류가 납니다]. 2. "str을 먼저 한다"가 어떤 부분에서 이루어져야 한다고 생각했는지 알려주실 수 있을까요!
ㅎㅎㅎ 그래도 밑에 아주아주 작게지만 넣어주셨네요...^^ 이제와서 질문 있습니다. 윤인성님 실행 화일엔.. 화일 경로가 ~ > 이렇게 나오시잖아요. 저는 C:\Users\..... 폴더이름까지.. 길게 나오는데, 어떻게 ~ > 나오는건지요? 칼라도 다르구요... (그 전부터 너무 궁굼했는데, 진도가 나가도 모르겠어서...ㅋㅋ 여쭤봅니다.)
질문이 있어서 댓글을 남깁니다. 연습문제 4번에서 가장 마지막줄인 else: print("{} : {}".format(key, character[key]))로 입력을 하였으나 실행시켰을 때 4번째armor와 5번째skill 사이에 딕셔너리인 items가 한줄이 더 생겨버립니다.. 12번째줄에서 if type(character[key] is dict:가 들어가면 딕셔너리가 뒤에는 안들어가야 하는거 아닌가 해서 질문드립니다.. 강의는 항상 잘 듣고있습니다 여러번 반복해보면서 따라가니 재미있네요 항상 감사합니다
안녕하세요 선생님 혼자 공부하면서 궁금한 점이 있어서 여쭤보게 되었습니다. 직접해보는 손코딩 p.163에 name:7D건조망고 type:당절임 ingredients1:망고 ingredients2:설탕 ingredients3:메타중아황산나트륨 ingredients4:치자황색소 origin:필리핀 이렇게 표현을 하고 싶어서 해보니 dictionary={ "name":"7D건조망고", "type":"당절임", "ingredients":["망고","설탕","메타중아황산나트륨","치자황색소"], "origin":"필리핀" } numbers = [1,2,3,4] i=-1 for key in dictionary: if type(dictionary[key]) is not list: print("{}:{}".format(key,dictionary[key])) elif type(dictionary[key]) is list: for ingredient in dictionary[key]: i+=1 print("{}{}:{}".format(key,numbers[i],ingredient)) 이렇게 해야 원하는 결과가 나오는대 꼭 i=-1이렇게 시작을 해야 하는 건가요?
한 곳을 수정하면 일반적으로, 다른 곳도 수정해야 합니다. 마지막 두 줄을 함께 수정해야 하는데요. 1. i += 1을 하고 나서 2. numbers[i]를 출력하기 때문에 -1로 시작해야, numbers[i]를 할 때 i의 값이 0, 1, 2, 3이 됩니다. 0부터 시작하게 수정하고 싶으시다면, 1. numbers[i]를 먼저 출력하고[그래야 0부터 시작] 2. i += 1을 하게 만들면 0부터 시작해야 numbers[i]를 할 때 i의 값이 0, 1, 2, 3이 됩니다!
목소리가너무 좋고, 꼼꼼하게 설명해주시는 것 같아 책을 구매해서 듣고 있습니다.꼼꼼하게 설명해주시고, 코드를 하나하나 해독해주시는 느낌이 들어서 정말 이해가 잘 갑니다.파이썬 관련해서 여러 강의를 듣고 해보았지만, 이렇게 상세하고 자세히 해주시는 분은 없었던 거 같네요.열심히 들어서 완강해보겠습니다ㅎㅎ다음에 기회가 되신다면 numpy, pandas, excel과 관련하여 파이썬 책을 쓰시거나 강의를 해주실수는 없을런지요ㅎㅎ
질문있습니다! 확인문제 4번에서 다른건 이해가 가는데 if type(character[key]) is dict: for k in character[key]: print("{} : {}".format(k, character[key][k])) 여기 부분이 이해가 안갑니다.. 혹시 말로 해설 설명 가능하실까요...
@@baseball1098 딕셔너리를 반복하면, 반복 변수에 키가 들어갑니다. 따라서 character[key]하면 딕셔너리의 요소가 잡힙니다. . 그런데 이 character[key]가 딕셔너리 또는 리스트라면 character[key][키]로 또 내부에 있는 요소를 꺼낼 수 있습니다!
좋은 강의 감사합니다.^^ 4번 문제에서 15행의 elif를 실수로 if로 입력했더니(14:39), 결과에 "item":{"sword":"불꽃의 검", "armor":"풀플레이트"}" 요렇게 한 줄이 추가로 출력됩니다. 분명히 dictionary인데 else절에도 걸리는 것 같은데 왜 그럴까요? 도저히 모르겠어서 질문드립니다!
4분에 적힌 식은 잘못된거 아닌가요? get함수를 쓰는 이유가 존재하지 않는 키라면 오류가 아닌none을 출력하기 위해서인데 4분에 나와있는 식을 쓴다면 아무것도 출력되지 않습니다 if조건문 아래 식에 print를 추가해도 none은 출력되겠지만 else조건문 아래 식이 이상합니다 존재하지 않는키가 아닌 존재하는 키를 입력하면 키 값를 출력해줘야 하는데 키 값을 출력하는게 아니라 "없는 키입니다" 가 출력됩니다 if줄에 같다(==)가 아니라 다르다가 왔으면 print를 추가하면 말이 되지만 ==그대로 둔다면 if조건문 아래 식에print를 추가하고 else조건문 아래 식과 위치를 바꾸어야 하는것 아닌가요?
4-2 예제 문제에서 딱 막히네요.. 앞에부분 책 보면서 계속 반복해서 익숙해져야 하는지,, 잘 모르는 상태에서 진도를 그냥 나가야 하는지요? 앞에 책보면서 설명 보기에는 어느정도 이해가 가는데 문제를 딱 풀려고 하면..까막눈이 되어 버리네요.ㅜㅜ 혼자 책보면서 공부 하는게 힘드네요.. 생전 처음 접해보는거라 그리고 159페이지에 5번 문제가 이해가 안가는데.. 이 문제 설명해놓은 동영상이 있나요?? 왜 안보이죠;ㅜㅜ
5번 문제는 강의 진행하다보면 나오는 것으로 알고 있습니다[강의 찍은지가 오래 되서 몇 강 인지는 정확하게 모르겠군요][질문이 굉장히 많이 들어오는 예제 중 하나라 😂]. 반복문 쪽 강의를 쭉 들어보신 뒤 + 댓글들을 보면 많은 분들이 질문을 주셔서, 보시다보면 "나도 이런 부분이 헷갈렸는데" 등등을 같이 보시면 좋을 것 같습니다. 반복문이 이해가 안 되신 것이라 앞의 변수 조건문 가도 의미가 없고 뒤로 나가도 반복문은 계속 이해가 안 될 것입니다. 제일 좋은 것은 진도는 빼면서 + 반복문 부분 계속 보는 것입니다. 한 문제에 2-3일 하루 종일 잡고 있어도 정상입니다(그리고 못 풀어도 정상입니다)(생각했다는 것에 의미가 있습니다). 계속 이해가 안 되고 그러다가도, 계속 생각하다보면 어느 순간 막히는 부분이 뚫리고 이해하실 수 있을 것이라 생각합니다!
@@윤인성 조언 감사합니다. 강사님 말씀대로 일단 진도는 조금씩 빼면서, 앞에부분 계속 반복하고 있습니다. 책 한권이 대학교 6개월~12개월 정도 진도 양이라고하니.. 위로가 되네요!! 한달정도 되었고,,, 다른 분들은 질문하는 수준이 저랑은 틀린거 같아.. 막막해 하고 있었는데, 계속 반복해봐야 겠네요!! 다음날 되면 아리까리해도, 열심히 하다보면 제것이 되겠죠.!!
안녕하세요 선생님. 지금도 질문 하면 보시는지 모르겠지만 4번 구문이 3일째 이해가 안되서 남겨봅니다. 앞 강의에서 for 중첩문은 ● list_test = ["a", "b", ...] for a in list_test : for b in a: print(b) 식으로 진행이 되던데 4번 문제는 ● for key in character: for k in character[key]: print(....) 형식으로 진행이 되서 조금 헷갈립니다. character[key] 대신 위에 썼던 key 변수를 쓰면 오류가 생기는데 이유가 궁금합니다. 결국 key 변수 안에 name, level, items, skill이 차례로 들어올텐데 따로 character[key]를 써서 리스트나 딕셔너리를 불러오는 이유가 궁금합니다. 에를 들어 skill이라는 character의 키도 결국엔 skill = ["베기"...]란 리스트를 담고 있는 변수 아닌가요? 만약 문제에서 skill = ["베기", "세게 베기"....]를 for문으로 출력하라고 했다면 ● for key in skill: print(key) 식으로 했을텐데 4번 구문에서 ● for key in character: for k in character[key]: print(....) character[key]를 사용하는 이유가 궁금합니다. 저는 변수 key(=4번 구문 기준 items나 skill 같은 친구들)도 결국 character 처럼 하나의 리스트를 담고 있는 변수로 보고 있습니다.
일단 "리스트"는 "리스트의 요소 하나하나"가 반복 변수로 들어가고 "딕셔너리"는 "딕셔너리의 키 하나하나"가 반복 변수로 들어갑니다. 따라서 딕셔너리로 반복을 돌릴 때, 딕셔너리의 값에 하나하나에 접근하려면 """" for 키 in 딕셔너리: ....딕셔너리[키] # 를 사용해야 합니다. """" 실제로 코드를 작성해볼 때, 반복문 내부에 print(key, character[key])를 넣어서 무엇을 출력하는지 확인해보시면 더 확실하게 이해하실 수 있을 것 같습니다!
항상 강의 잘 듣고 있습니다! 궁금한 점이 하나 생겨서 질문을 하는데, 문제 4번에서 for item in character: if type(character[item]) is dict: for k in character[item]: print("{}:{}".format(k, character[item][k])) elif type(character[item]) is list: for i in character[item]: print("{}:{}".format(item, i)) else: print("{}:{}".format(item, character[item])) 라고 코드를 작성하면 잘 실행되는데, for item in character: if type(character[item]) is dict: for k in character[item]: print("{}:{}".format(k, character[item][k])) if type(character[item]) is list: for i in character[item]: print("{}:{}".format(item, i)) else: print("{}:{}".format(item, character[item])) 이라고 코드를 작성하면, 즉, 두 번째에 나오는 elif 대신 if 를 사용하게 되면 items:{'sword': '불꽃의 검', 'armor': '풀플레이트'} 이라는 항목이 출력되는데, 그 이유가 궁금합니다! 감사합니다
위의 코드의 경우 - if + elif + else 키워드로 조건문 그룹 1개 아래 코드의 경우 - if 키워드 하나로 조건문 그룹 1개 - if + else 키워드가 한 쌍이라 조건문 그룹이 추가 1개 이 됩니다[따라서 전부 2개]. --- 위의 코드는 - 딕셔너리가 아니면 - 리스트가 아닌지 비교하고 - (딕셔너리도 아니고 +) 리스트도 아니면 그냥 출력 하는 형태로 작동하지만, 아래 코드의 경우 - 1번째 조건문 그룹: 딕셔너리인지 확인 - 2번째 조건문 그룹: 리스트인지 확인 - 2번째 조건문 그룹: 리스트가 아니면 그냥 출력 하게 됩니다. 따라서 딕셔너리인 경우 - 1번째 블록을 지나면서도 출력되고 - 2번째 블록을 지나면서도 "리스트가 아니니까!!"하고서 else 구문으로 들어가서 출력하게 됩니다.
안녕하세요! 항상 좋은 강의와 책 감사드립니다. 다름이 아니라 4번에 에러가 뜨는 코드가 하나 있어서 질문드립니다. for key in character: if type(character[key]) is str or type(character[key]) is int: print("{} : {}".format(key, character[key]) elif type(character[key]) is dict: for item in character[key]: print("{} : {}".format(item, character[key][item])) else: for i in character[key]: print("{} : {}".format(key, i)) 그냥 dict, list, str의 순서만 바꿨을 뿐인데 왜 에러가 나는 것인지 궁금합니다. elif문의 is부분이 다른 is들과 다른 색으로 표시되네요ㅠ
아무렇게나 해도 됩니다...! 일반적으로는 키는 k로 쓰고 리스트의 요소를 말할 때는 - 큰 의미 없으면 e 또는 elem 또는 element 등을 쓰고 - 좀 의미를 두는 경우(이건 items의 요소니까 item이야)에는 item 등을 사용합니다. 이건 당연히 자유입니다...!
안녕하세요 선생님 마지막 문제에서 제가 작성한 코드가 for key in character: if type(character[key]) is list: for numbers in character[key]: print("skill:",numbers) elif type(character[key]) is dict: for subkey in character[key]: print(subkey,":",character[key][subkey]) else: print(key,":",character[key]) 이거였는데 5행에서 elif가 아닌 if로 작성시에 Skill=["베기","세게베기","아주세게베기"]가 한번 더 출력되더라구요 그 이유를 알 수 있을까요?
안녕하세요. 항상 강의 잘 듣고 있습니다! get 함수 설명해주실때 왜 >>> if dictionary.get("나이") == None: print("없는 키입니다") 가 아니라 >>> if dictionary.get("나이") == None: dictionary.get("나이") 를 쓰고 else 구문으로 출력을 해야하는지 이해를 못하겠습니다. 감사합니다.
안녕하세요 귀한강의 잘 듣고 있다가 처음으로 질문 남겨보는 코딩어린이입니다.. 강의 마지막 문제(name:기사, level:24...등을 출력하는 예제)의 마지막 else구문에서 print("{}".format(key))라고 적어봤더니 name 과 level 만 출력이 되었습니다. 궁금한 것은, 예제와 같이 딕셔너리 형태의 식(?)에서는 key라는 임의의 값(다른 아무 문자나 해도 상관은 없겟지요)을 format에 넣으면 사전의 key값만 나오고 ":" 뒤의 값 부분은 출력이 안되는 것인가요?? 질문이 이해할 수 있게 적었을지 모르겠네요...ㅠ 감사합니다
4번문제에 이렇게 넣었더니 for반복문 맨위에 행에서 unexpected indent로 뜨는 이유는 멀까요? for key in character: if type(character[key]) is dict: for k in character[key]: print("{} : {}".format(k, character[key][k])) elif type(character[key]) is list: for item in character[key]: print("{} : {}".format(key, item)) else: print("{} : {}".format(key, character[key]))
unexpected indent 오류는 들여쓰기에 문제가 있을 때 발생하는 오류입니다. 현재 주신 코드 내에서는 문제가 없어 보입니다. (1) 저장을 안 해서 이전에 작성된 코드가 실행되었거나 (2) 해당 부분 이전 줄의 코드가 다음 줄에 영향을 주고 있는 것 같습니다. . 1번으로 문제가 발생하는 경우가 꽤 많아서 저장하고 실행해보시는 것을 추천드립니다.
numbers=[1,2,3,4,5,1,3,5,1,5] counter={} for number in numbers: if number in counter: counter[number]+=1 else: counter[number]=1 print(counter) 선생님 여기서 print앞에 뛰어쓰기(텝)에 따라서 출력 값이 완전 달라져요. 왜 이렇게 되는지 잘 이해가 안 돼요
안녕하세요 4-2 확인문제 4번 질문드립니다. for key in character: if type(character[key]) is str or int: print(key, ":", character[key]) if type(character[key]) is dict: for i in character[key]: print(key, ":", character[key][i])
elif type(character[key]) is list: for i in character[key]: print(key, ":", i) 이렇게 코드를 작성했는데 딕셔너리의 키와 결과값을 한꺼번에 가져오는 부분이 생겨서 왜 그런지 알고 싶습니다.. 감사합니다!
좋은 강의 감사합니다. 강사님 따라 비주얼 스튜디오 코드에 직접 입력해보고 있는데, 저는 어째서인지 위의 영상 속 처럼 문자나 숫자 등에 따라 색으로 변하여 입력되거나, 코드 입력 및 저장 후에 터미널 이동시 값이 나타나지를 않습니다.. 어떤 부분이 문제인 걸까요? ㅠㅠ
현재 사용하시는 표현으로 어떤 상황인지 감이 하나도 안 잡히는데 1. 색이 나타난 상태의 코드가 어디의 무엇을 의미하는 것인지 알려주세요. 2. 그저 무색일 때의 코드가 어디의 무엇을 의미하는 것인지 알려주세요. [VSCode에 위의 에디터에서 입력한다는 것인지 Powershell/CMD/Terminal(맥)에서 입력한다는 것인지 VSCode 위에 Terminal 패널을 띄우고 입력한다는 것인지 파이썬 인터랙티브 셸을 의미하는 것인지 정확하게 알려주세요.] 3. 추가로 값을 도출시킨다는 표현이 프로그램을 실행한다는 의미인가요? 조금 더 일반적인 표현으로 자세하게 써주시면 감사하겠습니다!
@@윤인성 아! 제가 이상하고 너무 기초적인 부분에서 큰 실수를 했었습니다! 파일을 저장하고 실행하는 과정에서 저장할때 .py를 붙였어야 했는데 그러지 않아서 아무것도 되지 않았던.. 너무나 어이없는 실수를 했었습니다..!! 바쁘신 와중에도 답변 남겨주셔서 정말 감사했습니다!!
안녕하세요 강의 잘 듣고 있습니다. 저는 마지막 확인문제를 if type(character[key]) is str or int : elif type (character[key]) is dict : else : 이런식으로 하였는데 if에서 다 True가 되어서 elif로 넘어가지 않았습니다. 나중에 if type(character[key]) is str : elif (character[key]) is int: elif (character[key]) is dict: else : 이렇게 하면 답과 같이 나왔습니다. is 와 or을 같이 사용하면 안되는 것인가요? 어떻게 계산이 되어서 모든자료형이 다 type is str or int 에 들어가게 된것인지 이해가 안가네요 ㅠㅠ
or 연산자는 양쪽에 불 표현식이 와야해서, 모든 프로그래밍 언어가 ㅇㅇ is ㅇ or ㅇ 등으로 영어 문장처럼 표현할 수 없습니다. (ㅇㅇ is ㅇ) or (ㅇㅇ is ㅇ) 형태로 사용해주셔야 합니다. 이해보다는 관용구로 외우는 방법 밖에 없는 형태입니다![초보자 때 많이 실수하는 코드라 대학교 1학년 1학기 중간고사 등에 일단 무조건 나오는 문제 중 하나입니다]
쌤 안녕하세요 계속 디버깅 찍어보는데도 이해가 안되서 문의드립니다. 문의드릴 사진 링크 : iron-catsup-ec4.notion.site/173-4-951da70e013d41f7868894aa1de35edd (위 노션에다가 올려놓았습니다.) (아래는 질문내용입니다.) 처음 for문에서 개행하면서 변수값을 계속 추적하면서 값을 확인하고 있는데요, 마지막으로 콘솔창에 > armor : 풀 플레이트 라고 찍히고는 것 까지는 명확히 이해했습니다. 여기서 제 생각은 14행의 print("{} : {}".format(k, character[key][k])) 를 마치고 나면 다시 for문 시작으로 돌아가면서 key 값이 items가 아니라 그 다음 skills 로 바뀌어야 한다고 생각했는데, 실제로는 그대로 items로 유지되면서 사진에서처럼 15행으로 개행됩니다. 심지어 마지막 else: 에도 걸려서 콘솔창에 > items : {'sword': '불꽃의 검', 'armor': '풀 플레이트'} 이렇게 출력해버립니다.. 왜 다시 위의 for문으로 안 돌아가고 다음 if문인 15행으로 개행되는지 질문드려도 될까요? 어제도 질문 남겼었는데 오늘도 남기네요... 하루가 다르게 머리에 개념이 들어오는 게 느껴집니다. 감사합니다 쌤
안녕하세요 이 책으로 파이썬 공부하고있습니다. 제가 4번 문제를 풀다가 이렇게 이해하는것이 맞는지 궁금해서 댓글달아봅니다... for key in character: if type(character[key]) is dict: for small_key in character[key]: print(small_key, ":", character[key][small_key]) elif type(character[key]) is list: for item in character[key]: print(key, ":", item) else: print(key, ":", character[key]) 소스코드는 이렇게 적어주셨고 제가 이해한 풀이방법은 이렇습니다. character에서 key로 키를 하나씩 가져오는데 (총 네 개니까 네 번) if 이번에 걸린 키가 딕셔너리라면... --- 이렇게 출력 --- elif 이번에 걸린 키가 리스트라면... --- 이렇게 출력 --- else 이번에 걸린 키가 딕셔너리와 리스트도 아니라면... --- 이렇게 출력 --- 이렇게 이해하고 넘어가면 될까요?? 항상 좋은 강의 감사합니다. !!
안녕하세요 질문이 있습니다 4번 예제에서 1 for key in character: 2 if type(character[key]) is dict: 3 for k in character[key]: 4 print("{} : {}".format(k, character[key])) 5 elif type(character[key]) is list: 6 for item in character[key]: 7 print("{} : {}".format(item, character[key])) 8 else: print(key, ":", character[key]) 이렇게 하였는데 4번과 7번에 character[key] 이렇게 해되 되는 건가요? 풀이에는 (k, character[key]) 그리고 (key, character[key][key]) 라고 되어있는데
실행에는 문제가 없지만, 책에서 원하는 답을 찾으시려면, 책과 같이 해주셔야 합니다(너무 단순한 코드라서 별도의 답이 없습니다). 이중으로 감싸진 리스트이므로, 이중으로 파고 들어가서 접근해주셔야 합니다. 책의 코드는 - 4번이 character[key][small_key]: 키 두 개가 다른 이름의 변수로 들어가 있습니다. - 7번이 item으로 되어 있습니다. 이건 리스트의 요소를 출력하는 것이므로 이렇게 적은 것입니다.
character = { "name": "기사", "level": 12, "items": { "sword": "불꽃의 검", "armor": "풀플레이트" }, "skill": ["베기", "세게 베기", "아주 세게 베기"] } for key in character: if type(character[key]) is dict: for k in character[key]: print("{} : {}".format(k, character[key][k])) if type(character[key]) is list: for item in character[key]: print("{} : {}".format(key,item)) else: print("{} : {}".format(key, character[key])) 코드 전체는 이렇게 생겼습니다.
확인문제 2번을 아래와 같이 작성하였고, 동영상 강의와도 다르지 않음을 확인하였습니다. pets = [ {"name": "구름", "age": 5}, {"name": "초코", "age": 3}, {"name": "아지", "age": 1}, {"name": "호랑이", "age": 1} ] print("# 우리 동네 애완 동물들") for pet in pets: print("{} {}살".format(pet["name"], pet["age"])) 그런데 invalid syntax 뜨는 데 왜 그러는걸까요?
제가 해석한 것이 맞나요? for key in character : -> 캐릭터 안의 내용들을 key라는 방 안에 넣는다 if type(character[key]) is dict : -> 만약 캐릭터의 키값이 딕셔너리면 for k in character[key] : -> k 라는 방안에 캐릭터의 키값을 넣는다. print("{} : {}".format(k, character[key][k])) -> ? 각각의 {}의 자리에 k와 character[key][k]값을 넣는다. 질문이 2개 있습니다. 1. 1번째 줄과 2번째 줄의 key는 서로 다른 것을 의미하는게 맞나요? 2. 4번째 줄에서 .format 옆의 k와 [k]에서 k는 character[key]를 의미하는데 [k]값이 무엇인지 모르겠습니다. 둘이 같은 것 아닌가요? 혹시 알려주실 수 있으신가요?
1. 넵 같은 키입니다! 2. `character[key]가 딕셔너리일 때`라는 조건이 걸렸을 때 for k in character[key]를 돌리므로 → k에는 character[key]라는 딕셔너리 내부의 키가 들어갑니다. 따라서 character[key][k]는 {{"a": 1}}이 있다면, 딕셔너리를 2번 타고 들어가서 요소를 꺼내는 코드가 됩니다!
4번의 자료형을 확인하는 법이 이해가 잘 안가서 여쭤요. a = [1, 2, 3] if type(a) is list == True : print("o") else: print("x") print(type(a) is list) 를 써봤는데요, if를 통해서는 x가 출력되고 print에서는 True가 출력되더라구요. print를 따르면 if에서 첫번째 조건(~~ == True)에 걸려서 o 이 출력되야 할 것 같은데 x 가 나와서 머리 감싸고 있어요... 자료형 확인하는 게 이해가 안가서 작성한 코드가 이해가 안가는 상황이라 멈추어버려서 해설이 필요해요 ㅠ ㅠ...
제가 연습문제 4번을 다시 하고 있는데 순서를 바꿔서 하고 있어요. 조건문을 str 먼저로요. 그런데 chararcter[key] is str:으로 하니깐 name:기사 밖에 안뜨더라구요. 12 때문에 그런 것 같아서 str or int로 바꿔봤어요. character = { "name":"기사", "level": 12, "items" : {"sword":"불꽃의 검", "armor":"풀플레이트" }, "skill":["베기","세게 베기", "아주 세게 베기"] } #for 반복문을 사용합니다. for key in character: if type(character[key]) is str or int: print("{} : {}".format(key,character[key])) elif chararcter[key] is dict: pass else: pass 라고 하니 결과값이 name : 기사 level : 12 items : {'sword': '불꽃의 검', 'armor': '풀플레이트'} skill : ['베기', '세게 베기', '아주 세게 베기'] 이렇게 나오더라구요 ㅠㅠ 왜 이런걸까요..? 딕셔너리랑 리스트가 int로 들어가는건가요?
@@윤인성양쪽을 분리해서 합친다는 말은 이해했습니다! 그런데 or int가 언제나 트루로 나온다는 건 왜 일까요 ㅠㅠ str or int = 문자열이나 정수일 경우..즉 float이나 딕셔너리 리스트 등은 이 경우 안에 안들어가지않을가요 ㅠㅠㅜ 너무어려워요 저 빡통인가바여
자꾸만 질문해서 죄송해요 ㅜㅜㅜ 마지막 부분 코드를 이렇게 입력했더니 for key in character: if type(character[key]) is dict: for k in character[key]: print('{} : {}'.format(k), character[key][k]) elif type(character[key]) is list: for item in character[key]: print('{} {}'.format(key, item)) else: print('{} {}'.format(key,character[key])) IndexError: Replacement index 1 out of range for positional args tuple 인덱스 에러가 뜨네요..... ㅜ 코드 자체는 틀린게 없는거같은데,,, 왜이럴가요 휴,,,, ㅠㅠ
안녕하세요 ! 좋은 강의 감사합니다. 연습 문제 4번에 질문이 있는데요, 4번에서 코드 입력 시 dict, list, str 순으로 입력해주었는데(if type이 dict, elif type이 list, else(str)), 실행 결과, 그 순서가 바뀌어서 str에 해당하는 name, level이 제일 먼저 나오는 이유가 뭔가요??
Hyekyung Lee 파이썬 등의 프로그래밍 언어에서 딕셔너리(다른 프로그래밍 언어에서는 해시, 해시맵 등의 용어로도 부릅니다)는 처리 속도를 위해서 순서를 보장하지 않습니다. 일반적으로 순서를 보장해야 하면 리스트를 사용하고([["name", "기사"], ["level", 12]] 같은 형태)해야 합니다. 다만 파이썬 3.7버전 이후부터는 순서를 보장하는 형태로 바뀌었습니다(대신 위에서 언급한 속도를 잃었....). 그래도 딕셔너리를 순서를 보장하는 형태로 쓸 일이 많지는 않습니다. 현재 파이썬 3.8버전까지는 이 순서 보장과 관련된 버그들이 조금 있다는 보고가 있습니다.
질문입니다... 1. 14line에 .format(k,character[key][k] 에서 character[key][k] 이 부분이 이해가 안가고 2. 17line에 .foramt(key, item) 이 부분에서 왜 key를 먼저써야하나요? 앞에서 item이라 변수 설정했으면 format 앞에 item이 먼저 나와야 하지 않나요?
1. a = [0, 1, 2]처럼 리스트라면 a[0]라고 쓸 수 있는 것처럼 character[key]에 [0, 1, 2]처럼 들어가 있으면 character[key][0]이라고 쓸 수 있습니다. [따라서 딕셔너리, 리스트, 문자열 등이라면 사용할 수 있습니다] 2. 출력은 개인의 마음이므로 아무렇게나 해도 상관 없습니다. 현재는 출력해야하는 실행 결과가 "{키} : {값}"이므로 그렇게 설정한 것입니다.
선생님, 4-2강 2번 연습문제 질문드립니다. # 딕셔너리의 리스트를 선언합니다. pets = [ {"name": "구름", "age": 5}, {"name": "초코", "age": 3}, {"name": "아지", "age": 1}, {"name": "호랑이", "age": 1} ] print("# 우리 동네 애완 동물들") for pet in pets: print("{} {}살".format(pet["name"], pet["age"])) 이렇게 코드 적고 실행시켰는데 계속 SyntaxError: invalid syntax 이렇게 뜨네요... 제 눈엔 동영상 속 코드랑 똑같은데 왜 계속 오류가 뜰까요 ㅠㅠ
강의 잘 듣고 있습니다. 4번 문제에 대해서 질문이 있는데 문제 그대로 딕셔너리를 선언한 후에 type(character["items"]를 입력했을 경우에는 dict라고 나오는데 type(character["items"]) is dict를 입력했을 경우에는 False가 나옵니다ㅠㅠ 그래서 인지 답 그대로 코드를 입력해도 원하는 결과가 안나옵니다. 혹시 무엇때문일지 알 수 있을까요..? 참고로 구글 colaboratory를 이용하고 있습니다.
전체 코드를 올려주실 수 있을까요![type({}) is dict는 True가 나오는게 맞다보니, 다른 부분에 문제가 있을 것도 같아서요!] 추가로 colab은 이전의 코드들이 영향을 줄 수 있습니다. dict = {} 등으로 dict를 다른 것으로 할당하지는 않으셨는지도 확인해보셔야 합니다!
3번 문제에 for number in numbers: if number in counter: 이렇게 해서 counter 안에 number가 있는지 확인하는 거잖아요 그런데 저는 if counter in numbers: 이렇게 생각했거든요.., numbers 안에 counter가 있는 경우 없는 경우 제 머리가 나쁜건지.. 이런식으로 해도 똑같이 될 줄 알았는데 "값"이 1에서 안올라가더라구요 왜 안되는건지 혹시 설명 한번만 부탁드려도 될까요...
안녕하세요! 강의듣다가 이렇게 막힌 적은 처음이라 질문드립니다 ㅠㅠ 마지막 문제 중에 for k in character[key]: print("{} : {}".format(k,character[key][k])) 이런 구문들에서 format 뒤에 ()안을 잘 이해하지 못하겠는데 어떤 부분을 더 공부해야 이해할수있을까요 ? ㅠㅠ
안녕하세요 저는 예제 3번을 이렇게 풀었는데 계속 키에러 가 발생하네요 이렇게 풀면 왜 답이 안나오는걸까요? numbers = [1,2,6,8,4,3,2,1,9,5,4,9,7,2,1,3,5,4,8,9,7,2,3] counter = {} i = 0 for number in numbers: if number in numbers[i:]: i += 1 counter[number] = counter[number] + 1 else: i += 1 print(counter)
딕셔너리를 만들때 어떤 변수 안에 할당을 하게 되잖아요 보통 a = { ~~}. 그런데 리스트 안의 딕셔너리는 그럼 pets[0] = { ~~ } 이런 형태이고 for ~ in 문에서 pet 이라는 iteration에 들어가게 되는 변수가 바로 pets[0], pets[1]... 이런식으로 되는 것이겠군요
for key in character: if type(character[key]) is dict: for k in character[key]: print("{} : {}".format(k, character[key][k])) elif type(character[key]) is list: for skill in character[key]: print("{} : {}".format(key, skill)) for key in character: if type(character[key]) is dict: for k in character[key]: print("{} : {}".format(k, character[key][k])) elif type(character[key]) is list: for skill in character[key]: print("{} : {}".format(key, character[key][skill])) else: pass 위에가 영상에서 보여주신 코드고 아래가 제가 만든 코드인데요, elif 구문에서 character key skill 과 그냥 skill이 뭐가 달라서 전자가 오류가 나는지 궁금합니다.
반복문에서 "딕셔너리에 반복을 돌리는지"와 "리스트에 반복을 돌리는지"에 따라서 반복 변수에 "값이 들어가는 경우"와 "키가 들어가는 경우"로 나뉩니다. dict는 딕셔너리라서 → key는 키입니다. 따라서 dict[key]로 값에 접근합니다. 해당 위치에서 character[key]는 리스트라서 → skill은 값입니다. 따라서 이를 그냥 활용합니다[또는 인덱스를 넣어서 사용할 수는 있습니다]. 이걸 기억하면서 해당 줄 위에 print(character[key], skill)을 넣어서 출력해보시는걸 추천드립니다(직접 보는게 가장 빠르니까요!)
안녕하세요. 마지막 문제에서 for 밑에 If 문을 Dict. 부터 시작하셨는데요. 저같은 경우는 if 문을 type(xxx) is str or int: 로 하였더니, 여기서 다 추출되는것으로 나옵니다. 분명 Type은 Dict와 List인데 왜 여기서 추출되는지 모르겠습니다. for key in character: print(type(character[key])) if type(character[key]) is str or int: print("{} : {}".format(key,character[key])) elif type(character[key]) is dict: for key2 in character[key]: print("{} : {}".format(key2,character[key][key2])) elif type(character[key]) is list: for key3 in character[key]: print(key,":",key3) Name : 기사 Level : 12 item : {'sword': '불꽃의검', 'armor': '풀플레이트'} skill : ['베기', '세게 베기', '아주 세게 베기']
일반적으로 생각하면, 이렇게 작성할 것 같은데, 그렇지 않아서 대학교 중간고사 과제로 많이 나오는 부분인데 and, or 연산자 등은 현재 쓰신 것처럼 ㅇㅇ is ㅁㅁ or ㅂㅂ로 쓸 수 없습니다. 양쪽에 무조건 불 표현식이 와야해서 (ㅇㅇ is ㅁㅁ) or (ㅇㅇ is ㅂㅂ)처럼 써주셔야 합니다!
그리고 elif 부분에서 format(key, item)이 되는 이유를 잘 모르겟어요 else 부분에서도 format(key,character[key][k])라고 했는데 if 부분에서는 format(k,character[key][k])라고 했는데 왜 나머지 두개는 저렇게 되는지 설명좀 부탁드려요
type() 함수를 사용해서 자료형 비교를 해주시면 됩니다! 왜 item, character[key][k]가 되는지는 각각의 것을 단계적으로 출력해보시면 더 쉽게 이해되실 것이라 생각합니다. 한 번 character, character[key], character[key][k]를 모두 출력해보시기 바랍니다!
안녕하세요, 선생님. 마지막 문제에서 이중for문에서 for item 이 아닌 skill 이 명시되어 있어야 할 것 같습니다. skill에 대한 값이 리스트형이고, item에 대한 값은 dict 이기 때문입니다. 혹시라도 제가 잘못알았다면 죄송합니다 ㅠㅠㅎㅎ 항상 유익한 강의 고맙습니다. :-)
안녕하세요 조금 늦은 감이 있지만..ㅠ예제 3번에서 막혀서 질문드립니다. for key in character: name = character[key] if type(name) is str: print(key, ":", name) elif type(name) is dict: for i in name: print(i, ":", name[i]) else: for j in name: print(name, ":", j) 이런 식으로 코드를 만드니까 마지막 리스트에서 ['베기', '세게 베기', '아주 세게 베기'] : 베기 ['베기', '세게 베기', '아주 세게 베기'] : 세게 베기 ['베기', '세게 베기', '아주 세게 베기'] : 아주 세게 베기 계속 이렇게 뜨더라구요ㅠㅠㅠ딕셔너리나 다른 부분은 다 실행결과대로 나오는데! 왜 이녀석만 이런지 너무 궁금합니다 흐규ㅠ +무료강의 너무 잘 보고 있습니다:)
character = { "name" : "기사", "level" : 12, "items" : { "sword" : "불꽃의 검", "armor" : "풀플레이트" }, "skill" : ["베기", "세게 베기", "아주 세게 베기" ] for key in character: if type(character[key]) is dict: for k in character[key]: print("{} : {}".format(k,character[key][k])) elif type(character[key]) is list: for e in character[key]: print("{} : {}".format(key,character[key][e])) else: print("{} : {}".format(key,
질문 좀 드리겠습니다! 마지막 예제에서 for key in character: if type(character[key]) is str: print('{} : {}'.format(key,character[key])) elif type(character[key]) is list: for b in character[key]: print('{} : {}'.format(key, b)) elif type(character[key]) is dict: for b in character[key]: print('{} : {}'.format(b, character[key][b])) 딕셔너리를 가장 마지막에다가 두고 작성했습니다. 이렇게 하니 답은 잘 나왔습니다. 하지만 마지막에 elif type(character[key]) is dict: 대신 else: 하면 오류가 뜨는데 이 부분에 대해서 알려주실 수 있나요?
k는 반복 변수이므로 마음대로 정하시면 되고 + character[key]가 딕셔너리이므로 한 번 더 character[key][k]로 접근할 수 있는 것입니다. 프로그래밍에서 "왜 ㅇㅇ해야 하는지"는 그저 "그 코드를 써야 문제를 풀 수 있으니까"뿐입니다[수학에서 왜 방정식의 해를 구할 때 근의 공식을 쓰나요? → 그걸 써야 쉽게 풀리니까"와 비슷한 내용입니다].
for key in character: if type(character[key]) is dict: for a in character[key]: print("{} : {}".format(a,character[key][a])) elif type(character[key]) is list: for item in character[key]: print("{} : {}".format(key,item)) else: print("{} : {}".format(key, character[key])) 여기서 elif 부분에 item은 어디에서 나온 건지 모르겠어요
안녕하세요, 4-2-3번 문제를 푸는데 저는 교안과 달리 for number in numbers: counter[number] = numbers.count(number) 형식으로 풀었는데, 이러한 방식으로 접근한다면 선생님께서 접근하는 방식과 어떤 점에서 차이가 있는지가 궁금합니다. 혹시 제가 사용한 코드를 이용한다면 속도가 더 느려지는건가요?
큰 차이 없고 더 빠릅니다. 기본적으로 파이썬은 "내가 파이썬으로 뭔가를 더 작성하려고 할수록 느려지는 언어"라서 내장되어 있는 함수를 어떻게든 활용하는 것이 좋습니다(내장 함수는 C 언어로 구현되어 있어서 빠릅니다). 다만 공부 중이므로 추가적인 내장 함수를 사용하지 않고, 그냥 만들어본 것입니다!
안녕하세요 질문있습니다...! print("{} : {}".format(k, character[key][k])) 대신 print(k, ":", character[key][k])로 풀었습니다! 값은 답과 똑같이 나오는데 꼭 format함수를 써야하나요? 둘 중 어떤게 더 나은 건지 알 수 있을까요?
질문있습니다! zeta = input("안에 들어있는지 확인하고 싶은 키를 입력하시오(해당 값이 출력됩니다): ") if zeta in dict_a: print("키의 값, {}가 딕셔너리 내부에 존재합니다.".format(dict_a[zeta])) else: print("키워드가 딕셔너리 내부에 존재하지 않습니다.") 라고 쓰고 딕셔너리에는 True: "강아지" 라는 키와 값을 넣어줘서 확인하고 싶은 키에 True도 넣어보고 "True"도 넣어봤는데 다 존재하지 않는다고 뜨네요.. boolean도 키에 넣을 수 있는데 왜 이렇게 되는 것인가요?
dict_a = { True: '강아지' } print(True in dict_a) print(dict_a[True]) 로 했을 경우 문제 없이 실행됩니다. 다시 한 번 해보시고 + 안 될 경우 python 명령어를 그냥 쳤을 경우에 나오는 인터랙티브 셸의 위쪽에 있는 글자들을 보시고 파이썬 버전이 몇인지 확인해주세요...!
안녕하세요^^
좋은 아침 입니다.
강의 감사합니다.
오늘 강의는 읽고 읽고 또 읽어야 되겠습니다.^^
좋은 하루 되세요^^
4:00
여기서 if문에 print(‘없는키입니다.’)가 들어가야 되는것 아닌가요? 이부분에서 이해가 잘 안되네요ㅜ
앗 오탈자입니다! 말씀해주신 것이 맞습니다!
3번의 해설을 적어봅니다.
동영상으로는 이해가 안되어 한참 생각하다가 적어봤습니다.
3번을 이해하기 위하여 먼저 p163의 라인 17을 다시 보자.
dictionary ["name"] = "8D 건조 망고"
라는 코드로 인하여 dictionary의 "name"이라는 키를 가진 요소의 값이 "8D 건조 망고"로 변경되었다.
여기서 "name"은 키의 이름이다.
즉 '딕셔너리명 [키 이름] = 그 키를 가진 요소의 값'이라는 코드로 인하여 요소의 값이 변경된다.
마찬가지로
counter[number] = 1 또는
counter[number] += 1이라는 코드로 인해
counter라는 이름을 가진 딕셔너리의 number라는 키를 가진 요소의 값이 1이 되거나 +1씩 증가된다.
첫번째 루프를 보자.
for number in numbers라는 코드는 "numbers라는 리스트에 있는 모든 각각의 반복자를 number라고 명명함과 동시에 이 반복자들을 모두 반복하면서 아래의 코드를 실행하라"라는 뜻이다.
그러므로 numbers[0]인 1이라는 요소가 제일 먼저 루프로 들어간다.
1이 counter에 없으니까 counter[1] = 1이 실행된다.
여기서 좌측의 1은 키, 우측의 1은 그 키를 가진 요소의 값이다.
그러면 아무 값도 들어있지 않던 counter는 일단 {1:1}로 변경된다.
두번째 루프인 2 역시 counter에 없으니까 counter[2] = 1이 실행된다.
counter는 {1:1, 2:1}이 된다.
다음으로는 6이 들어가고 counter는 {1:1, 2:1, 6:1}이 된다.
이런 식으로 {1:1, 2:1, 6:1, 8:1, 4:1, 3:1}까지 되고, 이번에는 2가 들어가는데 이 때는 2가 이미 counter에 있으므로 counter[2] += 1이 실행된다.
그러면 counter는 {1:1, 2:2, 6:1, 8:1, 4:1, 3:1}이 된다.
이런 식으로 반복되면 최종적으로 책에 적혀있는 실행결과와 같아진다.
(책도 이렇게 하나 하나 풀어서 서술해주시면 정말 좋겠습니다. 저 같은 초보자에게는 이런 게 꼭 필요합니다. )
아 감사합니다. 덕분에 이해되엿네요 ㅜㅜ
드디어 이해되었습니다. 감사합니다ㅠㅠ
덧글 지우지마세요!!!!!!
물론 다들 능숙하신 수준이시라 헷갈릴 일은 없으시겠지만,
elif구문 하위 for문에 반복자가 리스트에 해당하는 "skill"이 아니라,
딕셔너리로 제시되어있는 "item"으로 소스가 구성되어
이해하는데 혼선이 있을 수도 있겠다는 생각이 드네요!
P.S. 동영상을 다시 보면서, if, elif, else구문별로 쪼개 실행하니 이해가 되었네요~!
앗 도움되는 댓글 남겨주셔서 감사합니다...!
강의가 다른 분들에 비해 이해하기 쉬워서 다른 강의 들을때도 윤인성님 강의를 참고합니다. ^^
안녕하세요 일주일 쯤 전에 파이썬 시작했는데요
혹시 12:48 부분에 나오는 173쪽 4번 문제의 13행에서 for k in character[key]라고 되어 있는데 여기서 k가 무엇을 의미하는 것인가요?
그 윗부분의 다른 반복문(for key in character)의 반복 변수 key입니다...!
24강 4번 문제에서 며칠이 걸린건지,,,,,ㅋㅋㅋㅋㅋㅋㅋ오늘 겨우 이해하고, 혼자 풀 수 있게 되었어요. 역시 예제만 풀기보다 제 손으로 직접 코드를 짜는게 훨씬 도움이 되는 것 같네요. 강의 감사합니다!
멋집니다 👍!!!!
안녕하세요. 강의 잘 듣고 있습니다. 궁금증이 있어 질문 남깁니다.
첫번째
3번 문제에서 출력이 {1:3....}으로 나오는데 print에서는 : 표시를 해주지 않았는데 1:3 ,~ 로 나오는거는 python 내부 기능인가요?
두번째
4번 문제에서 print("{}:{}".format(k, character[key][k]))
넵 파이썬이 그렇게 해주는 것입니다.
character[key]가 딕셔너리이므로 그 안에 한 번 더 키에 접근히는 것입니다.
그 앞 줄에서 print(character[key])를 출력해보시면 쉽게 이해할 수 있을 것입니다!
13:22 에서 key 랑 k를 대괄호로 감싸주셨는데 요소이기때문에 감싸주신건가요? 리스트에 속하지 않는 변수라도 요소가 될수있나요?
대괄호는 요소라서 감싸주는 것이 아니라
"인덱스"와 "키"라서 감싸주는 것입니다!
리스트와 딕셔너리 뒤에 [인덱스 또는 키]를 넣으시면 요소를 꺼낼 수 있습니다.
강의 내용이 조금 어렵게 느껴진다면 개정판 강의를 추천드립니다! 개정판 강의는 2배 분량으로 차근차근 느리게 설명합니다!
초보자들에겐 정말 최고의 강의인듯요.
와... 3,4번이 복병이었네요
처음 보고 이걸 어떻게 풀지 하고 한시간 동안 앓다가
이건 아니다 싶어서 답안지 보고
3번은 바로 이해 했는데
4번은 봐도 어찌 이렇게 되나 싶어서
4번만 30분 동안 혼자보고 이해했네요..
그리고 4번을 하면서
For문에서 변수자에 어떠한 값을 주고
출력에서 변수자명을 그대로 쓰면 전체를 리스트 형태로 출력하고,
어떠한 값에[변수자명]을 쓰면 노멀하게
아래로 내려가게 출력하는 것도 알았네요
이때 제가 진짜 이 길에 재능이 없구나 했는데
다른 분들도 4번이해하는데 힘드셨다기에
위안?이 됩니다 ㅠㅠ
이 책이 쉬운 내용이라는데
지금도 어려우니 슬프네요ㅠㅠ
일단 그래도 아직은 코드 보면서 혼자 이해하는게 가능해서 괜찮은데
나중에는 어떨지....
또한 지금은 문제보고 답 안보고 코드 작성하기가
쉽지 않네요
처음 운동을 하면 팔굽혀펴기 10개 하는 것도 힘들어서 + "이걸 어떻게 100개나 사람이 할 수 있냐"하는 생각이 드는데
.
어느 정도 근육이 붙고나면 그냥 쉽게 되는 것처럼, 개발 실력도 조금씩 조금씩 늘리시면 나중에는 "내가 왜 이걸 못했었지 ㅋㅋㅋㅋ"하고 그냥 재미있게 회상할 수 있는 날이 올 것입니다!!
그렇다면 dictionary함수는 {1,2,3} 이런식이 아니라 무조건 {1:11, 2:22, 3:33} 이런식으로 A:B 로 구성된다는거죠?
넵! 다만 딕셔너리는 자료형(자료의 종류$입니다!
안녕하세요 강의 잘 보고 있습니다.
문제 3번에 if 조건문에서 counter에 [ ] 대괄호는 왜 붙이나요? 파이썬에 붙는 괄호 체계도 나중에 알려주세요!!
counter(딕셔너리) 내부의 요소에 접근하려고 쓰는 것입니다!
12:30
if type(charater[key]) is dict: 부분과 elif type(charater[key]) is list: 부분이 이해가 가지 않습니다.
if type(charater[key]) is dict: 에서 해당되는 문장은 "items" : {"sword" : "불꽃의 검", "armor" : "풀플레이트" }인데
이 경우 key는 "items"이고 value는 {"sword" : "불꽃의 검", "armor" : "풀플레이트" }일텐데 왜 key로 작성하면 인식하는 건가요?
위와 마찬가지로
elif type(charater[key]) is list: 에서도 해당되는 문장은 "skill" : ["베기, "세게 베기", 아주세게 베기"] 이기에
type이 list 인것은 key(skill)의 value값인 ["베기, "세게 베기", 아주세게 베기"] 이 list로 인식되어야 하지 않나요?
왜 파이썬이 key의 속성이 아닌 value의 속성으로 이해하는 건가요?
key → 이건 키이고
character[key] → 이건 값에 접근하는 코드입니다.
@@윤인성 감사합니다.
질문이있습니다 2번문제에서 for pet in pets 가 하게되면 어떻게 되나요?? 그리고 4번문제에서 print("{} : {}".format(k,character[key][k]))가 이해가 안가는데 무슨 뜻인가요?
4번 문제는 이틀 고민해서 겨우 이해했네요 ㅜㅜ 강의를 힌트삼아 겨우 풀었습니다. 프린트에서 키 안에 키를 써주는게 굉장히 헷갈리네요 ;ㅅ; 연습을 많이 해봐야 할 것 같아요
이틀이면 충분히 빠르십니다!!! 축하드립니다!
4번 문제에서 왜 str을 먼저 하지 않고 dict먼저 if문에 넣는건가요? 특별한 이유가 있을까요?
그리고 첫 print부분을 "{} : {}".format(small_key, character [key][small_key]이런 형식으로 바꾸면 syntaxerror가 나는데 왜 이러는 건가요?
앗 추가적인 정보를 주실 수 있을까요?
1. 전체 코드를 올려주세요! 어떤 코드를 어떻게 바꿨는지 약간 이해하기 힘듭니다[변경 중에 오탈자가 나시는 경우가 많아서요][현재 주신 코드는 닫는 둥근 괄호가 없어서 문법 오류가 납니다].
2. "str을 먼저 한다"가 어떤 부분에서 이루어져야 한다고 생각했는지 알려주실 수 있을까요!
강사님~
해당강의 마지막 문제 중 'character[key][k])' 이부분에 질문드려봅니다.
character[key] 는 items 항목의 item 에 접근하고 그 뒤 [k]는 아이템안에 있는 아이템을 접근하는거죠???
제가 이해한 부분이 맞는지 모르겠네요
넵! character[key]로 뽑아진 대상이 딕셔너리 또는 리스트일 때, 그걸 대상으로 한 번 더 뽑는 것입니다!
안녕하세요. 딕셔너리에 존재하지 않은 키에 접근하면 KeyError가 발생한다고 되어있는데요,
딕셔너리에 존재하던 요소를 제거하고 또 그 요소를 제거하면 존재하지 않는 요소라서 오류가 발생해야 하는 게 아닐까요 ???
존재했던? 거라서 오류가 발생하지 않는 걸까요
2번 제거하면 KeyError가 발생합니다!
>>> a = {"10":10}
>>> del a["10"]
>>> del a["10"]
Traceback (most recent call last):
File "", line 1, in
KeyError: '10'
오오 인성님 드디어 라식을!!! 인성님은 안경쓰셔도 초샤프해보이셔서 항상 멋지다고 생각하고 있었는데, 더이상 안경 쓰신 모습을 볼 수 없을거라 생각하니 한편으론 좀 아쉽네요...ㅠ_ㅠ
멍청해서 매일매일 안경 찾는데 30분을 버리다보니 흑흑....
ㅎㅎㅎ 그래도 밑에 아주아주 작게지만 넣어주셨네요...^^
이제와서 질문 있습니다. 윤인성님 실행 화일엔.. 화일 경로가
~
>
이렇게 나오시잖아요. 저는 C:\Users\..... 폴더이름까지.. 길게 나오는데, 어떻게 ~ > 나오는건지요?
칼라도 다르구요... (그 전부터 너무 궁굼했는데, 진도가 나가도 모르겠어서...ㅋㅋ 여쭤봅니다.)
맥을 써서 그렇습니다 @_@ ...!
윈도우에서는 아직 이런 처리를 간단하게 하기 힘듭니다!
@@윤인성 아~~~ 그랬군요^^
답변주셔서 감사합니다.
질문이 있어서 댓글을 남깁니다.
연습문제 4번에서 가장 마지막줄인
else:
print("{} : {}".format(key, character[key]))로 입력을 하였으나
실행시켰을 때 4번째armor와 5번째skill 사이에 딕셔너리인 items가 한줄이 더 생겨버립니다..
12번째줄에서 if type(character[key] is dict:가 들어가면 딕셔너리가 뒤에는 안들어가야 하는거 아닌가 해서 질문드립니다..
강의는 항상 잘 듣고있습니다 여러번 반복해보면서 따라가니 재미있네요
항상 감사합니다
앗 혹시 입력하신 전체 코드를 올려주실 수 있을까요!!
@@윤인성 중간에 15번 줄에 elif 가 아니라 if를 사용해서 생긴문제같더라구요,, 해결했습니다..
근데 if문을 사용할 때 elif가 아닌 if를 사용하게 된다면 마지막 else 부분 출력할때 items 딕셔너리부분이 출력되는 이유가 궁금합니다
안녕하세요 선생님
혼자 공부하면서 궁금한 점이 있어서 여쭤보게 되었습니다.
직접해보는 손코딩 p.163에
name:7D건조망고
type:당절임
ingredients1:망고
ingredients2:설탕
ingredients3:메타중아황산나트륨
ingredients4:치자황색소
origin:필리핀
이렇게 표현을 하고 싶어서 해보니
dictionary={
"name":"7D건조망고",
"type":"당절임",
"ingredients":["망고","설탕","메타중아황산나트륨","치자황색소"],
"origin":"필리핀"
}
numbers = [1,2,3,4]
i=-1
for key in dictionary:
if type(dictionary[key]) is not list:
print("{}:{}".format(key,dictionary[key]))
elif type(dictionary[key]) is list:
for ingredient in dictionary[key]:
i+=1
print("{}{}:{}".format(key,numbers[i],ingredient))
이렇게 해야 원하는 결과가 나오는대
꼭 i=-1이렇게 시작을 해야 하는 건가요?
한 곳을 수정하면 일반적으로, 다른 곳도 수정해야 합니다.
마지막 두 줄을 함께 수정해야 하는데요.
1. i += 1을 하고 나서
2. numbers[i]를 출력하기 때문에
-1로 시작해야, numbers[i]를 할 때 i의 값이 0, 1, 2, 3이 됩니다.
0부터 시작하게 수정하고 싶으시다면,
1. numbers[i]를 먼저 출력하고[그래야 0부터 시작]
2. i += 1을 하게 만들면
0부터 시작해야 numbers[i]를 할 때 i의 값이 0, 1, 2, 3이 됩니다!
목소리가너무 좋고, 꼼꼼하게 설명해주시는 것 같아 책을 구매해서 듣고 있습니다.꼼꼼하게 설명해주시고, 코드를 하나하나 해독해주시는 느낌이 들어서 정말 이해가 잘 갑니다.파이썬 관련해서 여러 강의를 듣고 해보았지만, 이렇게 상세하고 자세히 해주시는 분은 없었던 거 같네요.열심히 들어서 완강해보겠습니다ㅎㅎ다음에 기회가 되신다면 numpy, pandas, excel과 관련하여 파이썬 책을 쓰시거나 강의를 해주실수는 없을런지요ㅎㅎ
앗 감사합니다...! numpy, pandas, excel 등의 기본적인 내용은 이 채널 옆의 머신러닝 딥러닝 실전 개발 입문 강의 앞부분에서 다루므로 참고해주세요...!
질문있습니다! 확인문제 4번에서 다른건 이해가 가는데
if type(character[key]) is dict:
for k in character[key]:
print("{} : {}".format(k, character[key][k])) 여기 부분이 이해가 안갑니다..
혹시 말로 해설 설명 가능하실까요...
"어떤 결과가 나올 것이라 예상했는데 어떻게 나와서 이상하다"를 알려주실 수 있을까요! 이해가 안 된다고 하면 범위가 너무 넓어서, 어떤 부분이 이해되지 않은 것인지 알 수 없어서요!
@@윤인성 여기서 k가 딕셔너리 안에있는 묶음 하나하나를 k로 잡는건가요 아니면 “sword”, “armor” 가 k 인건가요? 그래서 format(k, character[key][k]) 요것도 헷갈려서요 ㅠㅠ
@@baseball1098 딕셔너리를 반복하면, 반복 변수에 키가 들어갑니다. 따라서 character[key]하면 딕셔너리의 요소가 잡힙니다.
.
그런데 이 character[key]가 딕셔너리 또는 리스트라면
character[key][키]로 또 내부에 있는 요소를 꺼낼 수 있습니다!
윤인성님 동네에 호랑이가 사는군요..
좋은 강의 감사합니다.^^
4번 문제에서 15행의 elif를 실수로 if로 입력했더니(14:39),
결과에 "item":{"sword":"불꽃의 검", "armor":"풀플레이트"}" 요렇게 한 줄이 추가로 출력됩니다.
분명히 dictionary인데 else절에도 걸리는 것 같은데 왜 그럴까요? 도저히 모르겠어서 질문드립니다!
if if-else일 때는 전체 실행이 두 번이 됩니다.
1. 딕셔너리니까 첫 번째 if 들어가야지
2. 두 번째 if는 리스트냐인데, 아니니까 else 실행해야지
가 됩니다.
질문이 있습니다. 마지막 문제에서 아이템이랑 스킬과 무슨 연관이 있나요? 아무리 생각해도 쉼표 때문에 둘은 별개의 변수로 밖에 안보입니다만.
왜 스킬을 구하기 위해 아이템을 in 하는지 모르겠습니당
아아 s가 안붙은 그냥 변수로군요. 제가 착각한 것 같습니다. 소드 아머 같은 경우 딕셔너리이기 때문에 딕셔너리에 관한 명령을 했고
스킬들은 리스트이기에 리스트 명령어를 내렸을 뿐 그 앞에 변수는 그냥 지칭한 것 뿐이군요. 하하
4분에 적힌 식은 잘못된거 아닌가요?
get함수를 쓰는 이유가 존재하지 않는 키라면 오류가 아닌none을 출력하기 위해서인데
4분에 나와있는 식을 쓴다면 아무것도 출력되지 않습니다
if조건문 아래 식에 print를 추가해도 none은 출력되겠지만
else조건문 아래 식이 이상합니다
존재하지 않는키가 아닌 존재하는 키를 입력하면
키 값를 출력해줘야 하는데 키 값을 출력하는게 아니라
"없는 키입니다" 가 출력됩니다
if줄에 같다(==)가 아니라 다르다가 왔으면 print를 추가하면 말이 되지만
==그대로 둔다면
if조건문 아래 식에print를 추가하고
else조건문 아래 식과 위치를 바꾸어야 하는것 아닌가요?
넵 오탈자로 확인입니다 😂! 감사합니다!
4-2 예제 문제에서 딱 막히네요.. 앞에부분 책 보면서 계속 반복해서 익숙해져야 하는지,, 잘 모르는 상태에서 진도를 그냥 나가야 하는지요? 앞에 책보면서 설명 보기에는 어느정도 이해가 가는데
문제를 딱 풀려고 하면..까막눈이 되어 버리네요.ㅜㅜ 혼자 책보면서 공부 하는게 힘드네요.. 생전 처음 접해보는거라
그리고 159페이지에 5번 문제가 이해가 안가는데.. 이 문제 설명해놓은 동영상이 있나요?? 왜 안보이죠;ㅜㅜ
5번 문제는 강의 진행하다보면 나오는 것으로 알고 있습니다[강의 찍은지가 오래 되서 몇 강 인지는 정확하게 모르겠군요][질문이 굉장히 많이 들어오는 예제 중 하나라 😂].
반복문 쪽 강의를 쭉 들어보신 뒤 + 댓글들을 보면 많은 분들이 질문을 주셔서, 보시다보면 "나도 이런 부분이 헷갈렸는데" 등등을 같이 보시면 좋을 것 같습니다.
반복문이 이해가 안 되신 것이라
앞의 변수 조건문 가도 의미가 없고
뒤로 나가도 반복문은 계속 이해가 안 될 것입니다.
제일 좋은 것은 진도는 빼면서 + 반복문 부분 계속 보는 것입니다.
한 문제에 2-3일 하루 종일 잡고 있어도 정상입니다(그리고 못 풀어도 정상입니다)(생각했다는 것에 의미가 있습니다). 계속 이해가 안 되고 그러다가도, 계속 생각하다보면 어느 순간 막히는 부분이 뚫리고 이해하실 수 있을 것이라 생각합니다!
@@윤인성 조언 감사합니다. 강사님 말씀대로 일단 진도는 조금씩 빼면서, 앞에부분 계속 반복하고 있습니다. 책 한권이 대학교 6개월~12개월 정도 진도 양이라고하니.. 위로가 되네요!! 한달정도 되었고,,, 다른 분들은 질문하는 수준이 저랑은 틀린거 같아.. 막막해 하고 있었는데, 계속 반복해봐야 겠네요!! 다음날 되면 아리까리해도, 열심히 하다보면 제것이 되겠죠.!!
안녕하세요 선생님. 지금도 질문 하면 보시는지 모르겠지만 4번 구문이 3일째 이해가 안되서 남겨봅니다.
앞 강의에서 for 중첩문은
● list_test = ["a", "b", ...]
for a in list_test :
for b in a:
print(b)
식으로 진행이 되던데 4번 문제는
● for key in character:
for k in character[key]:
print(....)
형식으로 진행이 되서 조금 헷갈립니다. character[key] 대신 위에 썼던 key 변수를 쓰면 오류가 생기는데 이유가 궁금합니다. 결국 key 변수 안에 name, level, items, skill이 차례로 들어올텐데 따로 character[key]를 써서 리스트나 딕셔너리를 불러오는 이유가 궁금합니다.
에를 들어 skill이라는 character의 키도 결국엔 skill = ["베기"...]란 리스트를 담고 있는 변수 아닌가요? 만약 문제에서 skill = ["베기", "세게 베기"....]를 for문으로 출력하라고 했다면
● for key in skill:
print(key)
식으로 했을텐데 4번 구문에서
● for key in character:
for k in character[key]:
print(....)
character[key]를 사용하는 이유가 궁금합니다. 저는 변수 key(=4번 구문 기준 items나 skill 같은 친구들)도 결국 character 처럼 하나의 리스트를 담고 있는 변수로 보고 있습니다.
일단 "리스트"는 "리스트의 요소 하나하나"가 반복 변수로 들어가고
"딕셔너리"는 "딕셔너리의 키 하나하나"가 반복 변수로 들어갑니다.
따라서 딕셔너리로 반복을 돌릴 때, 딕셔너리의 값에 하나하나에 접근하려면
""""
for 키 in 딕셔너리:
....딕셔너리[키] # 를 사용해야 합니다.
""""
실제로 코드를 작성해볼 때, 반복문 내부에
print(key, character[key])를 넣어서 무엇을 출력하는지 확인해보시면 더 확실하게 이해하실 수 있을 것 같습니다!
친절한 답변 감사합니다 !! 이렇게 빨리 답변 해주실줄 몰랐습니다...!😄 완강까지 계속 달리겠습니다:)
4:00 코드 잘못 되어져 있음.
아아앗 반대로 했어야 하는데 감사합니다 'ㅁ' ...!
항상 강의 잘 듣고 있습니다!
궁금한 점이 하나 생겨서 질문을 하는데,
문제 4번에서
for item in character:
if type(character[item]) is dict:
for k in character[item]:
print("{}:{}".format(k, character[item][k]))
elif type(character[item]) is list:
for i in character[item]:
print("{}:{}".format(item, i))
else:
print("{}:{}".format(item, character[item]))
라고 코드를 작성하면 잘 실행되는데,
for item in character:
if type(character[item]) is dict:
for k in character[item]:
print("{}:{}".format(k, character[item][k]))
if type(character[item]) is list:
for i in character[item]:
print("{}:{}".format(item, i))
else:
print("{}:{}".format(item, character[item]))
이라고 코드를 작성하면, 즉,
두 번째에 나오는 elif 대신 if 를 사용하게 되면
items:{'sword': '불꽃의 검', 'armor': '풀플레이트'}
이라는 항목이 출력되는데, 그 이유가 궁금합니다!
감사합니다
위의 코드의 경우
- if + elif + else 키워드로 조건문 그룹 1개
아래 코드의 경우
- if 키워드 하나로 조건문 그룹 1개
- if + else 키워드가 한 쌍이라 조건문 그룹이 추가 1개
이 됩니다[따라서 전부 2개].
---
위의 코드는
- 딕셔너리가 아니면
- 리스트가 아닌지 비교하고
- (딕셔너리도 아니고 +) 리스트도 아니면 그냥 출력
하는 형태로 작동하지만,
아래 코드의 경우
- 1번째 조건문 그룹: 딕셔너리인지 확인
- 2번째 조건문 그룹: 리스트인지 확인
- 2번째 조건문 그룹: 리스트가 아니면 그냥 출력
하게 됩니다.
따라서 딕셔너리인 경우
- 1번째 블록을 지나면서도 출력되고
- 2번째 블록을 지나면서도 "리스트가 아니니까!!"하고서 else 구문으로 들어가서 출력하게 됩니다.
윤인성 아아 이해됐습니다! 항상 감사합니다 :)
@@윤인성 감사합니다!
안녕하세요! 항상 좋은 강의와 책 감사드립니다. 다름이 아니라 4번에 에러가 뜨는 코드가 하나 있어서 질문드립니다.
for key in character:
if type(character[key]) is str or type(character[key]) is int:
print("{} : {}".format(key, character[key])
elif type(character[key]) is dict:
for item in character[key]:
print("{} : {}".format(item, character[key][item]))
else:
for i in character[key]:
print("{} : {}".format(key, i))
그냥 dict, list, str의 순서만 바꿨을 뿐인데 왜 에러가 나는 것인지 궁금합니다. elif문의 is부분이 다른 is들과 다른 색으로 표시되네요ㅠ
현재 올려주신 코드는 괄호 닫기에 문제가 있어서 문제가 발생합니다. 첫 번째 format 함수 사용 근처를 확인해주세요!
예제4에서 k는 키 속의 키를 말하지 않습니까 키속의 키를 말할때는 k만 사용하나요?리스틍의 요소를 말할때는 항상 element 가 아닌 item을 사용하나요?
아무렇게나 해도 됩니다...!
일반적으로는 키는 k로 쓰고
리스트의 요소를 말할 때는
- 큰 의미 없으면 e 또는 elem 또는 element 등을 쓰고
- 좀 의미를 두는 경우(이건 items의 요소니까 item이야)에는 item 등을 사용합니다.
이건 당연히 자유입니다...!
안녕하세요 선생님
마지막 문제에서 제가 작성한 코드가
for key in character:
if type(character[key]) is list:
for numbers in character[key]:
print("skill:",numbers)
elif type(character[key]) is dict:
for subkey in character[key]:
print(subkey,":",character[key][subkey])
else:
print(key,":",character[key])
이거였는데 5행에서 elif가 아닌 if로 작성시에 Skill=["베기","세게베기","아주세게베기"]가 한번 더 출력되더라구요 그 이유를 알 수 있을까요?
만약 if로 작성하면 리스트가 전달되었을 때
- 첫 번째 조건문(if 블록): 리스트냐는데 리스트니까 들어감
- 두 번째 조건문(if-else 블록): 딕셔너리냐는데 아니니까 else로 들어감 → 이때 else 내에서 한 번 더 출력되는 것입니다.
안녕하세요. 항상 강의 잘 듣고 있습니다!
get 함수 설명해주실때 왜
>>> if dictionary.get("나이") == None:
print("없는 키입니다") 가 아니라
>>> if dictionary.get("나이") == None:
dictionary.get("나이") 를 쓰고
else 구문으로
출력을 해야하는지 이해를 못하겠습니다.
감사합니다.
아아앗 설명 미스입니다 @_@ ...!
이해하신 것이 맞을 것 같습니다.
@@윤인성 빠른 답변 감사합니다. 좋은 강의 감사합니다~! :)
안녕하세요 귀한강의 잘 듣고 있다가 처음으로 질문 남겨보는 코딩어린이입니다..
강의 마지막 문제(name:기사, level:24...등을 출력하는 예제)의 마지막 else구문에서 print("{}".format(key))라고 적어봤더니 name 과 level 만 출력이 되었습니다.
궁금한 것은, 예제와 같이 딕셔너리 형태의 식(?)에서는 key라는 임의의 값(다른 아무 문자나 해도 상관은 없겟지요)을 format에 넣으면 사전의 key값만 나오고 ":" 뒤의 값 부분은 출력이 안되는 것인가요??
질문이 이해할 수 있게 적었을지 모르겠네요...ㅠ 감사합니다
앗 "코드를 실행했을 때 → 어떤 코드가 나올 것이라 예상했다"를 조금 더 자세하게 설명해주실 수 있을까요!
아 .format을 저렇게 활용하는거네요...
저는 171p 2번에 빈칸 없애서 적어라길래
str(key["age"])+"살" 이런식으로 했는데
또 하나 알고갑니다!
참 신기한것이, 질문을 하려고 코딩한것을 확인하다보면 답이 보이네요.. ㅎ
책을 한번 다 봤습니다. 강의 도움이 많이 되었습니다.
저는 다음책으로
처음 시작하는 파이썬
과 flask를 해보려고합니다.
혹시 추천해주실만한 책이나 과정이 있으실까요.
국내에 추천할 Flask 책은 거의 없는 것 같습니다. 페이스북 그룹 등에서 스터디그룹을 찾아서 공부하는 것을 추천드립니다(다만 요즘 코로나로 스터디 크룹이 별로 없어서 당분간은 약간 찾기 힘드실 수 있을 것 같습니다 ;ㅁ; )
윤인성 답변 감사드립니다!
2:55 이것처럼 앞에 print 동시에 입력하려면 어떻게 해야 하나요?
Jay Chung ctrl + alt 누르고 방향키로 여러 줄 선택하신 뒤에 글자 입력하시면 됩니다 'ㅁ' ...!
@@윤인성 감사합니다 ㅎㅎ
10:27 정말 대단하십니다...
아앗 대단할게 없습니다 ㅇ>-
4번문제에 이렇게 넣었더니
for반복문 맨위에 행에서 unexpected indent로 뜨는 이유는 멀까요?
for key in character:
if type(character[key]) is dict:
for k in character[key]:
print("{} : {}".format(k, character[key][k]))
elif type(character[key]) is list:
for item in character[key]:
print("{} : {}".format(key, item))
else:
print("{} : {}".format(key, character[key]))
unexpected indent 오류는 들여쓰기에 문제가 있을 때 발생하는 오류입니다.
현재 주신 코드 내에서는 문제가 없어 보입니다.
(1) 저장을 안 해서 이전에 작성된 코드가 실행되었거나
(2) 해당 부분 이전 줄의 코드가 다음 줄에 영향을 주고 있는 것 같습니다.
.
1번으로 문제가 발생하는 경우가 꽤 많아서
저장하고 실행해보시는 것을 추천드립니다.
numbers=[1,2,3,4,5,1,3,5,1,5]
counter={}
for number in numbers:
if number in counter:
counter[number]+=1
else:
counter[number]=1
print(counter)
선생님 여기서 print앞에 뛰어쓰기(텝)에 따라서 출력 값이 완전 달라져요. 왜 이렇게 되는지 잘 이해가 안 돼요
앞의 들여쓰기에 의해서 "for 반복문 또는 if 조건문"이 영향을 미치는 범위가 달라지기 때문입니다.
현재 코드에서는
print() 함수 앞에 들여쓰기가 있으면 for 반복문에 소속되고
없으면 for 반복문에 소속되지 않습니다.
안녕하세요 4-2 확인문제 4번 질문드립니다.
for key in character:
if type(character[key]) is str or int:
print(key, ":", character[key])
if type(character[key]) is dict:
for i in character[key]:
print(key, ":", character[key][i])
elif type(character[key]) is list:
for i in character[key]:
print(key, ":", i)
이렇게 코드를 작성했는데 딕셔너리의 키와 결과값을 한꺼번에 가져오는 부분이 생겨서 왜 그런지 알고 싶습니다.. 감사합니다!
Boseong Cho 앗 "딕셔너리의 키와 결과값을 한꺼번에 가져오는 부분"이 어떤 부분인지 조금 더 명확하게 설명해주실 수 있을까요? for 반복문으로 키를 뽑고, dict[키]를 통해서 각각의 요소에 접근하고 있을 뿐입니다...!
@@윤인성
name : 기사
level : 12
items : {'sword': '불꽃의 검', 'armor': '풀플레이트'}
items : 불꽃의 검
items : 풀플레이트
skills : ['베기', '세게 베기', '아주 세게 베기']
skills : 베기
skills : 세게 베기
skills : 아주 세게 베기
윗분 코드 실행해 보면 답이 이렇게 중간에 딕셔너리, 리스트가 뭉쳐서 나오는 부분을 물어 보시는 거네요.
좋은 강의 감사합니다.
강사님 따라 비주얼 스튜디오 코드에 직접 입력해보고 있는데, 저는 어째서인지 위의 영상 속 처럼 문자나 숫자 등에 따라 색으로 변하여 입력되거나, 코드 입력 및 저장 후에 터미널 이동시 값이 나타나지를 않습니다.. 어떤 부분이 문제인 걸까요? ㅠㅠ
색은 현재 터미널 상황 따라서 다릅니다. 코드 입력 및 저장 후에 터미널 이동시 값이 나타나지 않는다는 것은 어떤 의미인지 더 자세하게 알려주실 수 있을까요?
@@윤인성 코드를 입력하고 저장 후에 값을 도출시킬 때 터미널에 나타나는 부분을 말하는 것입니다! 색이 나타난 상태의 코드를 입력할 때에는 값이 도출되는데, 그저 무색일때의 코드는 값이 도출되지 않습니다.. ㅠㅠ
현재 사용하시는 표현으로 어떤 상황인지 감이 하나도 안 잡히는데
1. 색이 나타난 상태의 코드가 어디의 무엇을 의미하는 것인지 알려주세요.
2. 그저 무색일 때의 코드가 어디의 무엇을 의미하는 것인지 알려주세요.
[VSCode에 위의 에디터에서 입력한다는 것인지
Powershell/CMD/Terminal(맥)에서 입력한다는 것인지
VSCode 위에 Terminal 패널을 띄우고 입력한다는 것인지
파이썬 인터랙티브 셸을 의미하는 것인지 정확하게 알려주세요.]
3. 추가로 값을 도출시킨다는 표현이
프로그램을 실행한다는 의미인가요?
조금 더 일반적인 표현으로 자세하게 써주시면 감사하겠습니다!
@@윤인성 아! 제가 이상하고 너무 기초적인 부분에서 큰 실수를 했었습니다! 파일을 저장하고 실행하는 과정에서 저장할때 .py를 붙였어야 했는데 그러지 않아서 아무것도 되지 않았던.. 너무나 어이없는 실수를 했었습니다..!! 바쁘신 와중에도 답변 남겨주셔서 정말 감사했습니다!!
안녕하세요 강의 잘 듣고 있습니다. 저는 마지막 확인문제를
if type(character[key]) is str or int :
elif type (character[key]) is dict :
else :
이런식으로 하였는데 if에서 다 True가 되어서 elif로 넘어가지 않았습니다. 나중에
if type(character[key]) is str :
elif (character[key]) is int:
elif (character[key]) is dict:
else :
이렇게 하면 답과 같이 나왔습니다. is 와 or을 같이 사용하면 안되는 것인가요? 어떻게 계산이 되어서 모든자료형이 다 type is str or int 에 들어가게 된것인지 이해가 안가네요 ㅠㅠ
or 연산자는 양쪽에 불 표현식이 와야해서, 모든 프로그래밍 언어가 ㅇㅇ is ㅇ or ㅇ 등으로 영어 문장처럼 표현할 수 없습니다. (ㅇㅇ is ㅇ) or (ㅇㅇ is ㅇ) 형태로 사용해주셔야 합니다. 이해보다는 관용구로 외우는 방법 밖에 없는 형태입니다![초보자 때 많이 실수하는 코드라 대학교 1학년 1학기 중간고사 등에 일단 무조건 나오는 문제 중 하나입니다]
@@윤인성 정말감사합니다! 좋은강의 감사합니다 ㅠㅠ
@@윤인성 감사합니다!
쌤 안녕하세요 계속 디버깅 찍어보는데도 이해가 안되서 문의드립니다.
문의드릴 사진 링크 : iron-catsup-ec4.notion.site/173-4-951da70e013d41f7868894aa1de35edd
(위 노션에다가 올려놓았습니다.)
(아래는 질문내용입니다.)
처음 for문에서 개행하면서 변수값을 계속 추적하면서 값을 확인하고 있는데요,
마지막으로 콘솔창에
> armor : 풀 플레이트
라고 찍히고는 것 까지는 명확히 이해했습니다.
여기서 제 생각은 14행의 print("{} : {}".format(k, character[key][k])) 를 마치고 나면 다시 for문 시작으로 돌아가면서 key 값이 items가 아니라 그 다음 skills 로 바뀌어야 한다고 생각했는데, 실제로는 그대로 items로 유지되면서 사진에서처럼 15행으로 개행됩니다. 심지어 마지막 else: 에도 걸려서 콘솔창에
> items : {'sword': '불꽃의 검', 'armor': '풀 플레이트'}
이렇게 출력해버립니다..
왜 다시 위의 for문으로 안 돌아가고 다음 if문인 15행으로 개행되는지 질문드려도 될까요? 어제도 질문 남겼었는데 오늘도 남기네요... 하루가 다르게 머리에 개념이 들어오는 게 느껴집니다. 감사합니다 쌤
죄송합니다 쌤 if가 아니라 당연히 elif를 쓰는 것을.. ;;; 감사합니다!
3번 count 문제에서 왜 number.count()를 사용하지 않나요? 저는 맨처음 이문제를 보고, numbers 리스트에서 count를 하기위해 반드시 count함수를 사용해야겠다는 접근으로 시작했거든요.
해당 함수로 만들 수 있다면, 그렇게 진행하시면 됩니다! 결과만 똑같이 나오면 아무 문제 없습니다!
오늘 강의 내용은 이해하는데 좀 오래걸렸네요. 좋은 강의 감사합니다.
안녕하세요 이 책으로 파이썬 공부하고있습니다.
제가 4번 문제를 풀다가 이렇게 이해하는것이 맞는지 궁금해서 댓글달아봅니다...
for key in character:
if type(character[key]) is dict:
for small_key in character[key]:
print(small_key, ":", character[key][small_key])
elif type(character[key]) is list:
for item in character[key]:
print(key, ":", item)
else:
print(key, ":", character[key])
소스코드는 이렇게 적어주셨고
제가 이해한 풀이방법은 이렇습니다.
character에서 key로 키를 하나씩 가져오는데 (총 네 개니까 네 번)
if 이번에 걸린 키가 딕셔너리라면...
--- 이렇게 출력 ---
elif 이번에 걸린 키가 리스트라면...
--- 이렇게 출력 ---
else 이번에 걸린 키가 딕셔너리와 리스트도 아니라면...
--- 이렇게 출력 ---
이렇게 이해하고 넘어가면 될까요??
항상 좋은 강의 감사합니다. !!
넵 그렇습니다!
14:16 에서 elif 구문 다음의 for 구문에 item을 넣었는데 왜 skill 함수가 나오는건가요?
딕셔너리로 반복
→ 리스트로 반복
하므로 리스트 내부의 요소를 출력하는 것입니다.
추가로 skill은 함수가 아닙니다!
두번쨰 봐도 마지막 문제는 어렵네요.
안녕하세요 질문이 있습니다
4번 예제에서
1 for key in character:
2 if type(character[key]) is dict:
3 for k in character[key]:
4 print("{} : {}".format(k, character[key]))
5 elif type(character[key]) is list:
6 for item in character[key]:
7 print("{} : {}".format(item, character[key]))
8 else:
print(key, ":", character[key])
이렇게 하였는데 4번과 7번에 character[key] 이렇게 해되 되는 건가요?
풀이에는 (k, character[key]) 그리고 (key, character[key][key]) 라고 되어있는데
실행에는 문제가 없지만, 책에서 원하는 답을 찾으시려면, 책과 같이 해주셔야 합니다(너무 단순한 코드라서 별도의 답이 없습니다). 이중으로 감싸진 리스트이므로, 이중으로 파고 들어가서 접근해주셔야 합니다. 책의 코드는
- 4번이 character[key][small_key]: 키 두 개가 다른 이름의 변수로 들어가 있습니다.
- 7번이 item으로 되어 있습니다. 이건 리스트의 요소를 출력하는 것이므로 이렇게 적은 것입니다.
마지막 부분
else:
print("{} : {}".format(key, character[key]))
를 출력했더니
items : {'sword': '불꽃의 검', 'armor': '풀플레이트'}
이것도 같이 출력이 되었는데
왜 그런걸까요???
character = {
"name": "기사",
"level": 12,
"items": {
"sword": "불꽃의 검",
"armor": "풀플레이트"
},
"skill": ["베기", "세게 베기", "아주 세게 베기"]
}
for key in character:
if type(character[key]) is dict:
for k in character[key]:
print("{} : {}".format(k, character[key][k]))
if type(character[key]) is list:
for item in character[key]:
print("{} : {}".format(key,item))
else:
print("{} : {}".format(key, character[key]))
코드 전체는 이렇게 생겼습니다.
name : 기사
level : 12
sword : 불꽃의 검
armor : 풀플레이트
items : {'sword': '불꽃의 검', 'armor': '풀플레이트'}
skill : 베기
skill : 세게 베기
skill : 아주 세게 베기
출력은 이렇구요~
else를 중간에 하나 빼먹으셨습니다...!
@@윤인성 헉 저도 원댓글 님 처럼 똑같이 저렇게 나오는데요 ㅜㅜ else 가 중간에 어디 빠진거죠..? ㅠㅠ 아무리 봐도 책에 있는 코드랑 똑같은데... ㅠㅠㅠ 다르게 나와서 몇시간째 헤메고 있네요 ..
@@아아아아-g7u if - if - else 로 되어 있는데 if - elif - else로 구성해주세요!
마지막 문제에서 if type is dict, elif type is list, else가 아니라 if type is str, elif is dic, else 순으로 하면 else에서 invalid syntax라는 오류가 뜨던데 왜 그런건가요??
오류는 코드를 잘못 입력하셔서 그렇습니다. 어떻게 입력하셨는지 코드를 올려주셔야 알 수 있습니다.
교재에서는 #딕셔너리인지 확인 하는 방법이: type({}) is dict라고 되어있는데 4번 문제에서는 if type(character[key]) is dict:라고 하셨더라구요. 제가 중괄호{}로 진행을 해보니 에러가 뜨구요....왜이런지 알려주실 수 있을까요?
딕셔너리인지 확인하는 방법은
type(딕셔너리_넣고) is dict입니다.
앞의 것은 예이고({}가 딕셔너리이므로)
뒤의 것은 character[key]를 확인하는 예라 이걸 넣은 것입니다.
중괄호로 진행했다는 것이 어떤 의미인지 알려주실 수 있을까요?
@@윤인성 아 type(character{key})이렇게 했었습니다^^;;
확인문제 2번을 아래와 같이 작성하였고, 동영상 강의와도 다르지 않음을 확인하였습니다.
pets = [
{"name": "구름", "age": 5},
{"name": "초코", "age": 3},
{"name": "아지", "age": 1},
{"name": "호랑이", "age": 1}
]
print("# 우리 동네 애완 동물들")
for pet in pets:
print("{} {}살".format(pet["name"], pet["age"]))
그런데 invalid syntax 뜨는 데 왜 그러는걸까요?
현재 올려주신 코드에는 문제가 없습니다.
아무래도 코드 전체를 입력하고 나서 저장을 안 하셔서,
입력을 하던 중간의 코드가 실행되어서 그런 것으로 보입니다!
코드를 저장하고 실행해주세요!
제가 해석한 것이 맞나요?
for key in character :
-> 캐릭터 안의 내용들을 key라는 방 안에 넣는다
if type(character[key]) is dict :
-> 만약 캐릭터의 키값이 딕셔너리면
for k in character[key] :
-> k 라는 방안에 캐릭터의 키값을 넣는다.
print("{} : {}".format(k, character[key][k])) -> ? 각각의 {}의 자리에 k와 character[key][k]값을 넣는다.
질문이 2개 있습니다.
1. 1번째 줄과 2번째 줄의 key는 서로 다른 것을 의미하는게 맞나요?
2. 4번째 줄에서 .format 옆의 k와 [k]에서 k는 character[key]를 의미하는데 [k]값이 무엇인지 모르겠습니다. 둘이 같은 것 아닌가요?
혹시 알려주실 수 있으신가요?
1. 넵 같은 키입니다!
2. `character[key]가 딕셔너리일 때`라는 조건이 걸렸을 때
for k in character[key]를 돌리므로
→ k에는 character[key]라는 딕셔너리 내부의 키가 들어갑니다.
따라서 character[key][k]는
{{"a": 1}}이 있다면, 딕셔너리를 2번 타고 들어가서 요소를 꺼내는 코드가 됩니다!
@@윤인성 감사합니다. 덕분에 이해가 되었습니다. 답답한 곳이 뚫렸네요.
감사합니다.
4번의 자료형을 확인하는 법이 이해가 잘 안가서 여쭤요.
a = [1, 2, 3]
if type(a) is list == True :
print("o")
else:
print("x")
print(type(a) is list)
를 써봤는데요, if를 통해서는 x가 출력되고 print에서는 True가 출력되더라구요.
print를 따르면 if에서 첫번째 조건(~~ == True)에 걸려서 o 이 출력되야 할 것 같은데 x 가 나와서 머리 감싸고 있어요...
자료형 확인하는 게 이해가 안가서 작성한 코드가 이해가 안가는 상황이라 멈추어버려서 해설이 필요해요 ㅠ ㅠ...
연산자 우선순위 때문입니다.
(type(a) is list) == True로 해주세요!
@@윤인성 type(a) is list == True 가 계산되서 True가 되고 if True: 로 적용되는 바람에 else의 print가 출력되게 된 건가요?
@@데우스-s2n 처음 주신 코드에서는
type(a) is {{list == True}}
@@윤인성 끄어어!!! 알려주셔서 감사합니다 ㅠ ㅠ 드뎌 골치 아픈 놈이 풀려났어요 ㅠ ㅠ 내가 만들고 내가 고생하는 어이없는 상황이였지만 덕분에 궁금증을 해결하고 빠져나갑니다!
답변 고맙고 감사합니다!!
안녕하세요! 별로 안중요한 것 같지만 질문이 있는데요ㅠㅠ
dictionary에서 age라는 key가 없을 때 사용하는 코드가
if dictionary.get("age") == None:
dictionary.get("age")
오탈자입니다 ;ㅁ; ...!! 둘을 바꿔주셔야 합니다!
4번 문제에서 character[key][k] 이부분이 이해가 너무 안가요 캐릭터키의 key의 k가 왜 나오는지 도저히 모르겠습니다 선생님..ㅠㅠ 이부분만 자세하게 좀 설명해주실수있으실까요??
예를 들어
a = [[[0]]]이라는 리스트가 있고
여기에서 0이라는 숫자를 꺼내려면
a[0][0][0]처럼 리스트 안의 리스트 안의 리스트로 꺼내야 할 것입니다. 이걸 생각하면서 코드를 읽어보시면 좋을 것 같습니다!
제가 연습문제 4번을 다시 하고 있는데 순서를 바꿔서 하고 있어요. 조건문을 str 먼저로요.
그런데 chararcter[key] is str:으로 하니깐 name:기사 밖에 안뜨더라구요. 12 때문에 그런 것 같아서 str or int로 바꿔봤어요.
character = {
"name":"기사",
"level": 12,
"items" : {"sword":"불꽃의 검",
"armor":"풀플레이트"
},
"skill":["베기","세게 베기", "아주 세게 베기"]
}
#for 반복문을 사용합니다.
for key in character:
if type(character[key]) is str or int:
print("{} : {}".format(key,character[key]))
elif chararcter[key] is dict:
pass
else:
pass
라고 하니 결과값이
name : 기사
level : 12
items : {'sword': '불꽃의 검', 'armor': '풀플레이트'}
skill : ['베기', '세게 베기', '아주 세게 베기']
이렇게 나오더라구요 ㅠㅠ 왜 이런걸까요..? 딕셔너리랑 리스트가 int로 들어가는건가요?
Sangmin's TV 프로그래밍 유머 중에 프로그래머 남편에게 “우유와 계란 2개씩 사와”했더니, 우유 1개랑 계란 2개를 사왔다는 이야기가 있는데, and or은 무조건 양쪽을 분리해서 계산한 뒤 합칩니다. Or int하면 언제나 true가 나옵니다.
@@윤인성양쪽을 분리해서 합친다는 말은 이해했습니다! 그런데 or int가 언제나 트루로 나온다는 건 왜 일까요 ㅠㅠ str or int = 문자열이나 정수일 경우..즉 float이나 딕셔너리 리스트 등은 이 경우 안에 안들어가지않을가요 ㅠㅠㅜ 너무어려워요 저 빡통인가바여
@@DailySangmin ㅇㅇ or int가 되면, ㅇㅇ이라는 조건과 int를 비교하게 되는데,
0, 빈컨테이너, 빈문자열 등을 제외하면 전부 True로 변횐되므로, int가 True로 변환됩니다.
따라서 ㅇㅇ or int는 뭘 해도 True가 나옵니다.
@@윤인성 헐! 그러면 int라는 클래스가 트루로 바뀌게 되면 설령 character[key]가 {}이나 []라도 전부 출력이되는건가요?
@@DailySangmin 넵 앞에 False를 쓰셔서 False or int 되어도 전체 결과는 True가 되기 때문입니다.
자꾸만 질문해서 죄송해요 ㅜㅜㅜ
마지막 부분 코드를 이렇게 입력했더니
for key in character:
if type(character[key]) is dict:
for k in character[key]:
print('{} : {}'.format(k), character[key][k])
elif type(character[key]) is list:
for item in character[key]:
print('{} {}'.format(key, item))
else:
print('{} {}'.format(key,character[key]))
IndexError: Replacement index 1 out of range for positional args tuple
인덱스 에러가 뜨네요..... ㅜ 코드 자체는 틀린게 없는거같은데,,, 왜이럴가요 휴,,,, ㅠㅠ
첫 번째 print() 함수 내부의 format 함수가 이상하게 적혀있어요! 해당 부분 확인해보시면 좋을 것 같습니다.
윤인성님이 코드를 보여주기 전까진 문제를 건들지도 못하겠네요.. 10분정도 혼자서 고민하다 윤인성님 코드를 보면 시원하게 뻥 뚫려서 기분이 좋긴합니다 ㅋㅋ 코딩할 맛 나네요
처음에는 쭉 외워서 쳐보시는 것도 좋는 방법이라 생각합니다...! 잘 모르겠는걸 여러번 외워서 하다보면 어느 순간부터는 그것들이 조합되서 새로운 것을 만들 수 있을 것이라 생각해요!
마지막 문제에서 name과 level은 dict도 아니고 list도 아니면 무엇인가요? 무엇이길래 else로 넘어간 것인가요?
문자열과 숫자입니다!
chatcter { 로 묶여져있고 딕셔너리와 같은 형태 key : value 형태를 갖추었는데 그래도 저건 딕셔너리가 아닌 건가요??
안녕하세요 ! 좋은 강의 감사합니다. 연습 문제 4번에 질문이 있는데요,
4번에서 코드 입력 시 dict, list, str 순으로 입력해주었는데(if type이 dict, elif type이 list, else(str)),
실행 결과,
그 순서가 바뀌어서 str에 해당하는 name, level이 제일 먼저 나오는 이유가 뭔가요??
Hyekyung Lee 파이썬 등의 프로그래밍 언어에서 딕셔너리(다른 프로그래밍 언어에서는 해시, 해시맵 등의 용어로도 부릅니다)는 처리 속도를 위해서 순서를 보장하지 않습니다. 일반적으로 순서를 보장해야 하면 리스트를 사용하고([["name", "기사"], ["level", 12]] 같은 형태)해야 합니다.
다만 파이썬 3.7버전 이후부터는 순서를 보장하는 형태로 바뀌었습니다(대신 위에서 언급한 속도를 잃었....). 그래도 딕셔너리를 순서를 보장하는 형태로 쓸 일이 많지는 않습니다. 현재 파이썬 3.8버전까지는 이 순서 보장과 관련된 버그들이 조금 있다는 보고가 있습니다.
@@윤인성 감사합니다 ㅎㅎ!
질문입니다...
1. 14line에 .format(k,character[key][k] 에서 character[key][k] 이 부분이 이해가 안가고
2. 17line에 .foramt(key, item) 이 부분에서 왜 key를 먼저써야하나요? 앞에서 item이라 변수 설정했으면 format 앞에 item이 먼저 나와야 하지 않나요?
1. a = [0, 1, 2]처럼 리스트라면
a[0]라고 쓸 수 있는 것처럼
character[key]에 [0, 1, 2]처럼 들어가 있으면
character[key][0]이라고 쓸 수 있습니다.
[따라서 딕셔너리, 리스트, 문자열 등이라면 사용할 수 있습니다]
2. 출력은 개인의 마음이므로 아무렇게나 해도 상관 없습니다. 현재는 출력해야하는 실행 결과가 "{키} : {값}"이므로 그렇게 설정한 것입니다.
감사합니다!
선생님, 4-2강 2번 연습문제 질문드립니다.
# 딕셔너리의 리스트를 선언합니다.
pets = [
{"name": "구름", "age": 5},
{"name": "초코", "age": 3},
{"name": "아지", "age": 1},
{"name": "호랑이", "age": 1}
]
print("# 우리 동네 애완 동물들")
for pet in pets:
print("{} {}살".format(pet["name"], pet["age"]))
이렇게 코드 적고 실행시켰는데
계속 SyntaxError: invalid syntax 이렇게 뜨네요...
제 눈엔 동영상 속 코드랑 똑같은데 왜 계속 오류가 뜰까요 ㅠㅠ
현재 코드에는 오류가 없습니다!
아마도
1. 코드 입력 중에 저장을 누르고
2. 다 입력하고는 저장을 안 눌러서
3. 중간 상태의 코드가 실행되어서 오류
인 것 같습니다! 저장을 다시 한 번 확인해주세요!
강의 잘 듣고 있습니다.
4번 문제에 대해서 질문이 있는데 문제 그대로 딕셔너리를 선언한 후에
type(character["items"]를 입력했을 경우에는 dict라고 나오는데
type(character["items"]) is dict를 입력했을 경우에는 False가 나옵니다ㅠㅠ
그래서 인지 답 그대로 코드를 입력해도 원하는 결과가 안나옵니다. 혹시 무엇때문일지 알 수 있을까요..?
참고로 구글 colaboratory를 이용하고 있습니다.
전체 코드를 올려주실 수 있을까요![type({}) is dict는 True가 나오는게 맞다보니, 다른 부분에 문제가 있을 것도 같아서요!]
추가로 colab은 이전의 코드들이 영향을 줄 수 있습니다. dict = {} 등으로 dict를 다른 것으로 할당하지는 않으셨는지도 확인해보셔야 합니다!
@@윤인성 답변 감사합니다!
전체코드는 이렇게 썼고
character = {
"name" : "기사",
"level" : 12,
"items" : {
"sword" : "불꽃의 검",
"armor" : "풀플레이트"
},
"skills" : ["베기", "세게 베기", "아주 세게 베기"]
}
for key in character:
if type(character[key]) is dict:
for a in character[key]:
print("{} : {}".format(a,character[key][a]))
elif type(character[key]) is list:
for item in character[key]:
print("{} : {}".format(key, item))
else:
print("{} : {}".format(key, character[key]))
결과는 이렇게 나왔습니다.
name : 기사
level : 12
items : {'sword': '불꽃의 검', 'armor': '풀플레이트'}
skills : ['베기', '세게 베기', '아주 세게 베기']
@@윤인성 하루 지나고 다시 돌려보니 오류 없이 잘 실행되었습니다! ㅎㅎ;; 답변 감사합니다!!
numbers={1,2,3,4,5,1,2,3,}
counter={}
for number in numbers:
if counter.get(number)== None :
counter[number]=1
else:
counter[number]+=1
print(counter)
결과: {1: 1, 2: 1, 3: 1, 4: 1, 5: 1}
확인문제 3번을 이런 식으로 풀려고 했는데 결과가 저런식으로 밖에 안나오네요 get() 을 사용했을 때 어떤 부분에서 잘못됐나요
앞의 numbers를 리스트로 만들어주세요!
현재 {}로 되어 있어서 내부적으로 이상한 형태의 딕셔너리로 생성되어 원하시는 결과가 나오지 않는 것입니다!
@@윤인성 감사합니다 ㅠ
3번 문제에
for number in numbers:
if number in counter:
이렇게 해서 counter 안에 number가 있는지 확인하는 거잖아요
그런데 저는
if counter in numbers: 이렇게 생각했거든요.., numbers 안에 counter가 있는 경우 없는 경우 제 머리가 나쁜건지.. 이런식으로 해도 똑같이 될 줄 알았는데 "값"이 1에서 안올라가더라구요 왜 안되는건지 혹시 설명 한번만 부탁드려도 될까요...
그냥 파이썬의 설계가 그렇게 되어있습니다.
- 요소 in 리스트
- 키 in 딕셔너리
만 가능하지, 딕셔너리 in 리스트나 리스트 in 딕셔너리는
앞에 있는 것 전체가 요소로 작용하지 않는한 의미가 없습니다.
@@윤인성 감사합니다!!
안녕하세요! 강의듣다가 이렇게 막힌 적은 처음이라 질문드립니다 ㅠㅠ 마지막 문제 중에
for k in character[key]:
print("{} : {}".format(k,character[key][k]))
이런 구문들에서 format 뒤에 ()안을 잘 이해하지 못하겠는데 어떤 부분을 더 공부해야
이해할수있을까요 ? ㅠㅠ
어떤 것이 이해 안 되는지 조금 더 구체적으로 생각해서 이야기 해주실 수 있을까요...!
안녕하세요
저는 예제 3번을 이렇게 풀었는데 계속 키에러 가 발생하네요
이렇게 풀면 왜 답이 안나오는걸까요?
numbers = [1,2,6,8,4,3,2,1,9,5,4,9,7,2,1,3,5,4,8,9,7,2,3]
counter = {}
i = 0
for number in numbers:
if number in numbers[i:]:
i += 1
counter[number] = counter[number] + 1
else:
i += 1
print(counter)
일단 오류가 나는 위치는
counter[i] + 1 입니다(오른쪽 부분)
꺼낼 키가 없으므로 꺼낼 수 없어서 오류가 납니다!
앞에서 미리 "키가 있는지 확인"하는 등의 처리가 필요합니다.
딕셔너리를 만들때 어떤 변수 안에 할당을 하게 되잖아요 보통 a = { ~~}. 그런데 리스트 안의 딕셔너리는 그럼 pets[0] = { ~~ } 이런 형태이고 for ~ in 문에서 pet 이라는 iteration에 들어가게 되는 변수가 바로 pets[0], pets[1]... 이런식으로 되는 것이겠군요
for key in character:
if type(character[key]) is dict:
for k in character[key]:
print("{} : {}".format(k, character[key][k]))
elif type(character[key]) is list:
for skill in character[key]:
print("{} : {}".format(key, skill))
for key in character:
if type(character[key]) is dict:
for k in character[key]:
print("{} : {}".format(k, character[key][k]))
elif type(character[key]) is list:
for skill in character[key]:
print("{} : {}".format(key, character[key][skill]))
else:
pass
위에가 영상에서 보여주신 코드고 아래가 제가 만든 코드인데요,
elif 구문에서 character key skill 과 그냥 skill이 뭐가 달라서 전자가 오류가 나는지 궁금합니다.
반복문에서 "딕셔너리에 반복을 돌리는지"와 "리스트에 반복을 돌리는지"에 따라서 반복 변수에 "값이 들어가는 경우"와 "키가 들어가는 경우"로 나뉩니다.
dict는 딕셔너리라서
→ key는 키입니다.
따라서 dict[key]로 값에 접근합니다.
해당 위치에서 character[key]는 리스트라서
→ skill은 값입니다.
따라서 이를 그냥 활용합니다[또는 인덱스를 넣어서 사용할 수는 있습니다].
이걸 기억하면서 해당 줄 위에 print(character[key], skill)을 넣어서 출력해보시는걸 추천드립니다(직접 보는게 가장 빠르니까요!)
흑흑 동영상보지 않고 드디어 4번 문제 풀었네요(3번은 실패 OTL..) 책 출판 감사합니다. ㅋㅋ 파이썬 공부보다 꾸준히 공부하는게 더 어렵네요 ㅠㅜ
안녕하세요. 마지막 문제에서 for 밑에 If 문을 Dict. 부터 시작하셨는데요. 저같은 경우는 if 문을 type(xxx) is str or int: 로 하였더니, 여기서 다 추출되는것으로 나옵니다. 분명 Type은 Dict와 List인데 왜 여기서 추출되는지 모르겠습니다.
for key in character:
print(type(character[key]))
if type(character[key]) is str or int:
print("{} : {}".format(key,character[key]))
elif type(character[key]) is dict:
for key2 in character[key]:
print("{} : {}".format(key2,character[key][key2]))
elif type(character[key]) is list:
for key3 in character[key]:
print(key,":",key3)
Name : 기사
Level : 12
item : {'sword': '불꽃의검', 'armor': '풀플레이트'}
skill : ['베기', '세게 베기', '아주 세게 베기']
일반적으로 생각하면, 이렇게 작성할 것 같은데, 그렇지 않아서 대학교 중간고사 과제로 많이 나오는 부분인데
and, or 연산자 등은 현재 쓰신 것처럼
ㅇㅇ is ㅁㅁ or ㅂㅂ로 쓸 수 없습니다.
양쪽에 무조건 불 표현식이 와야해서
(ㅇㅇ is ㅁㅁ) or (ㅇㅇ is ㅂㅂ)처럼 써주셔야 합니다!
확인문제 3번 질문이요! counter에 딕셔너리로 저장될 때 반복문을 돌면서 [키:값] 이렇게 저장이 되서 numbers 확인 할 때마다 값에 더하기가 되는 건가용?
넵!
확인 문제 4번에서 문자열인지 리스트인지 딕셔너리 인지 구분 하는 방법이 먼가요? 찾아 보고 있습니다만 이해가 어렵네요
그리고 elif 부분에서 format(key, item)이 되는 이유를 잘 모르겟어요 else 부분에서도 format(key,character[key][k])라고 했는데 if 부분에서는 format(k,character[key][k])라고 했는데 왜 나머지 두개는 저렇게 되는지 설명좀 부탁드려요
type() 함수를 사용해서 자료형 비교를 해주시면 됩니다!
왜 item, character[key][k]가 되는지는 각각의 것을 단계적으로 출력해보시면 더 쉽게 이해되실 것이라 생각합니다.
한 번 character, character[key], character[key][k]를 모두 출력해보시기 바랍니다!
확인문제 4번 질문 있습니다!
반복문 내의 조건문 코드 순서로 봤을 때 sword, armor -> skill -> name, level로 작성됐는데, 출력 시 왜 name부터 출력되는지 궁금합니다.
반복문은 리스트 또는 딕셔너리의 순서대로 실행되는 것이지, 내부에 있는 조건문의 순서로 실행되지 않습니다!
간단하게 반복문 바로 다음 줄에 print(key)를 넣어서 출력해보시면 더 쉽게 이해하실 수 있을 것이므로, 확인해보세요!
@@윤인성 하나 더 알아갑니다! 감사합니다~
안녕하세요, 선생님.
마지막 문제에서 이중for문에서 for item 이 아닌 skill 이 명시되어 있어야 할 것 같습니다.
skill에 대한 값이 리스트형이고, item에 대한 값은 dict 이기 때문입니다.
혹시라도 제가 잘못알았다면 죄송합니다 ㅠㅠㅎㅎ
항상 유익한 강의 고맙습니다. :-)
어떤 의미이신지 잘 모르겠습니다.
@@윤인성 skill 이 리스트형이고, item 이 딕셔너리형으로 문제에 나와있어서, 변수를 skill로 설정하는 것이 더 직관적이지 않을까라고 생각했습니다 :-)
numbers = [1, 2, 6, 8, 4, 3, 2, 1, 9, 5, 4, 9, 7, 2, 1, 3, 5, 4, 8, 9, 7, 2, 3]counter = {}
for number in numbers : if number in counter : counter[number] += 1 else: counter[number] = 1
print(counter)궁금해서 질문 남깁니다.1 counter[number] += 1 (+를 = 앞에 붙이는 이유)2.counter[number] += 1 (+= 1 과 = +1 값이 다르게 나오는 이유)3.counter[number] += 1(+= 이런 식으로 연산자를 앞에다 붙이는건 어디에 사용되나요?)4.counter[number] += (+= 처럼 -= *= /= %= 이렇게도 사용되나요?)
아이고 @_@ .... 댓글을 엄청 늦게 봤군요 @_@ ...!
+=은 강의 초반에 나온 것처럼 복합 대입 연산자입니다. 이 기호 자체가 특수한 연산자입니다. 대부분의 연산자가 이러한 복합 대입 연산을 지원합니다. = +1은 그냥 양수 1을 할당하라는 의미입니다.
안녕하세요
조금 늦은 감이 있지만..ㅠ예제 3번에서 막혀서 질문드립니다.
for key in character:
name = character[key]
if type(name) is str:
print(key, ":", name)
elif type(name) is dict:
for i in name:
print(i, ":", name[i])
else:
for j in name:
print(name, ":", j)
이런 식으로 코드를 만드니까 마지막 리스트에서
['베기', '세게 베기', '아주 세게 베기'] : 베기
['베기', '세게 베기', '아주 세게 베기'] : 세게 베기
['베기', '세게 베기', '아주 세게 베기'] : 아주 세게 베기
계속 이렇게 뜨더라구요ㅠㅠㅠ딕셔너리나 다른 부분은 다 실행결과대로 나오는데!
왜 이녀석만 이런지 너무 궁금합니다 흐규ㅠ
+무료강의 너무 잘 보고 있습니다:)
리스트일 때는 name이 리스트이므로
마지막 줄의 print(name, ":", j)에서 왼쪽에 리스트가 뜨는 것입니다.
혹시 지금도 모르는 내용을 설명해주시나요??
마지막 예제를 실행하면
for key in character: 라는 줄에
SyntaxError: invalid syntax 가 발생하는데 왜그러는 걸까요??ㅠㅠㅠㅠㅠ
character = {
"name" : "기사",
"level" : 12,
"items" : {
"sword" : "불꽃의 검",
"armor" : "풀플레이트"
},
"skill" : ["베기", "세게 베기", "아주 세게 베기"
]
for key in character:
if type(character[key]) is dict:
for k in character[key]:
print("{} : {}".format(k,character[key][k]))
elif type(character[key]) is list:
for e in character[key]:
print("{} : {}".format(key,character[key][e]))
else:
print("{} : {}".format(key,
딕셔너리의 닫는 괄호가 없어서 오류가 발생합니다. 신텍스 에러는 기본적으로 뭔가 오탈자가 있어서 발생합니다.
감사합니다!! 🙏 말씀해주시니 이제야 오류가 보이네요.
171쪽 2번 문제에서 추가 조건으로 나온 숫자와 문자열 사이에 빈칸 없게 출력하는 것은 어떻게 해야하나요? 그냥 print{"{}{}".format~) 처럼 애초에 {} 사이에 띄워쓰기 없이 하는 것이 정답은 아닐 듯 한데요ㅠ
숫자와 "살"자에 띄어쓰기가 없으라는 의미라서 "{}살"로 해주시면 됩니다! 또는 print() 함수에 sep 매개변수를 주셔도 됩니다!
감사합니다. 요긴 멋있고 지금은 이쁜네요^^
확인 문제 4번에서,
코드 작성 시엔 맨 마지막 줄에 name과 level에 대한 정보를 출력하라고 입력하는 데,
실행 결과에는 왜 맨 처음에 등장하는 것인 지 궁금합니다!
조건문에 의해서 앞의 것을 건너뛰고 해당 줄을 실행하기 때문입니다!
(확인문제 3번) for number in numbers:
counter[number]=+1
print(counter) // 이렇게 쓰면 안되는 이유가 뭘까요?
=+는 없는 연산자입니다.
+=로 써주세요!
@@윤인성 답변 감사합니다. :) 인성 님 덕분에 파이썬 공부 잘하고 있습니다. 아직까지는요 ㅎㅎ
질문 있습니다.
4번째에
답입력시
for k in character[key]:
print("{}:{}".format(k,character[key][k]))
항목이 있는데
[key ][k ]
character[key]로 딕셔너리 또는 딕셔너리의 요소 하나를 선택했는데, 이게 리스트 또는 딕셔너리라서 그냥 한 번 더 character[key][k]로 선택하는 것 뿐입니다. 새로운 문법은 아닙니다.
@@윤인성 감사합니다.
질문 좀 드리겠습니다!
마지막 예제에서
for key in character:
if type(character[key]) is str:
print('{} : {}'.format(key,character[key]))
elif type(character[key]) is list:
for b in character[key]:
print('{} : {}'.format(key, b))
elif type(character[key]) is dict:
for b in character[key]:
print('{} : {}'.format(b, character[key][b]))
딕셔너리를 가장 마지막에다가 두고 작성했습니다.
이렇게 하니 답은 잘 나왔습니다. 하지만 마지막에 elif type(character[key]) is dict: 대신
else: 하면 오류가 뜨는데 이 부분에 대해서 알려주실 수 있나요?
어떤 오류가 뜨는지도 함께붙여주실 수 있을까요!
4번 문제에서 for k in character [key] 에서 꼭 "k" 라고 정 해야 되는 건가요? 그리고 .format(k, character[key][k]) 에서 왜 character[key] 옆에 [k] 가 붙어야 하는 지 이해가 안됩니다. 도와주세요오오
k는 반복 변수이므로 마음대로 정하시면 되고 + character[key]가 딕셔너리이므로 한 번 더 character[key][k]로 접근할 수 있는 것입니다.
프로그래밍에서 "왜 ㅇㅇ해야 하는지"는 그저 "그 코드를 써야 문제를 풀 수 있으니까"뿐입니다[수학에서 왜 방정식의 해를 구할 때 근의 공식을 쓰나요? → 그걸 써야 쉽게 풀리니까"와 비슷한 내용입니다].
for key in character:
if type(character[key]) is dict:
for a in character[key]:
print("{} : {}".format(a,character[key][a]))
elif type(character[key]) is list:
for item in character[key]:
print("{} : {}".format(key,item))
else:
print("{} : {}".format(key, character[key]))
여기서 elif 부분에 item은 어디에서 나온 건지 모르겠어요
바로 아래의 for 반복문의 반복 변수인 item입니다(반복 변수는 원하는대로 이름을 붙여주시면 되는 것입니다).
조금만 더 하면 될것같은데 반복문에 반복문을 적용하고 그러니 좀 많이 헷갈리네요 ㅠ
이중 반복이 굉장히 어려운 내용이라서(실무에 계신 분들도 잘 못하는 부분)(사실 이중까지 쓸 일도 많지 않아서), 차근차근 느긋하게 익히시면 좋을 것 같습니다!
안녕하세요, 4-2-3번 문제를 푸는데 저는 교안과 달리
for number in numbers:
counter[number] = numbers.count(number)
형식으로 풀었는데, 이러한 방식으로 접근한다면 선생님께서 접근하는 방식과 어떤 점에서 차이가 있는지가 궁금합니다. 혹시 제가 사용한 코드를 이용한다면 속도가 더 느려지는건가요?
큰 차이 없고 더 빠릅니다.
기본적으로 파이썬은 "내가 파이썬으로 뭔가를 더 작성하려고 할수록 느려지는 언어"라서
내장되어 있는 함수를 어떻게든 활용하는 것이 좋습니다(내장 함수는 C 언어로 구현되어 있어서 빠릅니다).
다만 공부 중이므로 추가적인 내장 함수를 사용하지 않고, 그냥 만들어본 것입니다!
감사합니다 선생님 열심히 공부하겠습니다!
진짜 슬슬 따라가기 벅차네요 ㅠㅠ 부분적으로 다시 듣는게 좋을까요?????
반복문 함수 부분이 제일 어렵다보니 여러 번 복습은 하시는 것이 좋을 것이라 생각합니다...! 이 책 전체가 대학교 1~2학기 과정이므로 느긋느긋 6-12개월 생각하고 공부하셔도 좋을 것 같습니다...!
안녕하세요 질문있습니다...!
print("{} : {}".format(k, character[key][k])) 대신
print(k, ":", character[key][k])로 풀었습니다! 값은 답과 똑같이 나오는데 꼭 format함수를 써야하나요?
둘 중 어떤게 더 나은 건지 알 수 있을까요?
그게 그거라 아무 것이나 사용해주셔도 괜찮습니다 'ㅁ' ...!
안녕하세요 파이썬 독학시작한지 4일째 되는 컴퓨터전공과 학생입니다.
혹시 4단원 마무리 예제는 다풀어봤구요 혹시 연습할 수 있는 문제들이 더있나요??
4장까지만으로는 4장 정도의 예제만 풀 수 있어서, 일단 함수 부분까지 함께 끝내고, 알고리즘 대회 문제들을 풀어보면 좋을 것 같습니다![함수 마지막 부분에 관련된 내용을 설명합니다]
@@윤인성 감사합니다! 여느책보다 도움이많이됩니다!
질문있습니다!
zeta = input("안에 들어있는지 확인하고 싶은 키를 입력하시오(해당 값이 출력됩니다): ")
if zeta in dict_a:
print("키의 값, {}가 딕셔너리 내부에 존재합니다.".format(dict_a[zeta]))
else:
print("키워드가 딕셔너리 내부에 존재하지 않습니다.")
라고 쓰고
딕셔너리에는 True: "강아지"
라는 키와 값을 넣어줘서
확인하고 싶은 키에
True도 넣어보고
"True"도 넣어봤는데
다 존재하지 않는다고 뜨네요..
boolean도 키에 넣을 수 있는데 왜 이렇게 되는 것인가요?
dict_a = {
True: '강아지'
}
print(True in dict_a)
print(dict_a[True])
로 했을 경우 문제 없이 실행됩니다. 다시 한 번 해보시고 + 안 될 경우 python 명령어를 그냥 쳤을 경우에 나오는 인터랙티브 셸의 위쪽에 있는 글자들을 보시고 파이썬 버전이 몇인지 확인해주세요...!
잘 봤습니다. 감사합니다. print() 는 꼭 필요한 작업인가요?
출력을 하려면 print()가 무조건 필요합니다.