<jupyter_start><jupyter_text>python 문법 기초 처음 코딩을 시작할때는 기본적으로 Hello World!를 출력해 보는것부터 시작합니다.<jupyter_code>print("Hello World!")<jupyter_output>Hello World!<jupyter_text>1. 기본개념프로그램을 작성하기 위해서 기본적으로 꼭 이해해야 하는 개념중에 하나는 **변수와 연산자**에 대한 개념입니다. 1.1 변수  컴퓨터에는 메모리가 있고 우리는 연산을 위한 데이터를 그 메모리에 저장합니다.  하지만 그 메모리 주소는 우리가 이해하기 어려운 형태의 숫자로 저장되어 있기 때문에 메모리주소를 요청하여 데이터를 가져오기가 쉽지 않습니다.  따라서 우리가 접근할 데이터가 있는 메모리에 별명을 지어줘서 쉽게 메모리에 접근할수 있도록 해주는데 이걸 **변수명** 이라고 합니다.  변수를 선언해봅시다. 먼저 value 라는 변수에 숫자 5를 저장해보겠습니다.<jupyter_code>value = 5<jupyter_output><empty_output><jupyter_text>1.2 연산자연산자는 다양한 연산을 위해 약속된 기호 입니다.  **꼭 인터넷에 파이썬 연산자를 검색해보세요!**<jupyter_code>val1=1
val2=2

result = val1 + val2
print(result)<jupyter_output>3<jupyter_text>2. 다양한 데이터 타입여기서부터는 python에서 표현가능한 데이터 type을 알아 볼 예정입니다.   2.1. 정수정수는 소수점아래 숫자가 없는 일반적인 숫자  ex) value = 5 2.2. 실수실수는 소수점아래 숫자가 있는 숫자ex) value = 1.3 2.3. 문자문자는 문자 한개를 의미합니다.  문자열을 선언할때는 ' ' <- 사이에 넣습니다. ex) char_value = 'a' 2.4. 문자열문자는 문자의 배열입니다.ex) string_value = "Hello world!" 2.5. 배열형 변수배열형 변수에는 다양한 종류가 있습니다.  2.5.1 list수정가능한 다양한 기능이 있는 배열형 변수 입니다.  [ ] <- 사이에 넣습니다.   다양한 타입의 변수가 함께 들어갈수 있습니다. ex) list_value = [1,2,3,4] 2.5.2 tuple**선언이후에는 수정이 불가능한** 배열형 변수입니다. ( ) <- 사이에 넣습니다. 다양한 타입의 변수가 함께 들어갈수 있습니다. ex) tuple_value = (3,45,5,32) 2.5.3 dictionarykey-value 쌍으로 이루어져 있는 변수형태입니다.{} <- 사이에 아래와 같은 방식으로 선언합니다. ex) dict_value = {'name' : 'ksg', 'age' : 29, 'email' : "<EMAIL>"}<jupyter_code>int_val = 5
float_val =1.3
char_val = 'a'
str_val = 'Hello World!'

list_val = [1,2,3,5,'hello','new type']
tuple_val = (1,45,3,23,"New type")

dict_val = {'name':'ksg', 'age':29, 'email' : '<EMAIL>'}<jupyter_output><empty_output><jupyter_text>직접한번 선언해볼까요?list, tuple, dictionary만 선언해봅시다.  (필수!) python을 혼자공부할때 아주 중요한 명령어 dir도대체 지금 뭐해야될지 지금 가지고 있는 변수가 무슨 일을 할수 있는 놈인지 전혀 모르겠을때 사용할수 있는 명령어가 있습니다.  dir입니다. 같이 한번 사용해볼까요?<jupyter_code>dir(list_val)
dir(tuple_val)
dir(dict_val)<jupyter_output><empty_output><jupyter_text>이제 dir을 통해 알아낸 각 배열형 변수에서 사용가능한 기능들을 사용해보기그리고 list, tuple, dictionary의 차이점이 뭐라고 생각하세요?  직접사용해보면서 같이 한번 생각해볼까요?  3. 조건문과 반복문조건문을 통해 특정상황에 원하는 동작을 수행하도록 만들수 있으며반복문을 통해서 원하는 만큼 동작을 반복적으로 수행하도록 만들수 있습니다.  3.1 조건문(if, elif, else)특정상황에 적합한 동작을 수행하도록 하기 위해선 조건문이 필수적 입니다. 조건문 사용 예시는 아래와 같습니다.  ---```pythonif(a<5):      a=a+1  elif(a==5):      print("a is 5")      a=0  else:      print("a is bigger than 5")      a=0  ```---  3.2 반복문(for, while)특정 조건에 맞춰서 동작을 반복적으로 수행하도록 하는 기능입니다. **for** 문과 **while**문을 이용하면 원하는 반복동작은 거의다 수행할 수 있습니다. for문은 특정 조건만큼 반복하는 상황을 만들때 자주 사용하며while은 특정 동작이 나타날때까지 반복할때 자주 사용합니다. ![img](./for_while.png) 3.2.1 for문python에서 for문은 기존의 C/C++과 같은 컴파일 언어보다 사용하기가 훨씬 간결합니다.  크게 4가지 정도 사용방법이 있는데 아래 방식을 따라서 여러번 쳐보시면 원하시는 상황에 맞춰서 금방 사용하실 수 있을겁니다. ---* 원하는 횟수만큼 반복 range() <- 괄호안에 반복하고 싶은 횟수를 넣습니다.  range는 range(시작,끝,간격)를 채워서 완성합니다.  range(0,5,1) 왼쪽과 같이 작성한다면  0부터 시작하여 5보다 작은 범위의 숫자를 1간격으로 본다.  를 의미합니다.  사실 어렵지 않습니다. 그냥 써보는게 사실 가장 좋습니다.   range(1,10,2)는   1부터 10보다 작은 범위의 숫자를 2간격으로 본다는 것을 의미합니다.  그런데 range(5) 이렇게 적으면 어떻게 될까요?  ()안에 숫자가 하나만 있다면  **0부터 시작하고 1간격으로 ()안의 숫자까지의 범위를 의미한다** 가 됩니다.  직접써보면 바로 이해가되니 지금부터 같이 사용해보시죠 ```pythonfor i in range(5):    print(i)```---* 배열안에 있는 원소를 처음부터 끝까지 하나씩 사용하는 방법```pythonlist_val = ['a','b','c']for i in list_val:    print(i)```---* 배열의 길이만큼 동작을 반복하는 방법```pythonlist_val2 = ['a','c','w']for i in range(len(list_val2)):    print(i)```---* 배열의 위치(index)와 값을 동시에 사용하는 방법```pythonlist_val3=[9,8,7,6,5,4,3]for i, value in enumerate(list_val3):    print(i,value)``` 위에 작성된 내용을 직접 사용해보고 어떤 원리로 동작하는 것인지 이해해 볼까요?  3.3 반복문의 중첩실제 코딩을 진행하다보면 단일 반복문을 사용하는 경우보다 이중 for문을 사용하는 경우가 많습니다. 따라서 이중, 혹은 삼중과 같은 중첩된 반복문을 사용하는 것에 익숙해 지는것이 매우 좋은데요 실제 한번 수행해보면서 반복문을 어떻게 작성하는게 좋은지 그리고 익숙해 지기 위한 방법을 이해 해보도록 합시다. ```pythonfor i in range(5):    for j in range(i):        print(i,j, end=' ')    print("")```<jupyter_code>for i in range(5):
    print(i,end=' : ')
    for j in range(i):
        print(j, end=' ')
    print("")<jupyter_output>0 : 
1 : 0 
2 : 0 1 
3 : 0 1 2 
4 : 0 1 2 3<jupyter_text>연습문제  Q.1 아래와 같은 모양을 이중 for문을 이용하여 출력하라```***************```  Q.2아래와 같은 모양을 이중 for문을 이용하여 출력하라```***************```  3.4 while문 while은 특정상황이 만족할때까지 사용하는 반복문입니다.아래와 같이 사용합니다. ```pythonwhile(i<5):    i=i+1    print(i)    ``` 3.4.1 break와 continuewhile문을 수행하는 중간에 while문을 중단하고 싶을때는 break를 사용하고 수행하는 중간에 처음으로 돌아가서 다시 수행하도록 만들고 싶을때는 continue를 사용합니다. 아래 코드를 보고 실행해보면서 이해해 봅시다.```pythoni=0while(1):    if(i==500):        print(i is 500)        break    i=i+1    if(i%100!=0):        continue    print(i)```  etc e.1 input()변수에 값을 입력받는 방법 입니다.```pythona = input()``````pythona = input("입력 값 : ")```  e.2 open()file을 열고 값을 읽거오거나 저장하는 방법 입니다.|파일열기모드|설명||:--:|:-||r|읽기모드 - **파일 읽기**만 가능||w|쓰기모드 - **파일 쓰기**만 가능||a|추가모드 - **파일의 마지막에 새로운 내용 추가**| file 쓰기```pythonPATH = "./open_function_test.txt"f= open(PATH,'w')  쓰기모드로 파일 openf.write("Hello world!")f.close()```<jupyter_code>PATH = "./open_function_test.txt"
f= open(PATH,'w') # 쓰기모드로 파일 open
f.write("Hello world!")
f.close()<jupyter_output><empty_output><jupyter_text>file 읽기```pythonPATH = "./open_function_test.txt"f= open(PATH,'r')  읽기모드로 파일 opendata=f.read()  read()는 파일 전체를 읽어서 data에 저장한다.print(data)f.close()```<jupyter_code>PATH = "./open_function_test.txt"
f= open(PATH,'r') # 읽기모드로 파일 open
data=f.read()
print(data)
f.close()<jupyter_output>Hello world!<jupyter_text>file에 데이터 추가```pythonPATH = "./open_function_test.txt"f= open(PATH,'a')  데이터추가 모드로 파일 openf.write("new hello")f.close()```<jupyter_code>PATH = "./open_function_test.txt"
f= open(PATH,'a') # 데이터추가 모드로 파일 open
f.write("new hello")
f.close()
PATH = "./open_function_test.txt"
f= open(PATH,'r') # 읽기모드로 파일 open
data=f.read()
print(data)
f.close()<jupyter_output>Hello world!new hello<jupyter_text>readline()readline()은 한줄씩 데이터를 읽어온다.```pythonf= open("./open_funciton_test.txt", 'w')for i in range(3):    f.write("%d번째 줄입니다\n."%i)f.close()``` 아래와 같이 한줄씩 읽어온다.   ```pythonf = open("./open_function_test.txt","r")while(1):    data = f.readline()    if not data: break    print(data)f.close()```<jupyter_code>f= open("./open_function_test.txt", 'w')
for i in range(3):
    f.write("%d번째 줄입니다\n"%i)
f.close()
f = open("./open_function_test.txt","r")
while(1):
    data = f.readline()
    if not data: break
    print(data)
f.close()<jupyter_output>0번째 줄입니다

1번째 줄입니다

2번째 줄입니다<jupyter_text>with를 사용한 open 함수사용 간편화위 코드를 보면 open한뒤에 close를 꼭해주고 있다.  필요한 일이 끝나면 자동으로 close 되면 편할것이다.  대부분의 외부 코드를 보다보면 with를 사용하고 있는 모습을 볼수 있다.  본인의 코드에서 open close를 정확하게 명시하겠다면 그것은 자유다하지만 외부 코드를 읽기 위해서는 with를 이해하는 것이 필요하다.**with는 open()을 해서 값을 읽고 자동으로 close()해주는 방법이다.**```pythonwith open("./with_open_function.txt",'w') as f:    f.write("Life is short, we have to do something!!\n")data = Nonewith open("./with_open_function.txt",'r') as f:    data = f.read()print(data)```<jupyter_code>with open("./with_open_function.txt",'w') as f:
    f.write("Life is short, we have to do something!!\n")

data = None
with open("./with_open_function.txt",'r') as f:
    data = f.read()

print(data)<jupyter_output>Life is short, we have to do something!!
{'fraction_non_alphanumeric': 0.15578465063001146, 'fraction_numerical': 0.02276632302405498, 'mean_word_length': 4.046965317919075, 'pattern_counts': {'":': 0, '<': 47, '<?xml version=': 0, '>': 40, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '11', 'dir': 'jupyter-structured-clean-dedup', 'id': '555455', 'license': 'MIT', 'n_tokens_mistral': 4639, 'n_tokens_neox': 5728, 'n_words': 895, 'path': '.ipynb_checkpoints/py_tutorial(1)-checkpoint.ipynb', 'repo_name': 'dldldlfma/py_tutorial', 'size': '7000'}