반응형

**Data type

1.overflow & Underflow

1)Overflow 수사 자료형에서 자신이 저장할 수 있는 크기보다 큰 데이터를 강제 형 변환해서 데이터를 저장하는 경우 자신이 저장할 수  범위까지의 데이터만 저장하고 앞쪽의 데이터는 제거하고 저장하는 경우

 

short :2bytes정수로 -32768~ +32767범위 내의 숫자만 저장 가능

short s = 32768//이 구문이 에러

32768->0 10000000 00000000

표현범위가 큰 데이터를 작은 범위의 변수에 저장하기 위해서는 강제 형 변환이 필요

short s = (short)32768;

저장이 되는데 앞쪽을 버린다. 메모리 상에서는 아래 동작이 변한다.

short s = 10000000 00000000(2진수 );

 

System.out.println("s:"+s) //음수가 나온다. -32768

음수 양수는 첫 번째 비트로 확인한다.

0100

1011

+  1

1100

<----------

0100

1100

'

 

+32767 끝까지 왔다가 없으면 -32768로 간다. =>overflow

-32768 하나 빼면 뒤로 갈 수 없어서 32767로 간다.

 

자신이 저장할 수 있는 데이터보다 더 큰 숫자를 저장하면 가장 작은 숫자부터 다시 시작

 

2) Underflow

자신이 저장할 수 있는 숫자보다 더 작은 숫자를 저장하면 가장 큰 숫자부터 다시 시작

 

3)숫자 데이터의 연산에서 결과 자료형보다 더 크거나 작은 데이터가 나오게 되면 잘못된 결과를 만들 수 있습니다.

 

 

#src -> A.java

add -> A.class

 

src=>source의 약자이다.

java파일을 만드는데 class를 어디에 하는가 ?

java start up

python __main__

4)실습

           //자바 애플리케이션의 시작 메소드

           public static void main(String[] args) {

                       // short 32767 보다 큰 숫자는 그냥은 저장 안됨

                       // 강제 형 변환을 통해서만 저장됨

                       // 16비트 앞쪽의 비트는 잘리게 됨 -Overflow

                       // 가장 작은 숫자부터 다시 시작 - 음수가 저장됨

                       // 반대되는 현상을 Underflow라고 합니다.

                       short s = (short)32768;

                      

                       //저장된 데이터를 출력

                       System.out.println("s:"+s);//s:-32768

                      

           }

 

 

 

2.문자열

=>string이라는 클래스를 이용해서 문자열을 저장

=>문자열을 대입할 때는 클래스에서는 예외적으로 직접 값 대입이 가능

sTRING 변수명 = '문자열';의 형태로 생성 가능

 

=>문자열 과 숫자 데이터 또는 BOOLEAN +연산하게 되면 숫자 데이터와 BOOLEAN을 문자열로 변환해서 결합을 합니다.

 

3.Literal저장

=>Literal 사용자가 직접 작성한 데이터

boolean리터럴 :TRUE,FALSE

정수 리터럴 :10(INT) ,10L(long)

실수 리터럴 :3.2f(float),3.2(double),0.314E_001(3.14->0.314 * 10 1)

문자 리터럴 :'A'

문자열 리터럴 :"ABC","A"

참조 리터럴 :null(가리키는 참조가 없다. 결측치)

자료구조 하는 분은 nil이라고 하고 파이썬은 None이라고 한다.

 

문자열은 자기 자신을 더하거나 빼는 것 못한다.

"park" +"moon"

 

park

park+moon

 

이렇게 영규적 영역에 들어간다.

크롤링할 때 항상 파일에 집어연다.

 

stack은 일시적이고  =>지역변수

heap은 없을 수도 있고 영구적일 수도 있다.  =>instance변수 static변수

 

 

 

 

stack 자료구조이름 자료구조를 만드는 메모리 영역

stack 영역 : 함수 또는 메모리가 필요한 데이터 저장

           일시적 함수나 메소드의 수행이 종료되면 소멸된다. return (없어진다.)

heap 영역 : 반영구적  (소멸 가능) * 이 공간을 활용 잘 해야 한다.

static 영역 : (소멸이 안된다.) Method영역 정적

               자동으로 정리하며

            필요해서 하는 것이 아니라 알아서 한다. <->garbage collection(java,python) ->return count

               c는 개발자가 직접해야 한다.

              static영역을 많이 사용하지면 pc가 늦어진다.

              pc꼈다 키면 영구적 영역이 정리해서 속도가 조금 빨라진다.

 

21 -> 0

            -> 1

1).모바일은 upgrade안된다.(최적화)

2).인터넷이 언제 끊어질지 모른다.

 

 

32bit -> 232까지 구분 <- c에서는 주소 ,java 에서는 hash code ,python id

        231 기가

2기가 제한인 것이 많다. 외냐하면 처음 자리는 음수로 해야 한다.

 

int a = 10;

int b = 10;

String name = "park";

static

a,bid가 달라야 하는데 위의 경우 처럼 하면 같다.

 

literal 사용하면 static에 저장

 

10이 있는지 static 에 가서 확인 번지로 찾는다.

10 lteral 한번 받아서 만들어진다.

"park" + "moon" ->최악의 연산이다.

 

 

=>Literal 은 영구적인 영역에 저장

한번 만들어지면 프로그램이 종료될 때 까지 소멸되지 않습니다.

Literal을 변수에 저장하면 먼저 메모리 영역에서 있는지 찾아보고 찾으면 그 참조를 저장하고 찾지 못하면 Literal을 메모리에 저장하고 그 참조를 저장합니다.

 

=>자바에서는 변수가 참조하고 있는 영역을 확인하고자 할 때  System.identityHashCode메소드에 변수를 대입해서 출력해보면 됩니다.

 

실습 :3개의 정수를 저장할 수 있는 변수를 만들고 2개에는 동일한 값을 저장하고 다른 1개에는 다른 값을 저장한 후 해시코드를 출력

                       int a = 10;

                       int b = 10;

                       int c = 11;

                      

                       //a c는 동일한 데이터를 저장했기 떄문에 해시코드가 동일

                       //c는 다른 데이터를 저장했기 떄문에 다른 해시코드를 출력

                       System.out.println("a:"+System.identityHashCode(a));

                       System.out.println("b:"+System.identityHashCode(b));

                       System.out.println("c:"+System.identityHashCode(c));

 

4.System.out.printf()

=>서식에 맞춰서 콘솔에 출력해주는 메소드

=>프린터 같은 장비는 gui(윈도우) 운영체제를 탑재하지 않고 CLI(cOMMAND Line Interface)기반의 운영체제를 탑재하고 있는데 이런 운영체제에 데이터를 출력할 때는 서식을 이용해서 출력을 해야 데이터에 맞춤을 적용해서 출력할 수 있습니다.

=>java에서는 이 경우 printf메소드를 이용합니다.

1)사용방법

system.out.printf("서식 나열",서식에 매핑되는 데이터를 나열 );

=>서식은 반드시 %로 시작

 

 

2)서식을 보면

정수는 :%d, %i

실수는 %

문자 : %c

문자열 %c

boolean %b

 

3)%다음에 숫자를 입력하면 숫자만큼의 자리를 확보해서 출력

 

4)%0숫자 형태로 입력하면 빈자리는 0으로 채워집니다.

 

5)실수의 경우 %전체자릿수, 소수자릿수 f형태로 출력할 소수 자릿수를 설정할 수 있는데 소수자릿수 아래에서 반올림

 

6)string.format과 사용방법이동일

string.format은 출력하지 않고 문자열로 리턴합니다.

 

int age= 20;

double height = 176.53;

System.out.printf("나이는 %d 키는 %.1f입니다.",age,height);

 

 

**연산자(Operator)

=>연산을 수행하기 위한 부호나 명령어

=>산술 연산은 숫자 데이터의 연산이고 논리연산은 결과가 true false형태로 리턴되는 연산

1. 최우선 연산자

1)() : 괄호 연산의 우선순위 변경을 위한 연산자

2)[]: 배열에서 배열의 크기나 인덱스를 설정할 때 사용하는 연산자

 

2.단항 연산자:하나의 데이터 만을 가지고 연산하는 연산자-Unary(하나만 주기)

 

binary 두개 주기

 

1)증감 연산자 : ++,--

=>변수에만 사용할 수 있는 연산자

=>변수의 앞 뒤 모두에 위치 할 수 있는 연산자

=>변수의 앞에 놓이게 되면 변수의 값을 1증감시키고 명령에 사용

=>변수의 뒤에 놓이게 되면 변수의 값을 명령에 사용하고 1증감시킵니다.

=>연속해서 사용되는 경우 언어마다 다르게 적용

 

int a= 10;

a++;

System.out.println("a:"+a)//11출력

 

 

System.out.println("a:"+(a++));//11 a 12로 바꾼다.

System.out.println("a:"+( ++a));//13 증가시키고 명령

 

a = 0;

int result = ++a + ++a;

System.out.println("result:" +result);// 3

java ->3

c->4

c언어의 특징 : ++a ->1 => ++a-> 2 => 4

java는 하나씩 한다. ++a -> 1

                      ++a ->2

 

                       int a = 10;

                       //a의 값을 1증가

                       a++;

                       System.out.println("a"+a);//11출력

                      

                       //a 11인 상태에서 명령에 먼저 사용하고 1증가

                       //11이 출력되고 a 12가 됩니다.

                       System.out.println("a:" +(a++)); //11

                      

                       //a를 먼저 증가시켜서 13을 만들고 명령에 사용

                       System.out.println("a:" +(++a));//13

 

2)부호 관련 연산자

+ : 양수라는 것을 명시적으로 표현하기 위한 연산자

-  : 2의 보수 연산자 음수 표현

~ : 1의 보수(0->1, 1->0) 연산자 양수와 음수 사이의 절대값 1차이 ,색상 반전에 이용

~ 일 경우 : 01101100 -> 10010011

 

3) 강제 형 변환 연산자

(자료형)데이터 : 데이터의 자료형을 강제로 변경하는 연산자

 

3.산술 연산자

%,*,/,+,1

=>자바는 동일한 자료형끼리 산술 연산을 하면 동일한 자료형으로 결과가 리턴

정수/정수 = 정수

 

=>서로 다른 자료형끼리 산술 연산을 하면 표현 범위가 더 큰 자료형으로 변환해서 연산하고 표현 범위가 더 큰 자료형으로 결과를 리턴

정수 +실수 =>실수 + 실수 =>실수

 

=>int보다 작은 자료형은 int로 변환해서 수행하고 결과도 최소 int

short + short => int +int = int

 

=>문자열은 문자열 또는 숫자,그리고 boolean데이터와 +연산이 가능한데 + 연산을 하게 되면 다른 데이터를 문자열로 변환해서 결합

 

"10+20="+ 10+20 =>"10+20 = 1020"

"10+20="+(10+20) =>"10+20 = 30"

 

=>%:나머지 연산자

숫자의 범위를 제한하거나 패턴을 갖는 문장을 실행할 때 사용

 

실습)패턴을 갖는 명령문을 실행

//빨강, 파랑, 노랑 을 순서대로 1초마다 출력

 

 

순서대로 색갈이나 달력등을 할 수 있다.

2가지 모양이나 4가지 모양으로 하는 게 좋다.

스위치는 2가지 모양으로 하는게 중요하다. on off

                       int i = 0;

                       for(; ; ) {//무한 루프

                                  try {

                                              i = i % 4 ;

                                              if (i == 0) {

                                                         System.out.println("라투");

                                              }else if(i == 1) {

                                                         System.out.println("오미크론");

                                              }else if(i == 2) {

                                                         System.out.println("다크스팩터");

                                              }else {

                                                         System.out.println("오미크론");

                                              }

                                              Thread.sleep(1000);//1초마다 쉰다.

                                              i++;

                                  } catch (InterruptedException e) {

                                              e.printStackTrace();

                                  }

                       }

오미크론이 2개 더 나온다.

 

=>cd Key,나 숫자 코드의 유형성 검사에도 %가 사용됩니다.

다 더해서 /해서 0이면 cd key이다.

주민등록번호는 11의 배수 자리수로 해서 하는 것

 

% , xor =>이미지 연산

 

4.shift연산자

=>정수 데이터를 가지고 왼쪽이나 오른쪽을 비트 단위로 밀어내는 연산자

=>2진수로 연산하고 결과는 10진수로 리턴

=> >>,<<,>>>

 

정수1 >> 정수2  : 정수 1을 정수 2 비트만큼 오른쪽으로 shift

정수1 << 정수2  : 정수 1을 정수 2 비트만큼 왼쪽으로 shift

=>부호비트는 shift하지 않습니다.

첫번째 비트는 shift하지 않습니다.

 

정수 1 >>> 정수 2: 보호비트도 shift포함, 무조건 민다. 그래서 양수 일 때는 >> 와 차이가 없고 음수인 경우 결과가 달라짐

 

=>32번이상 shift하라고 작성하면 32로 나눈 나머지 만큼만 shift합니다.(java) 파이썬과 다르다. 파이썬 계속 밀명 0이다.

 

=>오른쪽으로 한번 shift하면 2로 나눈 효과

=>왼쪽으로 한번 shift하면 2를 곱한 효과

 

4: 0000 0100

 

4 >> 1 : 0000 0010 =>2

4 >> 2 : 0000 0001 =>1

 

5/ 2  => 0000 0101 /2하면 오른쪽으로 하나 민다.  0000 0010 => 2

 

실습)

                      int n = 10;

                       //2번을 오른쪽으로 나누기 4하 효과 - 자가 출력

                       System.out.println("n >> 2" +(n >>2));

                      

                       //32번 이상 밀면 모든 비트가 소멸되기 때문에

                       //32번 이상 shift하면 32로 나눈 나머지 만큼만 shift- 2번만 함

                       System.out.println("n >> 2" +(n >>34));

 

5.옵션 설정

=>프로그래밍 언어에서는 사용할 수 있는 옵션을 정수로 만들어 놓는 경우가 종종 있는데 이 때 숫자의 배열을 확인

=>숫자의 배열이 1,2,3,4,5 처럼 일련번호 형태로 되어 있으면 이 옵션은 하나 만 선택

=>숫자의 배열이 1,2,4,8,16,32처럼 2의 지수 승 형태로 되어 있으면 이 옵션은 중복 선택이 가능한 옵션입니다.

애플은 1,2,4,8이런 식으로 쓰지 않고 1<<0, 1<<1, 1<<2,1<<3형태로 만듭니다.

 

=>키보드 눌렀을 때

A:65, B:66 C:67...

 

마우스 왼쪽 :1 마우스 오른쪽 :2,shift :4, Control : 8  Middle Button:17, Alt ;32..=>중복해서 누를 수 있다.

 

같이 부럴 수 있는 것은

0이면안눌러지고 1이면 눌러진것이고 ->하나의 비트가 하나이 명령을 한다.

control alt 오 왼

0          0  1  1

뭐 눌러짔는 것으로 비교한다.

 

옵션값을 찍어서 확인하기

 

shift는 프로그램언어마다 조금씩 다르다.

 python 32이상시 0으로 채워진다.

 

6.관계 연산자

=>2개의 데이터를 비교해서 결과를  boolean리턴하는 연산자

=>숫자형에만 사용 가능한 연산자 : >,>=,<,<=

=>모든 자료형에서 사용 가능한 연산자 (내용을 비교하는 것이 아니고 가리키고 있는 데이터가 같은지 비교):!= ,

==

=>문자열의 경우는 동일한 데이터이라도 == 로 비교하면 false가 리턴될 수 있기 떄문에 문자열은 == 로 비교하지 않습니다.

 

7.비트 논리 연산자

=>정수 데이터에 사용 가능한 연산자로 비트 단위로 연산한 후 결과를 10진 정수로 리턴하는 연산자

=>&(and): 2개의 비트 모두 1일때 만 1

=>|(or):2개의 비트 모두 0일 때 0

=>^(xor):2개의 비트가 같으면 0 다르면 1

=> 이 연산자들은 시스템 프로그래밍이나 그래픽 프로그래밍을 할 때 자주 등장

 

int a = 20;

int b = 13;

 

a & b

a | b

a ^ b

 

int a = 20;

int b = 13;

 

 

 

 

a: 00000000 00000000 00000000 00010100

b: 00000000 00000000 00000000 00001101

 

 

a&b : 둘다 1일때만 1

00000000 00000000 00000000 0000100  =>4

 

a|b :둘다 0일 때만 0

00000000 00000000 00000000 00011101  => 29   16+8+4+!

 

a^b: 같으면 0 다르면 1 =>exclusive OR

00000000 00000000 00000000 00011002  =>25

 

xor비교 프로그램 만드는 것 하지안으면 값없다.

A ^ 'A' 같으면 0

 

색상 or기법이다.  1 | 1 =>1

 

 

 

and :삭제 and 0 & 0

 

 

or 복사 빈곳

 

잘라내기가 복사하는 것 보다 늦다 그것은 0으로 만들고 해야 한다.

 

 

 

 

왼쪽으로 그림판에서 그리면 오른쪽 처럼 된다.

not xor pen으로 드로쉼

검정색

검정색 xor

검정색              ->0

NOT XOR       -> 1횐색

횐색은 지워지는 것 처름 보인다.

NOT XOR PEN

 

 

 

 

 

이 부분을 white로 바꿔져서 지운것 처럼 보인다.

 

 

control shift        

 

shift를 눌렀는지 확인해서 1인지 확인

0100 5

0101 5

0111 7

1101 13

1111

shift인지 확인

4인지 확인하는 것은 다른것 클릭하면 shift를 눌렀는데 모른다.

 

0000    0000

0100    0100

& 0000  | 0100 =>4

and는 하나라도 0이 있으면 0이다.

&4 window키로

그 자리만 1인 숫자와 andd하면 쉽게 할 수 있다.

: 김상영이 쓴 책

 

 

 

0       0      0      0

        1

if (modifiers == 4) {} ->이런식으로 하면 alt만 누를때만 가능하다. 다른 것은 안된다.

else{}

 

control Alt        

 

0       0      0      0

0       1      0      1 -> ALT+왼쪽

alt + 일 경우 그래서 and 4

특정한 위치의 bit1인지 확인

=>위치의 bit1인 정소와 &를 해서 0이면 0이고 0이 아니면 1

=>윈도우 프로그램안에서 단축키 사용시 중요하다.

방향키 찾아서 하는것 중요한 알고리즘

 

 

                       int a = 20;// 00000000 00000000 00000000 00010100

                       int b = 13;// 00000000 00000000 00000000 00001101

                      

                       // 2개 모두 1인 경우에만 1

                       System.out.println("a & b:"+(a & b)); //결과는 100 ->4

                       // 2개 모두 0인 경우에만 0 나머지 경우는 1

                       System.out.println("a | b:"+(a | b)); //결과는 11101 ->29

                       // 2개 같은 경우는 0 다른 경우는 1

                       System.out.println("a ^ b:"+(a ^ b)); //결과는 11001 ->25

 

8.조건 논리 연산자

=>boolean데이터를 가지고 연산을 수행

=> !(not) :하나의 데이터를 가지고 연산하는데 결과를 반대로 리턴하는 연산자

=> &&(AND):둘다 TURE인 경우만 TRUE를 리턴하고 그 이외의 경우는 FALSE리턴

=> ||(OR) :둘다 FALSE인 경우만 FALSE를 리턴하고 그 이외의 경우는 TRUE리턴

 

=>AND OR는 데이터의 순서를 바꿔도 실행 결과는 같지만 과정은 다를 수 있습니다

 

AND는 앞 쪽의 데이터가 FALE이면 결과가 무조건 FALSE이므로 뒤의 데이터를 확인하지 않습니다.

 

OR는 앞 쪽의 데이터가 TRUE이면 결과가 무조건 TRUE이므로 뒤의 데이터를 확인하지 않습니다.

 

순서에 따라 뒤의 데이터를 확인해야 하기도 하고 확인하지 않아도 되기 때문에 과정이 달라질 수 있습니다.

반복문 안에서 사용할 때는 조금 생각해보고 사용하는 것이 좋습니다.

 

조건 && 예외발생상황

조건 false일 경우 예외발생상황 하지 않는다. 프로그램 정상 상황처럼 보인다.

조건 true일 경우 예외발생상황 한다.

그래서 프로그램이 됬다 안됬다 할 경우 가 생긴다.

&& || 일 경우 확인해야 한다.

null point Exception

 

실습)

                       int x = 10;

                       //x 4 의 배수인지 판별

                       boolean result = ( x % 4 == 0) ;

                       System.out.println("result:"+result);

                      

                      int year = 2020;

                       //윤년인지 판별

                       //윤년은 4의 배수이고 100의 배수가 아닌경우 또는 400의 배수인 경우

                       result = year % 4 == 0 &&  year % 100 != 0  ||  ( year % 400 == 0);

                       System.out.println("result:"+result);

 

9.삼항 연산자

변수 = boolean이 나오는 표현식 ? true일 때 수행할 내용 :false일 때 수행할 내용;

 

=>2개의 정수가 있다가 할 때 2개 중에 큰 정수 찾기

int a = 10;

int b = 20;

int max = a > b ? a:b;

System.out.println("max:"+max);

 

=>간단한 분기문을 만들 때는 if대신에 삼항 연산자를 사용합니다.

삼항 연산자로 작성하는 모든 식은 if로 대신할 수 있습니다.

 

10.대입연산자

=: 오른쪽의 데이터를 왼쪽의 변수에 대입하기 위한 연산자

연산자 = : 왼쪽의 변수가 가리키는 데이터에 오른쪽의 데이터를 연산자를 이용해서 연산하고 다시 왼쪽의 변수에 결과를 대입하는 연산

 

int a = 10;

 a+= 20; //a의 값은 10+ 20 을 하고 그 결과를 다시 a에 저장

//a의 값은 30

//+대신에 다른 연산자들도 사용이 가능

 

11.변수의 값을 1증가

a = a+1;

a += 1;

a++;

 

예전에는 a++이 가장 빠르다고 했는데 실제로 비교를 해보면 몇 억번 정도 수행해도 별 차이가 없음

 

a= a+1재일 느리지만 이 방식은 모든 프로그래밍언어에서 사용이 가능 알고리즘에서도 이렇게 사용한다.

+=, ++는 되는 언어가 있고 안되는 언어도 있습니다. 알고리즘에서 사용이 안된다.

 

12.연습문제

int second = 309209;

//second에 추가 저장

//하루는 86400, 1시간은3600, 1분은 60

//second가 몇일 몇 시간 몇분 몇초인지 출력

 

                       int second = 309209;

                      

                       int day = second / 86400;

                       int hour = (second - (day* 86400))/ 3600;

                       int minute =(second - (day* 86400)- (hour*3600))/60;

                       //초는 분 까지 가져 간 것을 모두 뺴면 되는데 일,시간, 분은 전부 60의 배수이기 때문에

                       //60으로 나눈 나머지가 몯  뺀 값이 됩니다.

                       int sec = second% 60;

                      

                       System.out.println(day+"" +hour+"시간"+minute+"" +sec+"");

 

13.자바에서 콘솔에서 입력받기

Scanner sc= new Scanner()

//Scannerjava.util.Scanner 라서 그냥 Scanner라고 쓰면 에러가 나는데

//Scanner글자에 마우스 커서를 갖다 대면 import 를 대신 해준다고 메시지가 출력됩니다.

//크릭하면 import를 해줍니다.

 

//문자열을 입력받고자 하면

문자열 변수 = sc.nextLine();

 

//정수 입력받고자 하면

정수변수 = sc.nextInt();

 

실습 )

이름과 나이를 입력받아서 출력

이름은 문자열 나이는 정수

 

                       //이름과 나이를 입력받아서 출력하기

                       //키보드 인식 하는 것 System.in

                       Scanner sc = new Scanner(System.in);

                      

                       //이름을 입력하기

                       System.out.print("이름 입력:");

                       String name = sc.nextLine();

                      

                       //나이를 입력받기

                       System.out.print("나이 입력:");

                       int age = sc.nextInt();

                       //확률이 높은 것을 위에 올려준다.

                      

                       //출력

                       System.out.println("이름은 "+name+" 나이는 "+age);

                      

                       sc.close();//없으면 경고가 생긴다.Resource leak

                       //leak 있을 경우 close해주면 된다.

 

14.제어문자

=>역슬래시 다음에 하나의 영문 문자를 기재해서 특별한 기능을 수행하도록 한 문자

\n:   줄 바꿈

\t: 

\\ : 역슬래시

\' '

\"": "

 

\a : 비프음 -C언어 같은 언어에서는 메인보드 내의 스피커를 이용해서 beep음 출력

java에서는 안된다.

컴퓨터 킬때 나는 소리

없으면 메인보드 스피커 빠진것이다.

원도우 프로그래밍을 하다가 버튼의 제목 같은 곳에서 줄바꿈을 할려고 했는데 \n으로 안되면 \r\n을 이용

\n는 줄 만 바꾸고 커서를 움직이는 것이 아니다.

\r은 커서를 맨 앞으로 보내는 것이다.

 

**제어문(Control Statement)

=>프로그램의 흐름을 변경하는 명령어

=>프로그램은 왼쪽에서 오른쪽으로 위에서 아래로 순서대로 처리되는데 이러함 흐름을 변경하는 명령어

1.종류

1)분기문

=>조건이나 값을 가지고 분기(갈림길)

ifswitch

 

2)반복문(Loop)

=>동일한 패턴의 문장을 반복 수행

while, do ~ while ,for

 

3)기타 제어문

break ,continue, return

 

2.if

1)단순 if

if(boolean데이터 또는 boolean이 리턴되는 표현식 또는 메소드 호출){

           ()안의 내용이 true일 때 수행할 내용

}

 

2)if ~ else

if(boolean데이터 또는 boolean이 리턴되는 표현식 또는 메소드 호출){

           ()안의 내용이 true일 때 수행할 내용

}else{

           ()안의 내용이 false일때 수행할 내용

}

 

3)if ~else if ~ else

if(boolean데이터 또는 boolean이 리턴되는 표현식 또는 메소드 호출){

           ()안의 내용이 true일 때 수행할 내용

}else if(새로운 비교내용){

           앞의 조건이 false이고 ()안의 조건이  true일 때 수행할 내용

}else{

           ()안의 내용이 false일때 수행할 내용

}

=>else if는 무제한 사용이 가능

=>else는 생략이 가능

 

 

실습 1)

=>점수를 입력받아서 60점이 넘으면 합격이라고 출력

                       //키보드로부터 입력받기 위한 객체를 생성

                       Scanner sc = new Scanner(System.in);

                      

                       //점수 입력받기

                       System.out.print("점수 입력:");

                       int score = sc.nextInt();

                      

                       //점수가 60점 이상이면 합격이라고 출력

                       if(score >= 60) {//조건

                                  System.out.println("합격"); //수행할 내용

                       }

                      

                       sc.close();

         

 

실습 2)

=> 점수가 60점 이상이면 합격이라고 출력

                                  //키보드로부터 입력받기 위한 객체를 생성

                       Scanner sc = new Scanner(System.in);

                      

                       //점수 입력받기

                       System.out.print("점수 입력:");

                       int score = sc.nextInt();

                      

                       //점수가 60점 이상이면 합격이라고 출력

                       if(score >= 60) {//조건

                                  // 조건이 true 일때 수행할 내용

                                  System.out.println("합격"); //수행할 내용

                       }else {

                                  //조건이 false일때 수행할 내용

                                  System.out.println("불합격"); //수행할 내용

                       }

                      

                       sc.close();

 

 

실습3)

90-100이면 A

80-90미만이면 B

70-80 미만이면 C

60-70미만이면 D

0~60미만이면 F

=>자바는 위의 조건이 아래 조건을 포함하면 에러가 발생

=>결코 도달할 수 없는 코드를 만들면 에러가 발생

문법적인 오류 없지만 로직 오류는 에러 가 발생한다.

if(score >= 0 and score <= 100){

}else if (score >= 10 and score <= 100){

}

=>이런 경우 else의 용도도 고민해봐야 한다.?

else는 예외적인 상황 발생에 대한 처리를 해주는 것이 좋습니다.

//키보드로부터 입력받기 위한 객체를 생성

                       Scanner sc = new Scanner(System.in);

                      

                       //점수 입력받기

                       System.out.print("점수 입력:");

                       int score = sc.nextInt();

                      

                       /**

                        * 점수가 90-100    이면 A

                        * 점수가 80-90 미만이면 B

                        * 점수가 70-80 미만이면 C

                        * 점수가 60-70 미만이면 D

                        * 점수가   0~60 미만이면 F 라고 출력

                        */

                       if(score >= 90 && score <= 100) {

                                  System.out.println("A");

                       }else if(score >= 80 && score < 90) {

                                  System.out.println("B");

                       }else if(score >= 70 && score < 80) {

                                  System.out.println("C");

                       }else if(score >= 60 && score < 70) {

                                  System.out.println("D");

                       }else if(score >= 0 && score < 60) {

                                  System.out.println("F");

                       }else {

                                  System.out.println("잘못된 점수 입력");

                       }

                       //else는 예외적인 상황 발생에 대한 처리를 해주는 것이 좋습니다.

                      

                       sc.close();

 

 

3.switch

=>값에 의한 분기

switch(정수나 문자열 변수 또는 연산식 그리고 메소드 호출){

           case 1:

                       ()안의 내용이 값1일때 수행할 내용;

                       (break;)

           case 2:

                       ()안의 내용이 값2일때 수행할 내용:

                       (break;)

           ................

           default:

                       일치하는 값이 없을 때 수행할 내용;

                       (break;)

}

 

=>문자열은 자바 1.7버전부터 지원

=>case옆에 작성하는 값은 리터럴이거나 final변수 이어야 합니다.

변수를 만들 때 자료형 앞에 final,을 기재하면 자바에서는 literal이거나 읽기 전용 변수(상수)가 됩니다.

=>case구문안에서 break를 생략하면 break를 만날때 까지 모든 문장을 전부  수행

 

실습)

정수를 1개 입력받아서 1이면 한식 2이면 중식 3이면 분식 나머지 경우는 일식이라고 출력

값을 가지고 분기하는 경우인데 if로 작성이 가능하지만 값에 따라 다른 문장을 실행할 때는 switch를 사용하는 것을 권장

특정한 값일 때 무엇이다

ifswitch보다 빠르다.

                       Scanner sc = new Scanner(System.in);

                      

                       // 매뉴 입력받기           

                       System.out.print("메뉴 입력(1-한식 2-중식 3-분식 기타-일식)");

                       int menu = sc.nextInt();

                      

                       switch(menu){

                       case 1:

                                  System.out.println("한식");

                                  break;

                       case 2:

                                  System.out.println("중식");

                                  break;

                       case 3:

                                  System.out.println("분식");

                                  break;

                       default:

                                  System.out.println("기타 - 일식");

                                  break;

                       }

                      

                       sc.close();

 

//마우스 왼쪽 누르면

case 1:

final int LBUTTONGDOWN =1;

case LBUTTONGDOWN:

                       Scanner sc = new Scanner(System.in);

                      

                       // 매뉴 입력받기           

                       System.out.print("메뉴 입력(1-한식 2-중식 3-분식 기타-일식)");

                       int menu = sc.nextInt();

                      

                       //읽기 전용의 변수를 생성

                       final int KOREA = 1;

                       final int CHINA = 2;

                       final int SNACKBAR = 3;

                      

                      

                       switch(menu){

                       case KOREA:

                                  System.out.println("한식");

                                  break;

                       case CHINA:

                                  System.out.println("중식");

                                  break;

                       case SNACKBAR:

                                  System.out.println("분식");

                                  break;

                       default:

                                  System.out.println("기타 - 일식");

                                  break;

                       }

                      

                       sc.close();

읽거나 할경우 case안에 final로 한 읽기전용으로 하는게 훨신 보기 좋다

실행은 소스 코드 크기로 하는 것이 아니다.

if보다 switch가 빠를 가능성이 높다.

 

li = [1,2,3]

dic = {"":1 ,"":2, "":3}

key: 해싱해서 저장

value [1,2,3]

특정값기능이 안된다. 실수 ,판단

li[0]  li[1]  li[2]          =>전체 조회시 데이터 적을 때 빠르다.

원래 자리 돌아갔다가 다시 다음것 진행

    pointer

첫번째 찾고 돌아갔다가 다시 다음 것 진행한다.

for in 갔다가 대기한다음 다음 위치로 이동

 

dic[""] dic[""] dic[""] =>속도가 더 빠르다.

           변수는 여러개의 데이터 가르킬 수 없다.

li 출발점은 출발전 가르킨다.

    pointer

li[1] ->li찾아서 한칸 건너뛴다. =>2

li[2] ->li찾아서 두칸 건너뛴다. =>3

데이터가 많으면 많을수록 속도가 점점 늦어지낟.

숫자는 건너뒤는 것이다.

dic->이름 쓰면

key :해싱해서 저장

hash 함수

                                                        

                                                        

                                                          

dic[""]

dic[""]

 

if

 

 

 

 

 

 

밑에 조건은 위에서 걸쳐야 한다.

switch -case 는 바로간다.

smart phone은 바로간다. dict 이런 방식

해싱한다.

if < switch

1.     코드의 가독성이 높다.

2.     여러번 수행하면 수행속도가 빠르다.

for in 다음위치

읽고 기다ㄹ기고 진행

random접근이 안된다. 전진 밖에 안된다.

 

 

4.반복문

=>패턴을 갖는 문장을 연속적으로 사용해야 하는 경우 반복문을 사용할 수 있습니다.

1)while

while(boolean 데이터 또는 boolean이 리턴되는 연산식 또는 메소드 호출){

           ()의 값이 false가 아닐 때 수행할 내용;

}

 

//Hello Java3번 출력->속도는 이것이 빠르다.

System.out.println("Hello Java");

System.out.println("Hello Java");

System.out.println("Hello Java");

 

int i = 0;

while (i < 3){

           System.out.println("Hello Java");

           i = i+1;

}

 

일반적인 프로그램은 0부터이고

프로그램이 아닌 분들 시작하는 것은 rdb1부터 만들어진것이다.

int i = 0;

하면 몇 번 까지 했는가 할때 편하다. 마지막에 .i를 출력하면 3이다.

알고리즘을 할때는 보통 1이다.

 

3

2

1

 

(3- (i++))

--빼기 잘 안쓴다.

 

2)do ~while

do {

           반복 수행할 내용;

}while(조건);

=>무조건 반복 수행할 내용을 하고 조건을 확인해서 false{}아ㄴ의 내용을 반복

=>do ~while while로 변경할 수 있지만 반드시 1번은 수행해야 한다. 라는 의미를 전달하기 위해서 사용

i = 0;

do {

           System.out.println("Hello Java");

           i = i+1;

}while(i < 3);

 

3)for

for(처음 한번만 수행할 내용; 조건; 두번째 부터 수행할 내용){

           조건이 false가 아니라면 수행할 내용;

}

=>각 영역은 생략이 가능

for(;;){} //무한 반복false가 아니라면 수행해야 하기 때문에

=>각 영역은 생략이 가능

for (int i = 0; i <3 ; i= i+1){

           System.out.println("Hello Java")

}

 

int i = 0;

for (; i <3 ; i= i+1){ //처음에 안하겠다.

           System.out.println("Hello Java")

}

 

//첫번 째 것은 한번만 하는 것이다.

for (int i = 0, int j = 0; i <3 ; i= i+1){ //처음에 안하겠다.

           System.out.println("Hello Java")

}

 

4.제어문을 사용할 때 주의할점

if switch,while,for를 쓸 때 주의할 점은 ()뒤에 ; 을 하는 것이다.

()뒤에 ; 을 하게 되면 조건은 무시하고 {}안의 내용을 무조건 한 번만 수행합니다.

 

실습 -반복문 while, do~while, for로 만들기

                       //while

                       //한번만 수행할 내용 -> while(조건) -> { }내에 반복수행할 내용

                       int i = 0;

                       while(i<3){

                                  System.out.println("Hello Java");

                                  i = i + 1;

                       }

                       System.out.println("======================");

                       //do~while

                       //한번만 수행할 내용 -> do{반복 수행할 내용} -> while(조건);

                       i = 0;

                       do {

                                  System.out.println("Hello Java");

                                  i = i + 1;

                       }while(i<3);

                       System.out.println("======================");

                       //for

                       //for(한번만 수행할 내용; 조건; 두번째부터 수행할 내용){반복 수행할 내용}

                       for(i=0; i<3; i=i+1) {

                                  System.out.println("Hello Java");

                       }

**java applicationgit hub 에 올리고 내려받기 그리고 업데이트

 

1.    올리기

1)git hub 사이트에서 repository1개 생성하고 url을 복사

 

 

2)Eclipse에서 git perspective->open perspective->other->[git]

3)clone a git repository -를 클릭하고 복사한 URLURL란ㄴ에 입력하고 NECT를 눌러서 마침

=>화면에 REPOSITORY가 생성

복사하면 자동으로 복사가 된다.                 

 

 

4)하면을 다시 자바화면으로 변경

5)업로드 하고 싶은 프로젝트를 선택하고 마우스 오른쪽은 클릭한 후 [TEAM]-[ SHARE PROJECT]를 선택

 

6)대화상자에서 업로드 하고 싶은 REPOSITORY를 선택한다.

현재 프로젝트를 LOCAL에 있는 GIT과 연결한 것임

 

7)프로젝트 GIT HUB사이트에 업로드

COMMIT AND PUSH ->LOCAL 하고 서버

COMMIT->LOCAL에만  

PUSH ..서버에

프로젝트를 선택하고 마우스 오른쪽 을  클릭하면 [TEAM] -[COMMIT]

대화상자에서 변경된 파일들을 아래로 드래그

MESSAGE를 작성하고 COMMIT AND PUSH클릭하면 GIT HUB에 업로드

COOMIT을 누르면 로컬에만 반영

 

 

 

 

 

반응형

'Study > Java' 카테고리의 다른 글

java-6  (0) 2020.09.26
java-5  (0) 2020.09.24
java-4  (0) 2020.09.22
java-3  (0) 2020.09.20
java-1  (0) 2020.09.19
반응형

 

Python IDLE사용

3. 프로그램 구조, 제어문

I. if

“돈이 있으면 택시를 타고, 돈이 없으면 걸어 간다.”

주어진 조건을 판단하여 해당 조건에 맞는 상황을 수행하는데 if문이 쓰임

>>> money = 1

>>> if money:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

 

=>if문의 기본 구조

if 조건문 뒤에는 반드시 콜론(:)이 붙임

조건문을 테스트해서 참이면 if문 바로 다음의 문장(if 블록)들을 수행하고, 조건문이 거짓이면 else문 다음 문장(else 블록)들을 수행하게 됨

블록은 들여쓰기로 해결함 (다른 언어는 { }로 기호 사용) 

else문은 if문 없이 독립적으로 사용할 수 없음

 

=>들여쓰기

if 조건문:

수행할 문장1

수행할 문장2

수행할 문장3

들여쓰기는 공백(Spacebar) 4개나 탭(Tab)을 사용하며, 2가지를 혼용하지 말 것

>>> money = 1

>>> if money:

           print("택시콜")

print("타고")

>>> money = 1

>>> if money:

           print("택시콜")

           print("타고")

                       print("가자")

 

=>조건문이란 무엇인가?

if 조건문에서조건문이란 참과 거짓을 판단하는 문장을 말함

>>> money = 1

>>> if money:

money 1이기 때문에 참이 되어 if문 다음의 문장을 수행함

 

=>비교연산자

조건문에 비교연산자(<, >, ==, !=, >=, <=)를 쓰는 경우가 많음

>>> x= 3

>>> y =2

>>> x>y

>>> x<y

>>> x == y

>>> x != y

만약 3000원 이상의 돈을 가지고 있으면 택시를 타고 그렇지 않으면 걸어 가라.

>>> money = 2000

>>> if money >= 3000:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

 

=> and, or, not

조건을 판단하기 위해 사용하는 연산자로는 and, or, not이 있

and, or, not 조건을 판단하기 위해 사용하는 연산자로는 and, or, not이 있음->논리 연산자

==> or 연산자의 사용법을 알아봄

돈이 3000원 이상 있거나 카드가 있으면 택시를 타고 그렇지 않으면 걸어 가라.

>>> money = 2000

>>> card = 1

>>> if money >= 3000 or card:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

>>> money = 2000

>>> card = 1

>>> if money >= 3000 and card:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

>>> money = 2000

>>> if money >= 3000:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

money = 2000

if money >= 3000:

    print("택시를 타고 가라")

=>x in s, x not in s

다른 프로그래밍 언어에서 볼 수 없는 조건문들을 제공함

in의 뜻이 ‘~안에라는 것을 생각하면 쉽게 이해될 것임

>>> 1 in [1,2,3]

>>> 1 not in [1,2,3]

 

튜플과 문자열에 적용한 예

>>> 'a' in ('a','b','c')

>>> 'j' not in 'python'

 

=>택시 예제에 in을 적용

만약 주머니에 돈이 있으면 택시를 타고, 없으면 걸어가라.

>>> pocket =['paper','cellphone','money']

>>> if 'money' in pocket:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

 

=>조건문에서 아무 일도 하지 않게 설정하고 싶다면?

주머니에 돈이 있으면 가만히 있고 주머니에 돈이 없으면 카드를 꺼내라.

>>> pocket =['paper','cellphone','money']

>>> if 'money' in pocket:

           pass

else:

           print("카드를 꺼내라")

pocket이라는 리스트 안에 money라는 문자열이 있기 때문에 if문 다음 문장 인 pass가 수행되고 아무런 결과값도 보여 주지 않음

#125페이지

#주머니에 카드가 없다면 걸어가로 , 있다면 버스 타라

>>> pocket = ['paper','cellphone','money']

>>> if 'card' in pocket:

           print("버스 타고 가라")

else:

           print("걸어 가라")

 

=> 다양한 조건을 판단하는 elif

주머니에 돈이 있으면 택시를 타고, 주머니에 돈이 없지만 카드가 있으면 택시를 타고, 돈도 없고 카드도 없으면 걸어 가라.

if else만으로 표현

>>> pocket = ['paper', 'cellphone']

>>> card = 1

>>> if 'money' in pocket:

           print("택시를 타고 가라")

else:

           if card:

                       print("택시를 타고 가라")

           else:

                       print("걸어 가라")

 

복잡함을 해결하기 위해 다중 조건 판단을 가능하게 하는 elif 사용

>>> pocket = ['paper', 'cellphone']

>>> card = True #혹은 1

>>> if 'money' in pocket:

           print("택시를 타고 가라")

elif card:

           print("택시를 타고 가라")

else:

           print("걸어 가라")

 

elif는 이전 조건문이 거짓일 때 수행됨

elif는 개수에 제한 없이 사용할 수 있음

=> if, elif, else를 모두 사용할 때의 기본 구조

=> if문을 한 줄로 작성하기

>>> pocket = ['paper', 'money', 'cellphone']

>>> if 'money' in pocket:

           pass

else:

           print("카드를 꺼내라")

수행할 문장이 한 줄일 때 조금 더 간략하게 코드를 작성하는 방법이 있음

 

>>> pocket = ['paper', 'money', 'cellphone']

>>> if 'money' in pocket:pass

else:print("카드를 꺼내라")

if문 다음 수행할 문장을 콜론(:) 뒤에 적어 주었고, else문도 마찬가지임

 

=> 조건부 표현식

>>> score = 70

>>> if score >= 60:

    message = "success"

else:

    message = "failure"

 

   

>>> message

 

조건부 표현식(conditional expression)을 사용하면 간단히 표현할 수 있음

>>> score = 70

>>> message = "success" if score >= 60 else "failure"

>>> message

 

조건부 표현식 정의

조건문이 참인 경우 if 조건문 else 조건문이 거짓인 경우

가독성에 유리하고 한 줄로 작성할 수 있어 활용성이 좋음

 

=>응용예제01. 학점 세분화 프로그램"

점수를 입력받은 후 90점 이상은 A, 80점 이상은 B, 70점 이상은 C, 60점 이상은 D,나머지는 F 로 처리하는 프로그램을 구현해 보자

score = int(input("점수를 입력하세요:"))

if score >= 90:

    grade = "A"

elif score >= 80:

    grade = "B"

elif score >= 70:

    score = "C"

elif score >= 60:

    grade = "D"

else:

    grade = "F"

print(f'{score} {grade}학점입니다.')

=>while로 변경하기 ->계속 이력 가능

while True:

    score = int(input("점수를 입력하세요:"))

    if score >= 90:

        grade = "A"

    elif score >= 80:

        grade = "B"

    elif score >= 70:

        score = "C"

    elif score >= 60:

        grade = "D"

    else:

        grade = "F"

        if score == 0:

            break

    print(f'{score} {grade}학점입니다.')

=>while로 변경하되 주석 print방식을 3가지로 확인하기

while True:

    score = int(input("점수를 입력하세요:"))

    if score >= 90:

        grade = "A"

    elif score >= 80:

        grade = "B"

    elif score >= 70:

        score = "C"

    elif score >= 60:

        grade = "D"

    else:

        grade = "F"

        if score == 0:

            break

    print("%d점은 %c학점입니다." % (score,grade))

    print(f'{score} {grade}학점입니다.')

    print("{0}점은 {1}학점입니다.".format(score,grade))

 

II. while

while문의 기본 구조

반복해서 문장을 수행해야 할 경우 while문을 사용함

while문의 기본구조

while문은 조건문이 참인 동안에 while문 아래에 속하는 문장들이 반복해서 수행됨

: ‘열 번 찍어 안 넘어가는 나무 없다는 속담을 while문으로 만든 예

>>> treeHit = 0

>>> while treeHit < 10:

           treeHit += 1

           print("나무를 %d번 찍었습니다." % treeHit)

           if treeHit == 10:

                       print("나무 넘어갑니다.")

 

=> while문이 반복되는 과정을 순서대로 정리한 표

 

 

: treeHit 1일 경우 10번까지 찍기

방안 1:

>>> treeHit = 1

>>> while treeHit <11:

    print("나무를 %d번 찍었습니다." % treeHit)

    treeHit += 1

    if treeHit == 11:

        print("나무 넘어갑니다.")

방안 2:

>>> treeHit = 1

>>> while treeHit < 11:

    print("나무를 %d번 찍었습니다." % treeHit)

    if treeHit == 10:

        print("나무 넘어갑니다.")

    treeHit += 1

방안 2가 더 좋다. 마지막에 값을 추가하는 게 메모리 측면에서 더 좋다.

 

=>while문 만들기

여러 가지 선택지 중 하나를 선택해서 입력 받는 예제

여러 줄의 문자열을 변수에 대입하기 위해 큰따옴표 3(“””)를 이용함

>>> prompt = """

1. Add

2. Del

3. 3.List

4. Quit

Enter number: """

>>> number = 0

>>> while number != 4:

    print(prompt)

    number = int(input())

 

# 결과 화면처럼 사용자가 4라는 값을 입력하지 않으면 계속해서 prompt를 출력함

1. Add

2. Del

3. 3.List

4. Quit

Enter number:

4

 

=> while문 강제로 빠져나가기 (break)

while문은 조건문이 참인 동안 계속해서 while문 안의 내용을 반복적으로 수행하지만 강제로 while문을 빠져나가고 싶을 때 사용하는 것이 break문임

커피 자판기 이야기를 break문으로 만든 예:

>>> coffee = 10

>>> money = 300

>>> while money:

    print("돈을 받았으니 커피를 줍니다.")

    coffee = coffee -1

    print("남의 커피의 양은 %d개입니다."  % coffee)

    if coffee == 0:

        print("커피가 다 떨어졌습니다. 판매를 중지합니다.")

        break

 

=>실제 자판기 작동 과정을 만든 예

coffee = 10

while True:

    money = int(input("돈을 넣어 주세요:"))

    if money == 300:

        print("커피를 줍니다.")

        coffee -= 1

    elif money > 300:

        print("거스름돈 %d를 주고 커피를 줍니다."  % (money - 300))

        coffee -= 1

    else:

        print("돈을 다시 돌려주고 커피를 주지 않습니다.")

        print("남은 커피의 양은 %d개입니다." % coffee)

 

    if coffee == 0:

        print("커피가 다 떨어졌습니다. 판매를 중지합니다.")

        break

=>개선 버전

# PPT_3.2_while_coffee.py

coffee = 10

while True:

    #money,cnt = input("돈과 개수를 넣어 주세요:").split()

    money = int(input("돈을 넣어 주세요:"))

    if money == 300:

        print("커피를 줍니다.")

        coffee -= 1

    elif money > 300:

        #print(money%300)

        #print(money//300)

        maxCnt = money//300

        if maxCnt > coffee:

            maxCnt = coffee

        if maxCnt > 1:

            cnt = int(input(f'%d잔 이하 가능합니다.몇잔 하시겠습니까?' % maxCnt))

        else:

            cnt = maxCnt

        print("거스롬돈 %d를 주고 커피를 줍니다." % (money - 300*cnt ))

        coffee -= cnt

           

    else:

        print("돈을 다시 돌려주고 커피를 주지 않습니다.")

        print("남은 커피의 양은 %d개입니다." % coffee)

 

    if coffee == 0:

        print("커피가 다 떨어졌습니다. 판매를 중지합니다.")

        break   

PPT_3.2_while_coffee.py을 저장한 후 프로그램을 직접 실행 함

입력란에 여러 숫자를 입력해 보면서 결과를 확인함

 

 

논리연산자

dict

 

if -> message = "success" if score >= 60 else "failure"

 

message = "A" if score >= 60 "B" elif score >= 50 else "failure"#SyntaxError: invalid syntax

#실행문이 한줄일 경우 조건문 표현식 오류

 

while

조건문이 안 맞을때 빠져나갈수 있지만

break도 가능하다.

continue는 만나면 처음으로 시작한다. 다음의 것 실행안한다.

 

while 1->참이기 때문에

 

=>while문의 맨 처음으로 돌아가기 (continue)

while문을 빠져나가지 않고, while문의 맨 처음(조건문)으로 다시 돌아가게 만들고 싶을 때 사용하는 것이 continue문임

>>> a = 0

>>> while a < 10:

           a += 1

           if a % 2 == 0:continue

           print(a)

a가 짝수이면 continue 문장을 수행하고, while문의 맨 처음으로 돌아감

교재 136페이지

1부터 10까지의 숫자 중에서 3의 배수를 뺀 나머지 값을 출력해 보자

 

 

=>무한 루프

무한 루프(Loop)란 무한히 반복한다는 의미임

while문의 조건문이 True이면 항상 참이므로, while문 안에 있는 문장들은 무한하게 수행됨

무한 루프의 예:

>>> while True:

           print("CTRL+C를 눌러야 while문을 빠져나갈 수 있습니다.")

 

응용예제01. 로그인 프로그램:

아이디와 패스워드를 입력하였을 때, 등록된 정보와 비교하여 로그인을 승인하는 프로그램을 구현해 보자.

응용예제:

myId = "python"

myPsswd = "1234"

count = 0

 

while True:

    #usrId = input("아이디를 입력하세요.")

    #usrPwd = input("패스워드를 입력하세요.")

    if count >= 5 :

        print("시도 횟수 초과하였습니다.")

        break

    userId, userPwd = input("아이디와 패스워드를 ,로 구분하여 입력하세요").split()

   

    if userId == myId and myPsswd == userPwd:

        print("정상적으로 로그인에 성공했습니다.")

        break

    elif userId != myId and myPsswd == userPwd:

        print("아이디가 틀렸습니다.\n")

    elif userId == myId and myPsswd != userPwd:

        print("패스워드가 틀렸습니다.\n")

    else:

        print("아이디와 패스워드가 틀렸습니다.\n")

    count+=1 #최대한 공간을 줄이기 위해서 마지막에 연다.

2. 별 모양 출력하기

사용자가 숫자를 여러 개 입력하면 별 모양(‘\u2605)을 입력한 숫자만큼 출력하는 프로그램이다.

 

실습

i = 0

while True:

    i += 1

    if i>5:break

    print("\u2605"*i+"\n")

 

#for

#1.

input1 = input("1.숫자를 여러 개 입력하세요 :")

for i in input1:

    print("\u2605"*int(i))

print("="*50)

 

#while

#2.

cnt = 0

input1 = input("2.숫자를 여러 개 입력하세요 :")

while cnt < len(input1):

    print("\u2605"*int(input1[cnt]))

    cnt+=1

print("="*50)

 

#3.

cnt = 0

input1 = input("3.숫자를 여러 개 입력하세요 :")

while input1[cnt:]:

    print("\u2605"*int(input1[cnt]))

    cnt+=1

print("="*50)

 

 

 

 

 

 

#4.

cnt = 0

input1 = input("4.숫자를 여러 개 입력하세요 :")

while input1[cnt]:

    print("\u2605"*int(input1[cnt]))

    cnt+=1

    if len(input1) == cnt:

        break

print("="*50)

 

#5.

input1 = input("5.숫자를 여러 개 입력하세요 :")

for i in range(len(input1)):

    print("\u2605"*int(input1[i]))

print("="*50)

 

#6.

#list내포는 result리스트로 만든다.

input1 = input("6.숫자를 여러 개 입력하세요 :")

result =["\u2605"*int(n) for n in input1]

print(result)

 

III. for

for문의 기본 구조

리스트나 튜플, 문자열의 첫 번째 요소부터 마지막 요소까지 차례로 변수에 대입되어 수행할 문장들이 수행됨

#변수를 i,j,k를 많이 사용

1. 전형적인 for

>>> test_list = ['one','two','three'] #list 형 자료형

>>> for i in test_list:

    print(i)

 

2. 다양한 for문의 사용

>>> a = [(1,2),(3,4),(5,6)]

>>> for (first,last) in a:

    print(first+last)

 

3. for문의 응용

5명의 학생이 시험을 보았는데 시험 점수가 60점이 넘으면 합격이고 그렇지 않으면 불합격이다. 합격인지 불합격인지 결과를 보여주시오.

우선 학생 5명의 시험 점수를 리스트로 표현함

>>> marks = [90, 25, 67, 45, 80]

 

#marks1.py

marks = [90, 25, 67, 45, 80]

number = 0

for mark in marks:

    number += 1

    if mark >= 60:

        print("%d번 학생은 합격입니다." % number)

    else:

        print("%d번 학생은 불합격입니다." % number)

점수 출력 및 소수점 처리

marks = [95,25,67,45,80]

number = 0

for mark in marks:

    number = number +1

    if mark >= 60:

        print("%d번 학생은 %.2f이여서 합격입니다." % (number,mark))

    else:

        print("%d번 학생은 %.2f이여서 불합격입니다." % (number,mark))

 

=> for문과 continue

for문 안의 문장을 수행하는 도중에 continue문을 만나면 for문의 처음으로 돌아감

#marks2.py

marks = [90, 25, 67, 45, 80]

number = 0

for mark in marks:

    number += 1

    if mark < 60 : continue

    print("%d번 학생 축하합니다. 합격입니다." % number)

 

=>for와 함께 자주 사용하는 range함수

>>> a = range(10)

>>> a   <--0, 1, 2, 3, 4, 5, 6, 7, 8, 9

>>> a = range(1,11)

>>> a   <--1, 2, 3, 4, 5, 6, 7, 8, 9, 10

시작 숫자와 끝 숫자를 지정하려면 range(시작 숫자, 끝 숫자) 형태를 사용하는데, 이때 끝 숫자는 포함되지 않음

 

==>range 함수의 예시 살펴보기

for range 함수를 이용하여 1부터 10까지 더하는 것을 구현함

 

>>> add = 0

>>> for i in range(1,11):

    add += i

 

   

>>> add

 

#marks3.py

marks = [90, 25, 67, 45, 80]

for number in range(len(marks)):

    if marks[number] < 60:continue

    print("%d번 학생 축하합니다. 합격입니다. " % (number + 1))

 

 

 

==> for range를 사용한 구구단

>>> for i in range(2,10):

    for j in range(1,10):

        print(i * j , end = " ")

    print('')

 

for i in range(1,10):

    for j in range(1,10):

        print(i*j, end=" ")#출력할 때 다음 줄로 넘기지 않고 그 줄에 계속 출력함

    print(' ')

 

==>실제 수자로 보고싶다.

>>> a= list(range(len(marks)))

>>> a

 

=> 리스트 내포 사용하기

리스트 안에 for문을 포함하는 리스트 내포(List comprehension)를 사용하면 편리함

>>> a = [1,2,3,4]

>>> result=[]

>>> for num in a:

    result.append(num*3)

 

>>> result

리스트 내포를 사용하면 간단히 해결할 수 있음

>>> a = [1, 2, 3, 4]

>>> result = [num * 3 for num in a]

>>> result

>>> [num * 3 for num in a]  ->거짓이면 대입자체가 안되서

 

=> 짝수에만 3을 곱하여 담고 싶다면 리스트 내포 안에 ‘if 조건을 사용함

>>> a = [1,2,3,4]

>>> result = [num * 3 for num in a if num % 2 ==0]

>>> result

 

***리스트 내포의 일반적인 문법

[표현식 for 항목 in 반복 가능 객체 if 조건]

***for문을 여러 개 사용할 때의 문법

 

=> 구구단의 모든 결과를 리스트에 담고 싶다면 리스트 내포를 사용하여 구현함

>>> result = [x*y for x in range(2,10)

                     for y in range(1,10)]

>>> result

 

>>> result = [x*y*z for x in range(2,10)

                for y in range(1,10)

                for z in range(1,10)]

>>> result

 

==>for문을 사용해 1부터 100까지 출력하기

>>> for i in range(100):

    print(i+1,end=" ")

 

==>while문으로 바꾸기

>>> i = 0

>>> while i < 100:

    i+=1

    print(i,end=" ")

 

==>평균점수 구하기

방안 1:

>>> scores = [70,60,55,75,95,90,80,80,85,100]

>>> total = 0

>>> for score in scores:

               total += score

 

              

>>> total/ len(scores)

 

방안 2:

>>> scores = [70,60,55,75,95,90,80,80,85,100]

>>> total = 0

>>> for i in range(len(scores)):

               total += scores[i]

 

              

>>> total/ len(scores)

 

>>> numbers = [1,2,3,4,5]

>>> result = []

>>> for n in numbers:

    if n%2 != 0 :

        result.append(n*2)

 

       

>>> result

 

>>> numbers = [1,2,3,4,5]

>>> result = []

>>> result = [num* 2 for num in numbers if num%2 != 0]

>>> result

 

treeHit=0

for i in range(10):

    treeHit =  i+1

    print("나무를 %d를 찍었습니다" % treeHit)

print("나무 넘어갑니다.")

 

>>> a = [(1,2),(3,4),(5,6)]

>>> for(first,last) in a:

    print(first+last)

 

연습문제 146페이지

1.

>>> a = "Life is too short, you need python"

>>> if "wife" in a: print("wife")

elif "python" in a and "you" not in a: print("python")

elif "shirt" in a: print("shirt")

elif "need" in a: print("need")

else: print("none")

 

2.

>>> result = 0

>>> i = 1

>>> while i <= 1000:

    if i % 3 == 0:

        result += i

    i += 1

 

   

>>> result

 

3.

>>> i = 0

>>> while True:

    i+= 1

    if i > 5 :break

    print("*" * i)

 

4.

>>> for i in range(1,101):

    print(i)

 

5.

A= [70,60,55,75,95,90,80,85,85,100]

total = 0

for score in A:

    total += score

average = total/len(A)

print(average)

 

6.

numbers = [1,2,3,4,5]

result = []

for n in numbers:

    if n % 2 == 1:

        result.append(n*2)

   

numbers = [1,2,3,4,5]

result = [n*2 for n in numbers if n % 2 == 1]

print(result)

반응형

'Study > Python' 카테고리의 다른 글

python-6  (0) 2020.09.10
python-5  (0) 2020.09.09
python-4  (0) 2020.09.08
python-2  (0) 2020.09.07
python-1  (0) 2020.09.06

+ Recent posts