728x90

구름 IDE에서 IndexError 가 발생하는 경우!

* 오류내용
Traceback (most recent call last):
File "application.py", line 12, in 
application.run(host='0.0.0.0', port=int(sys.argv[1]))
IndexError: list index out of range
from flask import Flask

application = Flask(__name__)


@application.route("/")
def hello():
    return "Hello goorm!"


if __name__ == "__main__":
    application.run(host='0.0.0.0', port=5000, threaded=True)

위 코드에서 application.run(host='0.0.0.0', port=5000, threaded=True) 로 코드를 바꿨음에도 저장을 누르지 않아서 기존 코드인 application.run(host='0.0.0.0', port=int(sys.argv[1]))으로 실행되는 것 같습니다.

저장이 안 되면 상단 메뉴바 application.py 옆에 * 모양으로 뜹니다. 

==> ctrl + s 눌러서 저장해주시면 정상적으로 작동합니다.

 

또한 '프로젝트-실행 URL과 포트'에서 설정한 포트와 코드 내의 포트가 다르다면 실행은 되더라도 외부에서 접근이 불가능하니 꼭 맞춰주세요!

 

해당 내용을 공유해주신 const4nt0228님 정말 감사합니다!

728x90
728x90

kafka 설치는 이전 강의를 확인해주세요!

https://novice-engineers.tistory.com/28

 

[BigData] kafka - 개발자의 연봉 상승을 위한 공부 (설치)

빅데이터 하면 빠질 수 없는 스킬 중 하나인 kafka를 다뤄보는 시간을 갖도록 하겠습니당! 1. java JDK 설치 (요건 설치되어 있다고 생각하고 넘어가겠습니다) 2. Kafka 설치 2-1: kafka tgz 파일 설치 위 슬

novice-engineers.tistory.com

 

이번 실습은 간단하게 문자 input, output을 확인해 보겠습니다.

1. config 설정

0123456
config 설정

1. C:\[kafka버전] 이동 -> 우클릭 -> 새로 만들기 -> 폴더 -> data 디렉토리 생성

2. data 디렉토리 더블 클릭 -> 우클릭 -> 새로 만들기 -> 폴더 -> kafka 디렉토리 생성 (똑같이 zookeeper 디렉토리 생성)

3. C:\[kafka버전]\config 이동 -> zookeeper.properties 파일을 메모장에 끌어 오기

4. C:\[kafka버전]\data\zookeeper 경로 복사 -> zookeeper.properties 의 "dataDir=path" -> path 부분에 복사한 경로 붙여 넣고 저장 (Ctrl + F 누른 후 dataDir 찾으시면 빨리 찾을 수 있어요!)

5. C:\[kafka버전]\config 이동 -> server.properties 파일을 메모장에 끌어 오기

6. C:\[kafka버전]\data\kafka 경로 복사 -> server.properties의 "log.dirs=path" -> path 부분에 복사한 경로 붙여 넣기(4번과 동일한 방법으로 진행하시면 됩니다!)

7. server.properties의 "zookeeper.connect=localhost:2181"를 "zookeeper.connect=0.0.0.0:2181"로 변경 후 저장

 

2. 실습

01
zookeeper, kafka 실행

1. zookeeper 서버 시작

- C:\[카프카버전]\bin\windows 디렉토리 이동 -> zookeeper-server-start.bat ../../config/zookeeper.properties 입력

(반드시 zookeeper 먼저 실행해주세요)

../../config/zookeeper.properties 부분은 저희가 위에서 설정한 값을 반영해 주기 위해서입니다.

 

2. kafka 서버 시작

- 새로운 cmd창 열기 (위 cmd창 끄면 안 돼요!!!) -> kafka-server-start.bat ../../config/server.properties 입력

../../config/server.properties 이유는 위와 동일합니다! (1과 마찬가지로 cmd창 끄면 안 돼요!!!) 

 

3. topic 생성

토픽 생성

1. topic 생성

- 새로운 cmd창 열기 -> kafka-topics.bat --create --topic test_topic --bootstrap-server localhost:9092 입력

 

2. 생성한 topic 확인

- 새로운 cmd창 열기 -> kafka-topics.bat --describe --topic test_topic --bootstrap-server localhost:9092 입력

 

4. 프로듀서 & 컨슈머 실행 & 확인

01
프로듀서 & 컨슈머 실행 & 확인

1. 프로듀서 실행

kafka-console-producer.bat --topic test_topic --bootstrap-server localhost:9092 입력

 

2. 컨슈머 실행

새로운 cmd창 열기 -> kafka-console-consumer.bat --topic test_topic --from-beginning --bootstrap-server localhost:9092 입력

 

3. 확인

프로듀서 cmd창에서 글 입력 후 컨슈머 cmd창 확인

728x90
728x90

빅데이터 하면 빠질 수 없는 스킬 중 하나인 kafka를 다뤄보는 시간을 갖도록 하겠습니당!

 

1. java JDK 설치 (요건 설치되어 있다고 생각하고 넘어가겠습니다)

 

2. Kafka 설치

2-1: kafka tgz 파일 설치

0123

위 슬라이드와 똑같이 진행해주세요.

 

2-2: tgz 파일 압축 풀기

0123

1. win키(Ctrl옆에있는키입니다)+R누르고 cmd 입력 -> cmd열기

2. 다운로드 경로로 이동 ( 경로 모르시는 분들은 3번째 슬라이드 참고하세요! )

3. tar -zxvf [카프카버전]  입력

4. 압축 푼 디렉토리 확인

 

2-3: 실행 확인

실행 확인

1. cd [카프카버전]  : 카프카 디렉토리 이동

2. cd bin  : bin 디렉토리 이동

3. cd windows  : windows 디렉토리 이동

4. kafka-topics.bat  : 실행 확인

 

2-4: path 설정

012345

1. cmd 새로 열어서 kafka-topics.bat 명령어 날려보기 (오류나는게 정상입니다)

2. 2-3에서 압축 푼 [카프카버전] 디렉토리를 C드라이브(로컬디스크) 밑으로 이동 시켜주세요!

( 이동 안 하면 나중에 실행할 때 오류가 발생합니다!)

3. cd [카프카버전]/bin/windows 이동

4. echo %cd% 입력 후 경로 복사

6. win키 누르기 -> "환경"입력 -> 엔터

6. 4에서 복사한 경로 환경 변수에 넣어주기 (5번째 슬라이드 참고하세요)

7. 명령어 날리고 확인

 

다음 장에서 실습 진행해 보도록 하겠습니다!

728x90
728x90

1.4.5부터 Sqoop은 암호화될 암호를 저장하는 JKS 사용을 지원하므로 암호를 파일에 일반 텍스트로 저장할 필요가 없습니다.

Java KeyStore를 사용하여 달성할 수 있습니다.

 

1. 명령어: hadoop credential create Alias–provider jceks://hdfs/저장경로/패스워드파일명.jceks

Ex) hadoop credential create web.pass -provider jceks://hdfs/user/test/TEST_PASSWORD.jceks

 

2. Password 입력 (2)

 

728x90
728x90

for문의 구조

for 변수 in 리스트(튜플,문자열 등):
    코드...
    코드...
    ...

for문은 다음에 배울 while문과 비슷한 반복문입니다.

 

일반적인 for문

for_list=['하나','둘','셋']
for i in for_list:
    print(i)

# 1. for_list라는 리스트의 첫 번째 요소인 '하나'가 i 변수에 대입되고 print(i)에 의해 '하나'가 출력된다.

# 2. for_list라는 리스트의 두 번째 요소인 '둘'이 i 변수에 대입되고 print(i)에 의해 '둘'이 출력된다.

# 3. for_list라는 리스트의 세 번째 요소인 '셋'이 i 변수에 대입되고 print(i)에 의해 '셋'이 출력된다.

 

다양한 for문

for_list=[('하나',1),('둘',2),('셋',3)]
for firsth,second in for_list:
    print(firsth,second)

# 방식은 위와 동일한데 for_list라는 리스트에 ()튜플을 이용하여 for문을 수행합니다.

 

for문과 if문 사용

학생의 점수가 80점 이상이면 "잘했어요!"를 출력하고 80점 이하이면 "아쉬워요!"를 출력하는 예제입니다.

point=[68,91]
for i in point:
    if i>=80:
        print("잘했어요!")
    else:
        print("아쉬워요!")

# 1. point 리스트의 첫 번째 요소(학생)의 점수는 68점으로 if문의 조건이 False이기 때문에 "아쉬워요!"가 출력됩니다.

# 2. point 리스트의 두 번째 요소(학생)의 점수는 91점으로 if문의 조건이 True이기 때문에 "잘했어요!"가 출력됩니다.

 

for문과 continue

continue는 "계속하다"라는 의미로 continue문을 만나면 다시 for문으로 돌아가게 됩니다.

글로는 이해하기 어려울 수 있으니 바로 예제를 진행해볼게요!

앞의 예제에서 80점 이상인 학생에게만 "잘했어요!"를 출력하겠습니다. (보기 편하게 점수까지 출력하겠습니다.)

point=[68,91,60,85]
for i in point:
    if i<80:
        continue
    print("%d점수 잘했어요!"%i)

# 1. if 조건에서 80점 미만이면 continue문을 만나서 바로 for문으로 올라가게 됩니다.

# 1. 68은 continue문에 의해 for문으로 이동 (빨간색)

# 2. 91은 continue문에 걸리지 않고 출력 (초록색)

# 3. 60은 continue문에 의해 for문으로 이동 (파란색)

# 4. 85는 continue문에 걸리지 않고 출력 (보라색)

 

 

for의 친구 range 함수

range는 숫자 리스트를 자동으로 만들어주는 함수입니다. for문과 같이 정말 많이 쓰입니다!

# 1.
for i in range(10):
    print(i)
# 2.    
for i in range(1,11):
    print(i)

※ 주의사항!

range(시작, 끝)

- 시작의 default는 0으로 위 코드 #1.처럼 적어주지 않으면 range(0,10)과 동일한 의미입니다.

- 끝 숫자는 포함되지 않습니다. 즉 끝 숫자-1 까지만 출력됩니다.

그래서 위 코드에서 #1.은 0~9까지 출력되고 #2.는 1~10까지 출력되는 것입니다!

 

range 함수의 활용

1~10까지 더하는 예제입니다.

tot=0
for i in range(1,11):
    tot+=i
print(tot)

# 1. tot의 초깃값은 0입니다.

# 2. tot+=i는 tot=tot+i와 같은 코드입니다.

# 2-1. tot=tot(0)+i(1)  ==> tot=1

# 2-2. tot=tot(1)+i(2)  ==> tot=3

# 2-3. tot=tot(3)+i(3)  ==> tot=6

# 2-4. tot=tot(6)+i(4)  ==> tot=10

# 10까지 반복

# 3. 결과는 1부터 10까지 더한 55가 출력됩니다.

 

Quiz) 1~10까지 곱하는 코드를 작성해보세요!  힌트: 곱하기는 * 입니다.

tot=1 # 곱하기이므로 초깃값을 1로 셋팅!

for i in range(1,11):

    tot=tot*i   #tot*=i 동일한 코드입니다.

print(tot)

 

이중 for문 (구구단)

이중 for문을 가장 이해하기 쉬운 구구단을 만드는 예제입니다.

프로그래밍을 처음 접하시는 분은 이중 for문에서 혼란이 올 수 있는데 최대한 쉽게 설명드릴게요!

for i in range(2,10):
    for j in range(1,10):
        print(i,"*",j,"=",i*j)
    print(i,"단 종료!")

위 코드에서 for i in range(2,10) 코드가 제일 먼저 있으니까 2~9까지 출력이 될 것입니다.

왜 2~9까지 출력인지 이해가 안 가시는 분은 위 range 함수의 활용을 다시 한번 확인해주세요!

두 번째 라인에는 for j in range(1,10) 코드가 있으니 1~9까지 출력될 것입니다.

그럼 flow를 작성해보겠습니다.

# i=2  j=1 : i(2)*j(1)=i*j(2x1)  즉 "2*1=2" 가 출력됩니다.

# i=2  j=2 <j가 1증가됨>: i(2)*j(2)=i*j(2x2)  즉 "2*2=4" 가 출력됩니다. 

# i=2  j=3 <j가 1증가됨>: i(2)*j(3)=i*j(2x3)  즉 "2*3=6" 이 출력됩니다.

# i=2  j=4 <j가 1증가됨>: i(2)*j(4)=i*j(2x4)  즉 "2*4=8" 이 출력됩니다.  (5,6,7,8 반복이라서 9로 넘어가겠습니다.

# i=2  j=9 <j가 1증가됨>: i(2)*j(9)=i*j(2x9)  즉 "2*4=18" 이 출력됩니다.  

# j가 9까지 모두 출력됐기 때문에 for j in range(1,10) 코드(for문)는 종료되고 print(i,"단 종료!")로 인해서 "2단 종료!"가 출력됩니다.

# i=3  j=1 <i가 1증가되고 j는 다시 1부터 시작>: i(3)*j(1)=i*j(3x1)  즉 "3*1=3" 이 출력됩니다. 

# i=3  j=2 <j가 1증가됨>: i(3)*j(2)=i*j(3x2)  즉 "3*2=6" 이 출력됩니다. 

# i=3  j=3 <j가 1증가됨>: i(3)*j(3)=i*j(3x3) 즉 "3*3=9" 가 출력됩니다.

# 계속 반복되면서 9단까지 출력됩니다!

이중 for문이 잘 이해가 안되시는 분은 댓글에 남겨주세요! (저도 처음 공부할 때 이중 for문이 가장 어려웠어용...)

 

리스트 내포 사용

리스트 안에 for문을 포함하는 리스트 내포를 사용하면 직관적인 코드를 만들 수 있습니다.

리스트 내포의 구조
[표현식 for 변수 in 반복 가능한 객체 if 조건]
num=[1,2,3]
result=[]
#1.
for i in num:
    result.append(i*2)
print(result)

#2.
result=[i * 2 for i in num]
print(result)

위 코드에서 #1.과 #2.는 같은 코드인데 #2와 같이 한 줄로 코드를 작성할 수 있습니다.

2개 이상의 for문을 리스트 내포를 사용하여 만들 수 있지만 너무 복잡하여 넘어가도록 하겠습니다.

궁금하신 분은 댓글에 남겨주시면 알려드리겠습니다~!

728x90

'Python' 카테고리의 다른 글

# 파이썬 - 8 (기초5) IF문  (0) 2021.05.19
# 파이썬 - 7 (기초4)  (0) 2021.05.15
# 파이썬 - 6 (기초3)  (0) 2021.05.11
#파이썬 - 5 (기초2)  (3) 2020.07.05
#파이썬 - 4 (기초)  (0) 2020.07.04
728x90

제어문

앞에서 공부한 자료형이 "문자"라면 제어문은 문자를 이용해서 "문장"을 만든다고 생각하시면 될 것 같습니다!

 

IF문

IF문의 구조

if 조건문:
    코드...
else:
    코드...

예를 들어 "배고프면 밥을 먹고 배고프지 않으면 밥을 먹지 않는다."라는 문장이 있을 때 배고프다, 배고프지 않다 라는 조건을 판단하여 결과를 처리해야 하는 경우가 IF문입니다.

 

status="배고프다"
if status=="배고프다":
    print("밥을 먹는다.")
else:
    print("밥을 먹지 않는다.")

# 간단한 코드 설명

# 1. status의 값은 "배고프다"이고

# 2. if status=="배고프다":     => 코드의 의미는 status가 "배고프다"이면

# 3. print("밥을 먹는다.")        => "밥을 먹는다."를 출력한다.

# 4. else:                            => 그렇지 않으면 (배고프다가 아니라면)

# 5. print("밥을 먹지 않는다.") => "밥을 먹지 않는다."를 출력한다.

# 결과: status가 "배고프다" 이므로 "밥을 먹는다."가 출력됩니다.

※주의사항

IF문에 속한 모든 문장에는 아래 #1.와 같이 들여 쓰기를 사용해야 합니다.

만약 #2와 같이 들여 쓰기를 제대로 사용하지 않는 경우 에러가 발생합니다.

JAVA, C 등의 언어를 사용하셨던 분들은 처음에 익숙하지 않을 것 같아요.

(저도 JAVA를 하다가 python을 사용할 때 자주 까먹었던 부분입니다!)

+ 조건문 뒤에 콜론(:)을 붙이는 것도 잊지 마세요! 

#1.
if 조건문:
    코드...
    코드...
#2.
if 조건문:
    코드...
  코드...
    코드...

 

그렇다면 IF 조건문에서 조건문이란?

쉽게 생각해서 참, 거짓을 판단하는 문장을 의미합니다.

example=True
if example:
    print("참!")

example은 True이기 때문에 조건문이 참이 되어 "참!"을 출력하게 됩니다.

 

"3시간 이상 공부했으면 휴식하고, 그렇지 않다면 공부하라"를 출력해보겠습니다.

hour=2
if hour>=3:
    print("휴식하라")
else:
    print("공부하라")

# 간단한 코드 설명

# 1. hour은 2이고

# 2. hour(2)>=3   => 2가 3보다 크거나 같나? False

# 3. 조건문에 만족하지 않기 때문에 "공부하라"를 출력하게 됩니다.

 

and, or, not

x or y   : x 또는 y 중 하나만 True이면 True

x and y : x 와 y 모두 True이면 True

not x    : x가 False이면 True, x가 True이면 False (부정, 반대)

 

or의 예제

"공부를 3시간 이상 했거나, 점수가 100점이라면 휴식하고, 그렇지 않다면 공부하라."를 출력해보겠습니다.

 

hour=2
point=100
if hour>=3 or point==100:
    print("휴식하라")
else:
    print("공부하라")

# 간단한 코드 설명

# 1. hour은 2이고

# 2. point는 100이다.

# 3. hour는 3보다 작아서 False 이지만 point==100 은 True이기 때문에

# 4. "휴식하라"를 출력하게 됩니다.

 

in, not in 예제

나중에 코딩 테스트를 공부하실 때 유용하게 사용되는 부분이니 꼭 알아두시는 것을 추천하겠습니다!

in not in
x in 리스트 x not in 리스트
x in 튜플 x not in 튜플
x in 문자열 x not in 문자열
print(1 in [1,2,3])
print(1 not in [1,2,3])
print('a' in [1,2,3])
print('a' not in 'python')

# 간단한 코드 설명

# 1. 1이 [1,2,3] 리스트 안에 존재하기 때문에 True

# 2. 1이 [1,2,3] 리스트 안에 존재하기 때문에 True이지만 부정이기 때문에 False

# 3. 'a'가 [1,2,3] 리스트 안에 존재하지 않기 때문에 False

# 4. 'a'가 'python' 안에 존재하지 않기 때문에 False이지만 부정이기 때문에 True

 

Quiz) 출력 결과를 예측해보세요!

basket=['apple','banana','orange']
if 'grape' in basket:
    print("있어요!")
else:
    print("없어요!")

정답: 없어요!

 

elif

"공부를 3시간 이상 했으면 휴식하고, 점수가 100점이라면 게임을 하고, 그렇지 않다면 공부하라."를 출력해보겠습니다.

hour=2
point=100

if hour>=3:
    print("휴식하라")
else:
    if point==100:
        print("게임하라")
    else:
        print("공부하라")

if, else만으로는 코드가 복잡하고 지저분해지는데 elif를 사용한다면 이 문제를 해결할 수 있습니다.

hour=2
point=100

if hour>=3:
    print("휴식하라")
elif point==100:
    print("게임하라")
else:
    print("공부하라")

위 코드는 첫 번째 코드와 동일한 코드입니다!

 

# if, elif, else 구조

 

if 조건문:
    코드...
elif 조건문:
    코드...
elif 조건문:
    코드...
...
...
else:
    코드 ...

조건부 표현식

if point >= 80:
    print("잘했어요!")
else:
    print("힘내세요!")

위 코드를 조건부 표현식을 사용하면 아래와 같이 간단하게 표현할 수 있습니다.

print("잘했어요!") if point>=80 else print("힘내세요!")
# 구조
조건이 참일 때의 결과 if 조건문 else 조건문이 거짓일 경우의 결과

조건부 표현식은 가독성이 좋고 코드를 짧게 만들기 때문에 유용하게 사용할 수 있습니다.

728x90

'Python' 카테고리의 다른 글

# 파이썬 - 9 (기초6) for문  (0) 2021.05.22
# 파이썬 - 7 (기초4)  (0) 2021.05.15
# 파이썬 - 6 (기초3)  (0) 2021.05.11
#파이썬 - 5 (기초2)  (3) 2020.07.05
#파이썬 - 4 (기초)  (0) 2020.07.04
728x90

1. 사용자 발화

나의 봇 - 카카오 i 오픈 빌더 (kakao.com)

 

카카오 i 오픈빌더

Make your kakao I. 손쉽게 카카오 AI기술을 활용하도록 누구에게나 제공하는 kakao I 개발 플랫폼을 만나보세요.

i.kakao.com

위 이미지를 클릭하여 다시 챗봇을 만들러 가겠습니다.

챗봇 이동

카카오톡 챗봇 만들기 2편에서 만들었던 챗봇으로 이동합니다!

아직 안 만드신 분들을 아래 이미지를 클릭하여 생성해주세요!

[python] 카카오톡 챗봇 만들기 2 - Flask :: 초보 개발자 (tistory.com)

 

[python] 카카오톡 챗봇 만들기2 - Flask

드디어 승인 메시지가 도착했습니다! 승인 메시지를 확인하러 아래 이미지를 클릭해주세요. 받은 메일함 | 카카오 메일 (kakao.com) 카카오메일 새로운 시작, 카카오메일 mail.kakao.com 아래 이미지를

novice-engineers.tistory.com

0123456789101112
챗봇 테스트

위 슬라이드 쇼를 참고해주세요. (이미지가 크다 보니 클릭으로 확대하면서 참고해주세요!)

1. 사용자 발화 아래 박스에 말티즈 입력
2. 1과 같이 시츄도 추가 + 시츄 오른쪽에 화살표 더블 클릭 + 엔티티 박스가 뜨는 것 확인
3.  전체 엔티티 클릭 + 목록 확인 + 새 엔티티로 추가하기 버튼 클릭
4. 엔티티 이름을 Animal_type입력
5. 아래 박스에 강아지 입력 후 엔터
6. 아래 강아지가 생성되면 + 오른쪽 박스에 시츄 입력 후 엔터
7. 동일한 방법으로 생성해주시고 + 저장 버튼 클릭 후 닫기
8. F5를 누르시면 + 작성했던 말티즈와 시츄가 없어지는 것 확인
9. 다시 말티즈와 시츄를 입력해주시고 + 파란색 밑줄이 그어지는지 확인
10. 시츄의 이름만 드래그하고 + 추천 엔티티 박스가 뜨면 + @Animal_type을 클릭
11. 블록 이름을 지정 후 + 저장 버튼 클릭 + 봇테스트 버튼 클릭
12. 봇테스트 채팅창의 새로고침 버튼 클릭 + 시츄 입력 후 엔터
13. 결과 확인

 

2. 코드 작성 & 서버 작동

from flask import Flask, request, jsonify

application = Flask(__name__)

@application.route("/")
def hello():
    return "Hello goorm!"

@application.route("/animal",methods=['POST'])
def animal():
    req = request.get_json()
    
    animal_type = req["action"]["detailParams"]["Animal_type"]["value"]	# json파일 읽기

    answer = animal_type
    
    # 답변 텍스트 설정
    res = {
        "version": "2.0",
        "template": {
            "outputs": [
                {
                    "simpleText": {
                        "text": answer
                    }
                }
            ]
        }
    }

    # 답변 전송
    return jsonify(res)

if __name__ == "__main__":
    application.run(host='0.0.0.0', port=5000, threaded=True)

 

위 코드를 전부 다 2편에서 만들었던 구름 IDE 컨테이너 application.py에 붙여 넣기 해주세요!

https://ide.goorm.io/my/dashboard

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

 

# 주의!

animal_type = req["action"]["detailParams"]["Animal_type"]["value"] 부분에서 Animal_type은 저희가 만들었던 이름 그대로 넣어주셔야 합니다!

URL

2편에서 만들었던 URL을 그대로 복사해주세요!

그리고 위 코드에서 @application.route("/animal",methods=['POST'])이 부분에서 저희가 route 즉, 접속할 url을 /animal로 했다는 의미이기 때문에 위에서 복사한 URL/animal 을 복사해주세요

※ 이해가 안가시는 분들을 위해서! 

https://chatbot2-xnpzr.run.goorm.io/animal   : 제 url은 이러한 형태가 됩니다. 만드신 URL을 복사해주세요

 

3. 챗봇 완성하기

01234
챗봇 설정

위 슬라이드 쇼를 참고해주세요. (이미지가 크다 보니 클릭으로 확대하면서 참고해주세요!)

1. 상단 메뉴바에서 스킬 버튼 클릭 + 이동 후 생성 버튼 클릭
2. 스킬 이름 작성 + URL 붙여 넣기 + 저장 버튼 클릭
3. 상단 메뉴바에서 시나리오 버튼을 클릭하여 다시 시나리오 페이지로 이동
+ 스킬 선택 박스에서 2번에서 생성한 이름 클릭
4. 아래로 내려서 봇 응답의 스킬데이터 클릭 + 저장 버튼 클릭 + 봇테스트 클릭
5. 봇테스트 박스에서 새로고침 버튼 클릭 + 테스트하기 + 결과 확인

4. 카카오톡에 배포하기

0123
배포하기

위 슬라이드 쇼를 참고해주세요. 

1. 상단 메뉴바에서 설정 클릭 + 운영 채널 연결에서 계정 클릭 + 저장 클릭
=> 저는 이미 채널을 운영 중인 계정이 있어서 방법만 올려드리겠습니다!
2. 결과 확인 
3. 상단 메뉴바에서 배포 클릭 + 배포 버튼 클릭
4. 결과 확인

 

5. 핸드폰에서 배포 확인하기

결과

 

728x90
728x90

드디어 승인 메시지가 도착했습니다! 

승인 메시지를 확인하러 아래 이미지를 클릭해주세요.

받은 메일함 | 카카오 메일 (kakao.com)

 

카카오메일

새로운 시작, 카카오메일

mail.kakao.com

승인 메시지

 

아래 이미지를 클릭하여 챗봇을 만들러 가보겠습니다.

나의 봇 - 카카오 i 오픈 빌더 (kakao.com)

 

카카오 i 오픈빌더

Make your kakao I. 손쉽게 카카오 AI기술을 활용하도록 누구에게나 제공하는 kakao I 개발 플랫폼을 만나보세요.

i.kakao.com

 

1. 챗봇 생성

012
챗봇 생성 순서

 

위 슬라이드 쇼를 참고해주세요.

1. 노란색 +버튼 클릭

2. 카카오톡 챗봇 박스 클릭

3. 이름 작성 + 확인 버튼 클릭

 

2. 서버 구축

구름 IDE를 사용하여 3분 만에 정말 간단하게 서버를 구축해보겠습니다.

https://ide.goorm.io/my/dashboard

 

goorm

구름은 클라우드 기술을 이용하여 누구나 코딩을 배우고, 실력을 평가하고, 소프트웨어를 개발할 수 있는 클라우드 소프트웨어 생태계입니다.

www.goorm.io

0123456789
구름IDE 컨테이너 생성

위 슬라이드 쇼를 참고해주세요.

1. 회원가입 & 로그인

2. 컨테이너 생성
3. 이름 작성 + 설명 작성 + 스크롤 내리기
4. Flask 클릭 + 생성 클릭
5. 기다리다가 컨테이너 생성되면 컨테이너 실행 버튼 클릭
5. application.py 더블 클릭
6. 하단 터미널 부분에 pip install flask 입력 후 엔터
7. 결과 확인!
8. 하단 터미널 부분에 pip install --upgrade pip 입력 후 엔터
9. 결과 확인!

01234567
서버 설정

위 슬라이드 쇼를 참고해주세요.

1. 상단 메뉴바에 있는 프로젝트 클릭 + 실행 URL과 포트 클릭
2. URL복사 + Port 번호 클릭
3. 5000 입력 후 엔터를 누르면 변경 메시지가 뜨는데 기다리기
4. 변경이 완료되면 확인 버튼 클릭 + 적용 버튼 클릭 + 확인 버튼 클릭
5. 코드 넣기 (하단에 코드 복사 붙여 넣기 해주세요!)
6. python application.py 입력 후 서버 실행시키기
7. 결과가 나오면
8. 2번에서 복사한 URL로 이동하여 결과 확인

9. 정상적으로 작동됐으면 Ctrl + C로 종료 (실패한 경우 댓글로 남겨주세용~!)

from flask import Flask

application = Flask(__name__)


@application.route("/")
def hello():
    return "Hello goorm!"


if __name__ == "__main__":
    application.run(host='0.0.0.0', port=5000, threaded=True)

# 간단하게 URL을 붙여 넣었을 때 "Hello goorm!"이 출력되는 이유는 return값인 Hello goorm! 을 화면에 출력해 준다고 생각해주세요!

 

위 결과가 나오면 간단하게 서버 설정은 완료되었습니다.

구름 IDE로 간단하게 서버 설정하는게 가장 좋은 방법인 것 같아요!

 

위 파이썬 코드를 돌릴 때 오류가 발생하시는 분은 아래 URL을 참고해 주세요!

https://novice-engineers.tistory.com/31

 

[python] 10분만에 카카오톡 챗봇 만들기 [오류 해결] - Flask

구름 IDE에서 IndexError 가 발생하는 경우! * 오류내용 Traceback (most recent call last): File "application.py", line 12, in application.run(host='0.0.0.0', port=int(sys.argv[1])) IndexError: li..

novice-engineers.tistory.com

728x90
728x90

집합 자료형

st1=set([1,2,3])
print(st1)
st2=set("set,study")
print(st2)

집합 자료형은 set을 이용하여 생성할 수 있습니다.

※특징

① 순서가 정해져 있지 않다.

② 중복되지 않는다.

위 st2의 결과를 확인해보면 s와 t가 1개씩만 출력되는 것을 확인하실 수 있습니다!

다양한 집합 구하기

# 합집합
print(st1.union(st2))

# 차집합
print(st1.difference(st2))
print(st2.difference(st1))

# 교집합
st1=set([1,2,3,4,5])
st2=set([3,4,5,6,7])
print(st1.intersection(st2))

결과를 직접 확인해보세요!

집합 자료형 관련 함수

# 값 추가 1개
st1=set([1])
st1.add(2)
print(st1)

# 값 추가 여러개
st1=set([1])
st1.update([2,3])
print(st1)

# 특정 값 제거하기
st1=set([1,2,3])
st1.remove(3)
print(st1)

# add: 값 1개만 추가

# update: 값 여러 개 추가

# remove: 값 삭제

불 자료형

불(boolean)은 True, False를 나타내는 자료형입니다.

a=True
b=False
print(a)
print(b)

불 자료형은 조건문에 많이 사용됩니다. 

# 간단한 조건문
print(1==1)
print(2>1)
print(2<1)

# 1==1: 1과 1은 같나요?  => True

# 2>1: 2가 1보다 큰가요? => True

# 2<1: 2가 1보다 작나요? => False

자료형의 True, False

print(bool("a"))
print(bool(""))
print(bool([1,2]))
print(bool([]))
print(bool(1))
print(bool(0))

정말 간단하게 값이 있다면 True, 비어 있다면 False라고 생각해주세요.

숫자형은 0일 때 False 나머지는 True입니다.

 

복습하기 (드래그로 정답을 확인하세요!)

# 1. 홍길동의 주민등록번호에서 연월일, 뒷자리 수를 나누어 출력

hong="981120-1234567"

# 슬라이싱 사용 yymmdd=hong[:6]

# 슬라이싱 사용 num=[7:]

 

# 2. "2021:05:15" 문자열을 replace 함수를 사용하여 "2021-05-15"로 변환하기

study="2021:05:15"

# study=study.replace(":","-")

 

# 3. 리스트를 이용하여 I Love You 문자열 출력하기

love_list=["I","Love","You"]

# love=" ".join(love_list)

 

# 4. 딕셔너리에서 Key의 Value 출력하기

love_dict={1:"I",2:"Love",3:"You"}
for i in love_dict.keys():
    print(love_dict[i])

출력 결과:

I

Love

You

위와 같은 출력 결과를 만들어보세요!

728x90

'Python' 카테고리의 다른 글

# 파이썬 - 9 (기초6) for문  (0) 2021.05.22
# 파이썬 - 8 (기초5) IF문  (0) 2021.05.19
# 파이썬 - 6 (기초3)  (0) 2021.05.11
#파이썬 - 5 (기초2)  (3) 2020.07.05
#파이썬 - 4 (기초)  (0) 2020.07.04
728x90

기본적인 튜플의 모습

tp=()
tp2=(1)
print(type(tp2))
tp2=(1,)
print(type(tp2))
tp3=(1,2,3)
tp4=(1,2,3,'a',('bc','de'))
tp5=1,2,3
print(type(tp5))

리스트와 비슷한 형태이지만 [] 대괄호로 둘러싸지만 듀플은 () 소괄호로 둘러싸입니다.

리스트는 값을 생성, 삭제, 수정이 가능하지만 튜플은 값을 바꿀 수 없다는 것이 가장 큰 차이점입니다!

또한 위 코드에서 tp2에서 (1) 일 때와 (1,) 일 때의 차이점을 확인해보세요!

(1) 일 때는 int형이고, (1,) 일 때는 tuple인 것을 확인하실 수 있습니다.

즉 튜플은 단 1개의 요소를 가질 때는 요소 뒤에 반드시 콤마(,)를 붙여야 합니다.

tp5 같이 () 소괄호를 생략해도 tp5가 튜플인 것을 확인해보세요!

 

위에서 튜플은 값을 바꿀 수 없다고 했는데 한번 실습을 해서 결과를 확인해보겠습니다!

tp1=(1,2,3)
tp1[0]='a'
#Traceback (most recent call last):
#  File "retry.py", line 2, in <module>
#    tp1[0]='a'
#TypeError: 'tuple' object does not support item assignment

1,2,3으로 구성된 tp1 튜플 객체를 생성하고 tp1의 0번째 요소를 'a'로 바꾸려는 코드입니다.

직접 실행을 해보시면 주석 처리한 에러가 발생할 것입니다!

 

튜플 사용

튜플과 리스트의 차이점은 값을 바꿀 수 없다는 것 빼고는 사용법이 동일하여 간단하게만 사용해보겠습니다.

tp1=('a','b',1,2,3)
print(tp1[0])
print(tp1[0:3])
tp2=('가','나')
print(tp1+tp2)
print(tp1*2)
print(len(tp1))

# tp1[0] : tp1객체(튜플)의 0번째 요소

# tp1[0:3] : tp1객체(튜플)의 0번째부터 2번째 요소까지

# tp1+tp2 : tp1객체(튜플)와 tp2객체(튜플) 요소 합치기

# tp1*2 : tp1객체(튜플)의 요소를 2번 반복 => *2는 곱하기 2와 동일한 의미입니다.

# len(tp1) : tp1객체(튜플)의 길이

Quiz) tp3객체에 tp1객체(튜플)와 tp2객체(튜플)를 합친 후  1,2,3,'가'   를 출력해보세요!

정답: 

tp3=tp1+tp2

print(tp3[2:6])

 

딕셔너리

딕셔너리의 가장 큰 특징은 Key, Value로 구성되어 있다는 것입니다.

ex) 1(Key): 홍길동(Value)   |   2(Key):이순신(Value)   |   3(Key):유관순(Value)

dic1={1:'홍길동',2:'이순신',3:'유관순'}
dic2={'과일':['사과','배','귤'],'동물':['강아지','고양이']}
print(dic1[2])
print(dic2['과일'])

 

# print(dic1[2]) : dic1객체(딕셔너리)에서 Key가 2인 Value를 출력 = 이순신

# print(dic2['과일']) : dic2객체(딕셔너리)에서 Key가 '과일'인 Value를 출력 = ['사과', '배', '귤']

 

딕셔너리 쌍 추가, 삭제

# 추가
dic1={1:'one'}
dic1[2]='two'
print(dic1)
dic1[3]=['three','four']
print(dic1)
# 삭제
del dic1[2]
print(dic1)

딕셔너리 쌍 삭제 방법 : del 객체[요소] 

 

★주의!

딕셔너리의 Key는 변하는 값을 사용할 수 없습니다.

따라서 딕셔너리의 Key에는 리스트를 사용할 수 없습니다. 밑에서 공부하겠지만 딕셔너리도 변하기 때문에 딕셔너리도 Key로 사용할 수 없습니다.

+ 튜플은 변하지 않기 때문에 Key로 사용이 가능합니다.

dic1={[1]:'one'}
#Traceback (most recent call last):
#  File "retry.py", line 11, in <module>
#    dic1={[1]:'one'}
#TypeError: unhashable type: 'list'

dic1={{1:'one'}:'일'}
#Traceback (most recent call last):
#  File "retry.py", line 11, in <module>
#    dic1={{1:'one'}:'일'}
#TypeError: unhashable type: 'dict'

dic1={(1,):'one'}
print(dic1[(1,)])

위 코드를 직접 실행해보세요!

★주의 2!

# Ex1
dic1={1:'one',1:'two'}
print(dic1)

# Ex2
dic1={1:'one',2:'two',3:'four'}
dic1[1]='하나'
print(dic1)

dic1={1:'one',1:'two'} : 초기에 동일한 Key 2개를 생성하면 하나는 무시됩니다.

Ex2에서 1:'one'이 존재하는 상태이고 dic1[1]='하나' 를 입력하면 Key 1의 Value는 '하나'로 변하게 됩니다.

딕셔너리 함수

Key 값 가져오기

dic1={1:'one',2:'two',3:'four'}
print(dic1.keys())

for key in dic1.keys():
    print(key)

Value 값 가져오기

dic1={1:'one',2:'two',3:'four'}
print(dic1.values())

for value in dic1.values():
    print(value)

Key, Value 쌍 가져오기

dic1={1:'one',2:'two',3:'four'}
print(dic1.items())

for key,value in dic1.items():
    print(key," : ",value)

딕셔너리 모든 요소 삭제

dic1={1:'one',2:'two',3:'four'}
dic1.clear()
print(dic1)

Key로 Value값 얻기

dic1={1:'one',2:'two',3:'four'}
print(dic1.get(2))
print(dic1.get('five'))

print(dic1[2])를 했을 때와 print(dic1.get(2))를 했을 때의 결과는 동일합니다.

하지만 print(dic1['five'])는 에러가 발생하지만 print(dic1.get('five'))는 None을 출력하게 됩니다!

차이점: get은 없는 Key값을 찾을 때 None을 return 합니다.

+ 딕셔너리에 Key가 존재하는지 확인

dic1={1:'one',2:'two',3:'four'}
print(1 in dic1)
print(5 in dic1)
728x90

'Python' 카테고리의 다른 글

# 파이썬 - 8 (기초5) IF문  (0) 2021.05.19
# 파이썬 - 7 (기초4)  (0) 2021.05.15
#파이썬 - 5 (기초2)  (3) 2020.07.05
#파이썬 - 4 (기초)  (0) 2020.07.04
#파이썬 - 3 (Visual Studio Code 설정)  (2) 2020.07.02

+ Recent posts