2019년 11월 5일 화요일

Python_9

1

cnt = int(input("몇 번 반복하시겠습니까? => "))
for i in range(cnt):
    int_list = []
    i = int(input("1: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("2: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("3: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("4: 정수를 입력하시오 => "))
    int_list.append(i)
    i = int(input("5: 정수를 입력하시오 =>"))
    int_list.append(i)
    sum = int_list[0] + int_list[1] + int_list[2] + int_list[3] + int_list[4]
    print(int_list)
    print("리스트 숫자들의 합 = ", sum)

※ input 처음에는 무조건 문자열이 들어와야한다. 

2

cnt = int(input("몇 번 반복하시겠습니까? => "))
for i in range(cnt):
    int_list = []
    for j in [1,2,3,4,5]:
        k = int(input(str(j) + ": 정수를 입력하시오 => "))
        int_list.append(k)
    sum = int_list[0] + int_list[1] + int_list[2] + int_list[3] + int_list[4]
    print(int_list)
    print("리스트 숫자들의 합= ", sum)


3

cnt = int(input("몇 번 반복하시겠습니까? => "))
for i in range(cnt):
    int_list = []
    sum = 0
    for j in [1,2,3,4,5]:
        k = int(input(str(j) + ": 정수를 입력하시오 => "))
        int_list.append(k)
        sum = sum + k #sum = sum + int_list[j-1]
    print(int_list)
    print("리스트 숫자들의 합= ", sum)


6-1

for i in [1,2,3,4,5,6,7,8,9]:
    print("9*", i ,'=', 9*i)
dan = int(input("몇 단을 출력하시겠습니까?"))
for i in [1,2,3,4,5,6,7,8,9]:
    print(dan,'*',i,'=',dan*i)

6-2

for i in range(1, 6, 1):
    print(i, end = ' ')
print(
for i in range(1, 6, 2):
    print(i, end = ' ')
print()
for i in range(6,0,-2):
    print(i, end=' ')
print()

#결과 값
1 2 3 4 5 
1 3 5 
6 4 2 

6-3

import turtle
t = turtle.Turtle()

for count in range(6):
    t.circle(100)
    t.left(360/6)

#연습문제
import turtle
t = turtle.Turtle()
cnt = int(input("몇 개의 뭔을 출력하시겠습니까? "))
for count in range(cnt):
    t.circle(100)
    t.left(360/cnt)

6-4

import turtle
t=turtle.Turtle()
t.shape("turtle")

t.penup()
t.goto(-200,0)
t.pendown()

#정삼각형 그리기
for i in range(3):
    t.forward(100)
    t.left(360/3)

#이동하기
t.penup()
t.goto(200,0)
t.pendown()

#정사각형 만들기
for i in range(4):
    t.forward(100)
    t.left(360/4)

6-4-1

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

t.penup()
t.goto(random.randint(-300,300),0)
t.pendown()

#정삼각형 그리기
for i in range(3):
    t.forward(100)
    t.left(360/3)

#이동하기
t.penup()
t.goto(random.randint(-300,300),0)
t.pendown()

#정사각형 만들기
for i in range(4):
    t.forward(100)
    t.left(360/4)

6-4-2

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

t.penup()
t.goto(random.randint(-300,300),random.randint(-300,300))
t.pendown()

#정삼각형 그리기
for i in range(3):
    t.forward(100)
    t.left(360/3)

#이동하기
t.penup()
t.goto(random.randint(-300,300),random.randint(-300,300))
t.pendown()

#정사각형 만들기
for i in range(4):
    t.forward(100)
    t.left(360/4)

6-4-3

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

for j in range(5):
    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #정삼각형 그리기
    for i in range(3):
        t.forward(100)
        t.left(360/3)

    #이동하기
    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #정사각형 만들기
    for i in range(4):
        t.forward(100)
        t.left(360/4)

    #이동하기
    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #오사각형 만들기
    for i in range(5):
        t.forward(100)
        t.left(360/5)

    t.penup()
    t.goto(random.randint(-300,300),random.randint(-300,300))
    t.pendown()

    #육사각형 만들기
    for i in range(6):
        t.forward(100)
        t.left(360/6)


6-4-4

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")
for x in range(5):
    for y in [3,4,5,6]:
        #이동하기
        t.penup()
        t.goto(random.randint(-300,300),random.randint(-300,300))
        t.pendown()

        #정삼각형 그리기
        for i in range(y):
            t.forward(100)
            t.left(360/y)

※ While문은 반드시 조건 값이 들어간다, While true를 넣으면 무한루프가 가능하다.  
※ For문은 반드시 범위가 들어가야한다. 

6-4-5


import turtle
import random
t=turtle.Turtle()
t.shape("turtle")
x = 0
while x<5:
    x = x+1
    y = 2
    while y <= 6:
        y=y+1
        #이동하기
        t.penup()
        t.goto(random.randint(-300,300),random.randint(-300,300))
        t.pendown()

        #정삼각형 그리기
        i=0
        while i < y:
            i = i+1
            t.forward(100)
            t.left(360/y)

6-5

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

for i in range(30):
    length = random.randint(1,100)
    t.forward(length)
    angle = random.randint(-180,180)
    t.right(angle)


6-5-1

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")
i=0
while i <= 30:
    i=i+1
    length = random.randint(1,100)
    t.forward(length)
    angle = random.randint(-180,180)
    t.right(angle)
    

6-6

import turtle
t=turtle.Turtle()
t.shape("turtle")
i=0
while i<5:
    t.forward(200)
    t.right(144)
    i=i+1

6-6-1

import turtle
t=turtle.Turtle()
t.shape("turtle")

for i in range(5):
    t.forward(200)
    t.right(144)

6-6-2

import turtle
import random
t=turtle.Turtle()
t.shape("turtle")

cnt = int(input("몇 개의 별을 출력하시겠습니까 ? "))
for i in range(cnt):
     t.penup()
     t.goto(random.randint(-300,300),random.randint(-300,300))
     t.pendown()
     for x in range(5):
            t.forward(200)
            t.right(144)

Python_7

random의 가지수:

random.randrange : 숫자 하나만을 사용한다?
random.randint : 4부터 10까지

if의 가지수:

-if
-if~else
-if~elif~elif
-if~elif~elif~elif~elif~elif~elif~elif~elif....
-if~elif~elif~elif~elif~elif~elif~elif~elif....else

또한 if를 선언할 시 반드시 조건문을 넣어야한다.

2019년 10월 15일 화요일

Python_6

파이썬, 자바 스크립는 어떤 종류의 자료도 저장할 수 있다.

String = 문자들의 나열
Unicode - 10byte
Ascicode - 5byte

str -> 한 문자를 2byte로 나타낸다.

정수형과 문자열의 byte계산 방법이해가 안된다.

% -> 문자열에 변수의 값을 삽입하여 출력하고 싶을때 기호 사용 -> 따음표에서의 경우를 얘기한다.

%s -> 문자열로 받아들인다.
%d -> 정수형으로 받아들인다.
%f -> 실수형으로 받아들인다.

turtle
s = turtle.textinput("","이름을 입력하시오: ")

t.Turtle() -> 생성하겠다는 명령어


print(s[6:10]) -> 6부터 10되기 전까지만을 출력하라는 명령어

import time -> 1970년 1월 1일에서 지난 초

append - 리스트
근데 한번 상수로 넣는 경우는 왜 넣는건가?
list에 넣어 index로 저장하는가?
script하고 언어의 차이점은?

ctrl t -> 키보드 interuped로 오류를 만들어서 무한 반복문에서 빠져나온다.
: <- 요거를 사용했으면 4칸 앞으로 가야한다. -> 어떤 명령문에 종속을 시키기 위함.

2019년 10월 14일 월요일

Python_5


str를 사용해야 하는 이유 :
만약 'str'를 선언하지 않았을 경우 각각 한 개씩 선언을 한다.
그러나 'str'를 선언했을 경우 숫자로 인식하여 6byte에서 4byte로 된다?

각각 한 개씩 선언하기 위해서는 'char' 을 선언한다.

2019년 9월 24일 화요일

Python_4

아스키(ASSCII) 코드 : 7비트 / 2의 7승 = 128>개의 문자 약속 가능
/ 영어 대소문자, 아라비아 숫자, 특수 문자

유니(UNI) 코드 : 16비트 /2의 16승 => 65536개의 문자 약속 가능
/ 아스키 코드의 문자 모두 포함, 모든 나라의 언어와 관련된 문자

※ - 'A' => 65 / 'a' => 97 / '0' => 48
※ 영어 대소문자로 맞춰 사용하는 것이 제일 좋은 경향이 있다.

[Q] 학번을 아스키 코드와 유니코드로 표현하시오. (이진수)

B8178805
ASSCII: 01000010 / 00111000 (8) / 00110001(1) / 01101111(7) / 00111000(8) / 00111000(8) / 00110000(0) / 00110101(5)
UNI: 00000000 01000010 / 00000000 00111000 (8) / 00000000 00110001(1) / 00000000 0011 01111(7) / 00000000 00111000(8) / 00000000 00111000(8) / 00000000 00110000(0) / 00000000 00110101(5)

[Q] 본인 이름 이니셜(대문자)을 아스키(ASCII)코드 & 유니(UNI)코드로 표현하시오.
(구자윤 = KJY )
ASSCII : 01001011(K) 01001010(J) 01011001(Y)

[Q] 십진수 1004를 컴퓨터에서 표현하는 정수 이진수로 표현하면 다음과 같다.
0000 0011 1110 1100 (2)
[참고] 컴퓨터 내부에서 정수는 일반적으로 4바이트로 처리함

[Q] 본인 학번에서 B를 제외한 숫자를 십진수라고 가정하고 컴퓨터에서 표현하는 정수 이진수로 변환하시오
8178805
0000/0000 0111/1100 1100/1100 0111/0101

[참고] 컴퓨터에서 정수 표현
- 십진수 9일 경우
: (1바이트) 00001001
: (2바이트) 00000000 00001001
: (4바이트) 00000000 00000000 00000000 00001001
: (8바이트) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00001001

[참고]
양의 정수 9와 음의 정수 9를 2바이트로 표현하면
+9 = 00000000 00001001
-9 = 11111111 11110111 (전체를 다 바꾼 다음에 마지막 자리에 +1을 한다.)

:(1바이트) 11110111
:(2바이트) 11111111 11110111
:(3바이트)
:(4바이트)

* 00000000 00001001 (+9)
1. 10000000 00001001 (-9) -> 부호화 크기 표현 방법
2  11111111 11110110 (-9) -> 일의 보수 표현 방법
3. 11111111 11110111 (-9)  -> 이의 보수 표현 방법 (일의 보수 +1)

? 만약 마지막 자리가 0이면 더하기 1을 함으로써 앞의 모든 숫자들이 바뀌나요?

-> (1)과 (2)의 방법은 양의 정수와 음의 정수를 더했을 때 0(제로)가 나오지 않음
-> (3)의 방법은 0이 나옴(현재 컴퓨터 시스템에서 사용하고 있는 방법)
-> (1)은 +0, -0이 존재함 / (2) 또한 +0, -0이 존재함 그러나 (3)은 오로지 하나의 0만 존재한다.

[Q] 정수를 1바이트로 처리한다고 가정하였을 경우 다음 이진수를 십진수로 변환하시오.

가. 00101100 (2) -> 44
나. 11110110 (2) -> -10
다. 01110111 (2) -> 119
라. 11111111 (2) -> -1

음의 정수를 구할때는 양에서 음으로 바꿀 시 +1을 했으므로 -1을 진행한 상태에서 값을 구한다.

[참고] 정수(signed integer) 표현 시
- 1바이트 : -128~+127
- 2바이트 : -32768 ~ +32767
- 4바이트 : -2147483648~ +2147483647

만약 정수(unsigned integer)표현시
- 1바이트 : 0 ~ 255
- 2바이트 : 0 ~ 65535
- 4바이트 : 0 ~ ( 2147483648 +2147483647 )

[정리] 
본인 학번 (문자 : 아시키 코드 - 이진수 )
B8178805 - 01000010(B) 00111000(8) 00110001(1) 01101111(7) 00111000(8) 00111000(8) 00110000(0) 00110101(5)
본인 학번 (정수 - 이진수)
8178805 ( 16진수는 4자리로 끊어서 읽는고 8진수는 3자리 식 끊어서 읽는다.)
00/000/000/011/111/001/100/110/001/110/101
2진수 : 00000000 01111100 11001100 01110101
16진수 : 0 0 7 C C C 7 5
8진수 : 0 0 0 3 7 1 4 6 1 6 5

[Q] 색상표 창고 3바이트로 표현
- 빨간색을 16진수, 2진수, 8진수로 표현
16진수 - FF0000 - 이게 어떻게 255가 되나요?
2 진수 - 1111 1111 0000 0000 0000 0000
8 진수 -  1111/1111/0000/0000/0000/0000 - 77600000

- 초록색의 16진수, 2진수, 8진수로 표현
16진수 - 00FF00
2진수 - 0000 0000 1111 1111 1111 1111 0000 0000
8진수 - 00177400 (8)

[퀴즈] 503과 -503을 이진수, 16진수, 8진수로 표현하시오 ( 현재 컴퓨터 시스템 기준.)

503을 2진수
00000000 00000000 00000001 11110111 [2진수]
0 0 0 0 0 1 F 7 [16진수]
00/000/000/000/000/000/000/000/111/110/111 -> 737 [8진수]

-503
1111 1111 1111 1111 1111 1110 0000 1001 [2진수]
FFFFFE09 [16진수]
11/111/111/111/111/111/111/111/000/001/001 -> 37777777011 [8진수]

실수는 8바이트로 처리한다. -> 64비트

IEEE 754
IEEE 754의 부동 소수점 표현은 크게 세 부분으로 구성되는데, 최상위 비트는 부호를 표시하는 데 사용되며, 지수 부분(exponent)과 가수 부분(fraction/mantissa)이 있다.
General floating point ko.svg






예시
−118.625 (십진법)을 IEEE 754 (32비트 단정도)로 표현해 보자.
  • 음수이므로, 부호부는 1이 된다.
  • 그 다음, 절댓값을 이진법으로 나타내면 1110110.101(2)이 된다.
  • 소수점을 왼쪽으로 이동시켜, 왼쪽에는 1만 남게 만든다. 예를 들면 1110110.101(2)=1.110110101(2)×2⁶ 과 같다. 이것을 정규화된 부동소수점 수라고 한다.
  • 가수부는 소수점의 오른쪽 부분으로, 부족한 비트 수 부분만큼 0으로 채워 23비트로 만든다. 결과는 11011010100000000000000이 된다.
  • 지수는 6이므로, Bias를 더해야 한다. 32비트 IEEE 754 형식에서는 Bias는 127이므로 6+127 = 133이 된다. 이진법으로 변환하면 10000101(2)이 된다.

이 결과를 정리해서 표시하면 다음과 같다.[1]
Float point example frac.svg


2019년 9월 17일 화요일

Python_3

Unit 44. 모듈과 패키지 사용하기

지금까지 파이썬 코드를 작성하면서 inputprint 등의 내장 함수(built-in function)를 주로 사용했는데, 내장 함수만으로는 할 수 있는게 별로 없습니다. 그래서 좀 더 복잡한 프로그램을 만들려면 파이썬의 모듈과 패키지를 사용해야 합니다. 우리가 책 중간 중간에 사용했던 randomturtlepickle 등이 바로 모듈과 패키지입니다.
모듈(module)은 각종 변수, 함수, 클래스를 담고 있는 파일이고, 패키지(package)여러 모듈을 묶은 것입니다. 파이썬을 설치할 때 다양한 모듈과 패키지가 기본으로 설치됩니다. 만약 기본 모듈과 패키지로 부족하다면 다른 사람이 만든 유명 모듈과 패키지를 설치해서 쓸 수도 있습니다.

모듈 < 패키지 < 파이썬 표준 라이브러리(Python Standard Library, PSL)

클래스는 모양만 만들어 놓는다? ex 붕어빵 틀?
1. 클래스는 여러개의 내장함수를 합쳐 놓은거? 아니면 패키지를 예를 들어 로봇의 모든 움직임에 대한 명령어들을 놓은것으로 이해하는 건가요? 아니면 생성한 Turtle로 이해하는 건가요? 아니면 틀을 만들어 놓고 필요시 불러오는 것인가요?
2. 패키지와 Class의 차이점은 무엇인가요?
3. t = turtle.Turtle() 이거라면 t.speed(0) == turtle.Turtle(speed(0))의 뜻인가요?
4. length += 5는 length = length + 5? 

# : python에서 주석 기호 명령어
[ ] : python에서 리스트 기호 명령어

import turtle
colors = ["red","purple","blue","green","yellow","orange"]
t=turtle.Turtle()

turtle.bgcolor("black") #bgcolor()는 turtle에서 제공하는 함수
t.speed(0) #생성된 turtle 객체가 가지고 있는 기능
t.width(2)
length = 10 # length는 변수(값이 바뀌는...)임 - 작성자가 만들은 것

while length < 500:
    t.forward(length)
    t.pencolor(colors[length%6])
    t.right (89)

    length += 5

CPU / RAM == 전자의 움직임
SSD / HD == 물리적인 부분
Cache == 캐시 메모리
*C언어는 주소를 건드린다. - 레퍼런스는 주소라는 의미

#낙타체
- 변수의 첫 글자는 소문자로, 나머지 단어의 첫 글자는 대문자로 적는 방법
- 예를 들면 myNewCar처럼 첫 'm'은 소문자로, 나머지 단어들의 첫 글자는 대문자로 표기
- 일반적으로 C++, Java와 같은 객체지향 언어에서도 변수는 위와 같은 방식으로 적성함
/ 단 클래스명 작성 시에는 첫 글자를 반드시 대문자를 사용함 / 예를 들면 MyNewCar

변수를 활용하는 이유 - 수정시 한번에 처리하기 위함

# 유니코드는 16진수?
# 정수 7과 문자(열) '7' -> 정수 7 :00000000 00000000 00000111 (2진수)
# 문자(열) '7' : 00000000 00110111 (2) - > 유니(UNI)코드 기준
# 문자(열) '7' : 00110111 (2) -> 아스키(ASCII)코드 기준
'0' -> 48
'1' -> 49
'2' -> 50
'3' -> 51
'4' -> 52
'5' -> 53
'6' -> 54
'7' -> 55

*유니코드는 아스키코드를 포함하고 있다.


참고 | 모듈, 패키지, 라이브러리
파이썬을 배우다 보면 모듈, 패키지, 파이썬 표준 라이브러리와 같은 용어를 접하게 되는데 서로 비슷한 개념이지만 약간의 차이가 있습니다.
모듈: 특정 기능을 .py 파일 단위로 작성한 것입니다.
패키지: 특정 기능과 관련된 여러 모듈을 묶은 것입니다. 패키지는 모듈에 네임스페이스(namespace, 이름공간)를 제공합니다.
파이썬 표준 라이브러리: 파이썬에 기본으로 설치된 모듈과 패키지, 내장 함수를 묶어서 파이썬 표준 라이브러리(Python Standard Library, PSL)라 부릅니다.