반응형

인수 (factor) :

문자형 데이터를 저장하는 새로운 방식의 프레임워크를 제공한다.

수준(level):

특정한 값만을 포함하는 특별한 벡터이다.

 

factor() 함수의 levels옵션을 이용해 새로운 수준값을 인수에 추가해야 한다.

 

다차원 배열:

일반 백터를 생성 한 후 차원들을 부여해 만들어진다.

array() 

일반 벡터는 1차원 배열로 

dim() 다차원 배열로 바꾸려면

 

행렬(matrix)은 2차원 배열의 특별한 경우로 주로 matrix()함수 이용

nrow

ncol

cbind() rbind()

 

dimnames()

rownames()

colnames()

 

is.array()

is.matrix()

 

데이터프레임

data.frame()

as.data.frame()

stringAsFactors 옵션

stringAsFactors= FALSE  지정하지 않으면 문자열을 포함한 열들을 인수로 변환해 저장한다.

transform()함수를 사용해 문자형으로 저장하고 싶은 열들을 지정하려면 as.character()또는 as.factor()함수를 사용하면 된다.

 

 

R로 데이터 로드하기

install.packages()

library()또는 require()

getwd() 파일 입출력의 기본이 될 위치를 알 수 있다.

setwd() 위치 변동

 

데이터프레임 저장하기

write.table() 함수

write.csv()

 

기본도표 및 ggplot2패키지

히스트그램 과 선점도

hist()

plot()

curve()함수를 사용하면 단변량 수학 함수의 그래프를 from과 to값으로 지정된 구간에서 작성할 수 있다.

expr인수는 수치 벡터 또는 수치 벡터를 리턴하는 함수를 출력물로 지정할 수 있게 해 준다.

pie()함수로 원형 차트를 그릴 수 있다.

boxplot()함수를 이용하면 상자그림을 그릴 수 있다.

 

 

제어문

for(i in vector){commands}

 

apply()함수를 행렬 또는 배열에 대해 행 방향이나 열 방향으로 , 또는 양 방향으로 반복적으로 함수를 적용할 수 있게 해주는데 , for()루프에 대한 좋은 대안이 된다.

apply()  두번째 인수인 MARGIN의 값이 1인 경우는 행 방향으로 , 2인 경우는 열 방향으로 , c(1,2) 인 경우에는 양 방향으로 지정된 함수를 반복 적용한다.

  FUN: 마지막 인수 함수 mean()이나 function(x) x+3

 

if문

if(condition){commands}

else if(condition){commands}

else{commands}

 

while()루프

while(condition){commands}

 

repeat{}, break문

repeat{commands} while와 유사한데 , break문을 포함시키지 않으면 계속 코드를 문한히 반복 실행하게 된다.

 

함수 function

특정 작업을 수행하고 그 결과를 출력하거나 객체 형태로 리턴해 주는 짧은 코드들을 의미한다.

help()함수로 함수 내용을 확인한다.

??mean

na.rm = TRUE

반응형

' > 빅데이터 통계분석과 R' 카테고리의 다른 글

04  (0) 2021.01.01
03  (0) 2020.12.30
01  (0) 2020.12.20
반응형

**제어문

1.for

=>반복문

for(처음 한번만 식 ; 비교식;두번쨰 수행하는 식){

           반복내용;

}

=>실행방법 : 처음 수행되는 식을 수행하고 비교식의 값이 false가 아니면 {}안의 내용을 수행

수행을 완료하면 두번쨰 부터 수행하는 식을 수행하고 비교식의 값이 false가 아니면{}안의  내용을 수행

두번째 수행하는 식을 수행하고 비교식이 false가 될때 까지 반복

 

=>각각의 식이 생략 가능

for(var i =0; i< 10; i++){

                       document.write("<p>"+"Hello JavaScript"+"</p>");

           }

 

2.while

=>반복문

while(boolean 결과가 나오는 변수나 연산식 또는 상수){

           ()의 내용이 false가 아니면 수행될 내용;

}

           var i = 0;

           while(i<10){

                       document.write("<p>"+"Hello JavaScript"+"</p>");

                       i++;

           }

 

3.do ~ while

do{

  반복할 내용

}while(boolean결과가 나오는 변수나 연산식 또는 상수);

=>()안의 내용이 false가 될떄 까지 {}안의 내용을 반복 수행

=>한 번은 반복 내용을 수행

           //do ~ while은 반드시 한번은 수행한다라는 의미를 전달할 목적으로 많이 사용

           var i =0;

           do{

                       document.write("<p>"+"Hello JavaScript"+"</p>");

                       i++;

           }while(i<10); //()

 

 

4.for -in

=>for each라고도 함

=>데이터의 모임을 순회하기 위한 제어문

for 임시변수 in 데이터의 모임{

           모임을 순회하면서 수행할 내용

}

=>배열의 경우는 임시변수에 인덱스가 대입됩니다.

=>객체의 경우는 임시변수에 속성이 대입됩니다.

           var ar = ["JavaScript","TypeScript"];

           //배열을 순회

           //temp가 인덱스가 대입됩니다.

           for(var temp in ar){

                       document.write("<p>"+temp+"</p>");

           }

 

           var ar = ["JavaScript","TypeScript"];

           //배열을 순회

           //temp가 인덱스가 대입됩니다.

           for(var temp in ar){

                       document.write("<p>"+ar[temp]+"</p>");

           }

 

 

           //javascript에서느느 객체의 속성을 잘 알려고 할 때

           //location 객체의 모든 속성을 확인

           //객체를 for에 대입하면 모든 속성을 임시변수에 대입

           //location이 가지고 있는 것이 나온다.

           for(var attr in location){

                       document.write("<p>"+attr+"</p>");

           }

 

5.제어문의 중첩

=>제어문 안에 다른 제어문을 작성하는 것이 가능

=>먼저 시작한 제어문이 나중에 끝나야 합니다.

먼저 시작한 제어문을 시작하면 포함된 제어문을 전부 수행하고 먼저 시작한 제어문의 다음으로 넘겨갑니다.

 

0 ***** 0-4

1 ****  0-3

2 ***   0-2

3 **    0-1

4 *     0-0

 

라인은 0부터 4까지

라인 안에서 별은 0부터 시작

4->3->2->1->0 :-1씩 증감

-1* 라인 +4

 

           for(var line = 0 ;  line <5 ;line ++){

                       for(var i = 0; i < 5-line ; i++){

                                  document.write("*");

                       }

                       document.write("<br/>");

           }

 

6.break

=>반복문이나 switch 안에 사용되서 반복문이나 switch구문을 종료하는 역할

 

 

7.continue

=>반복문에 사용되서 다음 반복으로 넘어가는 역할

 

8.breakcontinue가 반복문에 사용될 때는 대부분 if와 함께 사용

반복문이 중첩된 경우 breakcontinue는 가장 가까운 곳에서 만들어진 반복문을 종료하거나 다음 반복으로 넘어갑니다.

 

9.return

=>함수 안에 사용되서 함수의 종료(호출한 곳으로 리턴)하고 데이터를 넘겨주는 제어문

=>함수안에서 if구문과 함께 return이 작성되면  return이후에  else를 하지 않더라도 else구문이 됩니다.

 

if(조건(){

           return;

}

내용 //else를 작성하지 않더라도 내용은 else에 있는 것과 동일하게 동작

 

10.제어문 작성시 주의사항

=>(조건식);에 주의해야 합니다.

do ~while을 제외하고는 (조건식)뒤에 ;을 할 필요가 없습니다.

;을 하게되면 제어문이 없는 것과 마찬가지가 됩니다.

 

for(var i =0; i< 10; i++{

           반복내용;

}

반복내용을 1번만 수행합니다.

 

=>제어문 다음에 수행할 내용이 한줄이면 {}를 생략하는 것이 가능

반복문이 중첩되는 경우에 {}를 생략하면 코드를 읽는 것이 어려워질 수 있기 때문에 생략하지 않는 경우가 더 많습니다.

제어문을 중첩을 할 떄는 들여쓰기를 적절히 이용해서 블록을 정확하게 만들어주는 것이 가독성을 높이는 방법 중의 하나입니다.

           //1부터 10까지 출력 - 3의 배수가 되면 종료

           for(var i = 1; i <11; i++){

                       //제어문에서 수행 내용이 1줄이면 {} 생략 가능

                       if(i % 3 ==0)break;

                       document.write(i+"<br/>");

           }

          

          

           //1부터 10까지 출력 - 3의 배수인 경우는 수행하지 않음

           //continue는 특정 조건을 만족하는 경우 수행하지 않도록 할 때 사용

           for(var i = 1; i <11; i++){

                       //제어문에서 수행 내용이 1줄이면 {} 생략 가능

                       if(i % 3 ==0)continue;

                       document.write(i+"<br/>");

           }

 

**Function(함수)

1.함수

=>자주 사용되는 또는 독립적으로 수행하고자 하는 내용을 묶어서 하나의 이름으로 설정해 놓은 것

=>함수 부터가 작업의 단위

=>함수부터가 작업의 단위이면 독립적인 메모리를 할당 받을 수 있는 단위

함수 안에서 만들어진 변수는 함수 내에서만 사용이 가능

 

 

2.함수의 종류

1) 사용자 정의 함수: 개발자가 만든 함수

 

2)Maker Function : 제공되는 함수 - 자바스크립트에서는 window 객체의 내장함수

자바스크립트에서는 window객체의 속성이나 함수는 window.을 생략하고 호출이 가능하기 때문

 

 

3.함수의 정의

=>자바스크립트에서는 함수도 하나의 자료형(함수가 일급 객체 - python, c에서도 동일)

1)

var 함수명 = function(매개변수 나열){

           함수 내용;

           return;

}

 

2)

function 함수명 (매개변수 나열){

           함수 내용;

           return;

}

=>예전에는 2번째 방법으로 함수를 만들었는데 최근에는 1번째 방법을 권장

 

           var func = function(){

                       //어떤 변수나 연산식의 결과를 확인하고자 할 때 콘솔에 출력해봅니다.

                       console.log("함수");

           }

          

           func()

           //()을 하지 않고 함수를 호출하면 함수가 저장된 곳의 위치나 함수의 내용

           document.write(func)

 

4.함수 호출

함수명(매개변수)

=>함수명만 입력하면 이것은 함수의 참조를 리턴합니다.

함수의 내용이 됩니다.

 

5.매개변수(argument)

=>함수를 호출 할 때 넘겨주는 데이터

1)매개변수 를 만들 때 매개변수의 자료형은 개재하지 않습니다.

fuction(a){}

 

2)함수를 호출할 때 매개변수 대입을 생략할 수 있습니다.

매개변수가 있는데 데이터를 대입하지 않으면 그 매개변수는 undefined가 됩니다.

 

3)함수를 정의할 때 매개변수를 기재하지 않았더라도 함수 내부에서 매개변수를 사용할 수 있느데 이 때는 매개변수들이 arguments라는 뱅열로 만들어집니다.

           //매개변수가 2개인 함수

           var func1= function(a,b){

                       console.log(a);

                       console.log(b);

           }

           //2개의 매개변수를 대입해서 함수를 호출

           func1(100,200);

           //1개의 매개변수만 대입 -대입하지 않은 b undefined

           func1(300);

          

           //매개변수가 없지만 함수내에서 arguments라는 배열로 매개변수를 받릉 수 있습니다.

           //자바스크립트나 파이썬의 함수들은 도큐먼트를 읽고 사용하는 것이 좋습니다.

           var func2= function(){

                       for (var i in arguments){

                                  console.log(arguments[i])

                       }

           }

           func2(200,900);

 

6.return

=>함수를 호출한 곳으로 돌아가는 제어문

=>return 데이터 형태로 데이테를 가지고 return할 수 있습니다.

=>return 할 데이터가 없다면  return은 생략 가능

 

 

 

7.내부함수

=>함수 안에 함수를 만드는 것이 가능

 

8.closure

=>함수가 함수를 리턴하는 경우

=>함수 내의 데이터를 계속 사용하기 위해서

=>함수 내에서 만든 데이터는 함수의 수행이 종료되면 소멸됩니다.

함수가 리턴한 데이터도 함수의 수행이 종료되면 소멸

           //함수가 함수를 리턴헤서 내부의 데이터를 조작할 수 있도록 하는 것을 closure라고 합니다.

           var f = function(){

                       var inner = 0;

                       return function(){

                                  inner = inner +1;

                                  document.write("<br/>"+inner );

                       }

           }

           //Uncaught ReferenceError: inner is not defined

           //document.write(inner);

           var k = f(); //f를 호출한 결과가 k에 저장 -k도 함수가 됩니다.

 

 

9. 내장 함수

=>자바스크립트가 제공하는 함수

=>자바스크립트 안의 window객체가 제공하는 함수

=>자바스크립트에서는 window객체의 속성이나 함수는 window.없이 사용이 가능

1)alert

=>매개변수로 대입된 데이터를 메시지 박스를 이용해서 출력해주는 함수

=>별도의 대화상자를 출력하기 때문에 팝업창이 차단되면 대화상자를 출력하지 못합니다.

           //브라우저 마다 다르다.

           alert("메시지 대화상자");

 

2)confirm

=>메시지와 2개의 버튼을 출력하는 함수

=>확인과 취소 버튼을 만들어서 출력해주는데 확인을 누르면 true를 리턴하고 취소를 누르면 false를 리턴

           var result = confirm("정말 삭제하시겠습니까 ?");

           document.write("<br/>"+result );

 

3)prompt

=>한 줄 입력상자를 포함하는 대화상자

prompt(메시지, 기본값)의 형태로 사용하면 확인을  누르면 입력한 데이터를 리턴하고 취소를 누르면 null을 리턴

           //입력하지 않고 확인을 누르면 ""이 리턴됩니다.

           var result = prompt("이름을 입력하세요?");

           document.write("<br/>"+result );

 

4)eval ->이것으로 되여있으면 책이 오래됬다.

=>태그에 만들어진 name을 가지고 객체를 만들어주는 함수

document.폼이름.객체이름 형식으로 입력해서 사용

최근에는 document.getElementById(id) 의 형태로 객체로 만들어서 사용하는 것을 권장합니다.

 

5)인코딩 및 디코딩 함수

=>encoding: 프로그래밍언어에 입력된 문자열을 메모리에 저장되는 형태로 변경하는 것

=>decoding:메모리에 저장된 형태를 프로그래밍 언어나ㅏ 사람이 알아볼 수 있는 형태로 변경하는 것

=>url처럼 컴퓨터가 인식해야 하는 데이터는 영문과 숫자 이외의 글자가 있는 경우 인코딩해서 전달해야 한고 그 결과를 보고자 할 때는 디코딩해서 확인해야 합니다.

 

 

=>escape();일부 특수문자를 제외하고 전부 인코딩

=>encodingURI(); URL에 사용되는 특수문자를 제외하고 인코딩

=>encodingURIComponent:영문과 숫자를 제외하고는 모두 인코딩

=>대부분의 경우는 encodeURI를 사용합니다.

 

=>디코딩 해주는 함수는 unescape(), decodeURI(), decodeURIComponent()l

=>url을 인코딩 할 때는 파라미터 부분만 인코딩 해야 합니다.

프로토콜://도메인또는ip/파일경로?파라미터이름=&파라미터이름=..

           var url ="http://www.daum.net?name=test&addr=서울시양천구목동";

           document.write("<br/>"+escape(url) );

           //이 메소드는 파라미터만 인코딩합니다.

           //주소부분은 인코딩하지 않습니다.

           //URL은 파라미터 부분만 인코딩해야 합니다.

           document.write("<br/>"+encodeURI(url) ); //파라미터만 인코딩한다.

           document.write("<br/>"+encodeURIComponent(url) );

 

 

6)parseIntparseFloat

=>무자열을 정수나 실수로 변경해주는 함수

=>GUI프로그래밍에서는 문자열을 입력을 받을 수 있습니다.

입력받은 문자열을 숫자로 변경하는 중요한 작업 중의 하나입니다.

=>parseInt와 같은 메이커 함수를 이용해도 되고 직접 구현해보는 것도 중요합니다.

 

rose ->anagram

rose , oser, sero, eros =>비슷한 것 찾기

연결서열 찾는 것 해보기

 

**Object

=>객체라고 할 때는 프로그램에서 실체가 있는 모든 것

=>인스턴스는 클래스를 기반으로 만들어진 객체

인스턴스는 클래스만 있는 것에서 사용한다.

int a = 10;

String str = new String("HI");

 

a는 클래스로부터 만들어진것이 아니라서 객체라는 표현은 사용하지만 인스턴스라고 하지는 않습니다.

str은 객체라고 하기도 하고 인스턴스라고 하기도 합니다.

 

 

1.종류

1)사용자 정의 객체: 사용자가 만든 객체

2)BOM: (Browser Object Model): 브라우저가 처음부터 제공하는 객체

=>이미 만들어진 객체를 바로 사용

=>이름이 이미 결정되어 있음

 

 

3)DOM:(Document Object Meodel): 브라우저가 제공하는 생성자나 클래스를 이용해서 개발자가 만든 객체로 body태그 안에 있는 태그들

메모리 상에서는 트리 형태로 펼쳐져 있습니다.

=>body태그 안에 만들어 둔 태그를 찾아서 사용

=>이름은 개발자가 직접 생성

 

 

2.사용자 정의 객체

var 변수명 ={속성이름 : , 속성이름 : ...}

=>자바스크립트나 파이썬은 사용자 정의 객체가 Map 형식 -나중에 속성을 추가하거나 삭제하는 것이 가능

 

1)객체가 자신의 속성에 접근

객체["속성"]또는 객체, 속성으로 접근 가능

 

2)속성의 값으로 함수를 대입하는 것도 가능

 

           //속성이름은 문자열로 만들어져야 하기 때문에 ""를 생략해도 됩니다.

           //자바스크립트나 파이썬에서는 함수 안에서 자신의 속성을 호출할 때 this를 붙여야 합니다.

           var obj = {nanme:"test" ,age : 50 , disp:function(){document.write(name + ":" + age);} } ;

 

           //속성이름은 문자열로 만들어져야 하기 때문에 ""를 생략해도 됩니다.

           //자바스크립트나 파이썬에서는 함수 안에서 자신의 속성을 호출할 때 this를 붙여야 합니다.

           //python에서는 this라는 이름을 개발자가 정할수 있습니다.

           //this가 없어면  function안에서 찾는다.

           var obj = {name:"test" ,age : 50 , disp:function(){document.write(this.name + ":" + this.age);} } ;

           obj.disp();//함수 호출

           document.write("<br/>"+obj.name+" :" +obj["age"]);

 

3)for-in 을 이용하면 객체의 모든 속성을 순회할 수 있습니다.

 

4)속성이름 in객체를 이용하면 속서이 객체에 존재하면 true없으면 false

=>자바스크립트에서는 이 구문을 많이 사용하는데 BOM,DOM처럼 브라우저가 제공하는 객체들은 브라우저마다 소유한 속성이 달라서 어떤 속성이 있는지 확인해서 속성을 호출해야 하는 경우가 종종 있기 때문입니다.

=>IE와 다른 브라우저를 구분해서 동작을 수행하기 위해서 입니다.

           //name은 존재하는 속성이라서 true address는 없는 속성이라서 false

           document.write("<br/>" +( "name" in obj));

           document.write("<br/>" +( "address" in obj));

 

5)with

=>with(객체이름){}을 하게 되면 {}안에서는 객체이름.을 생략하고 속성 사용이 가능합니다.

이렇게 하게되면 속성이 window객체에 있는 것인지 객체 안에 속한 것인지 혼동이 올 수 있습니다.

 

 

6)속성 제거 및 구가

객체이름["속성이름"] = ;

속성이 존재하면 수정이지만 없으면 생성입니다.

 

delete(객체이름["속성이름"]) 을 이용하면 속성 제거

 

 

7).생성자 함수

=>자바스크립트는 클래스 개념이 없습니다

=>자바스크립트에서는 클래스는 없지만 생성자의 개념은 존재해서 동일한 모양의 여러 개의 객체를 만들고자 할 때 생성자를 이용합니다.

생성자 안에서 this.속성을 만들면 이 속성이 객체의 속성이 됩니다.

this.을 붙이지 않으면 지역변수가 됩니다.

this를 붙이는 가 아닌가에 따라서 생성자가 결정된다.

=>생성자 함수의 이름 시작은 대문자로 하는 것이 관례

 

           //생성자 함수 -this를 이용해서 name, age, disp.라는 속성을 생성

           var Person = function(name, age){

                       this.name = name;

                       this.age = age;

                       this.disp = function(){

                                  document.write(this.name +":" +this.age);

                       }

           }

           //자바스크립트는 클래스의 개념이 없어서 객체 지향 언어라는 표현을 사용하지 않고

           //객체 기반 언어라는 표현을 사용합니다.

           //최근에는 자바스크립트에 객체 지향의 개념을 도입한 TypeScrypt가 등장했습니다.

           //생성자를 이용한 객체 생성

           var person1 = new Person("이순신" , 80);

           person1.disp();

           person1.address ="서울시 양천구 목동"; //추가

           delete(person1.age);//지우기

           person1.disp();

           //map구조이기 떄문에 추가도 삭제도 가능하다.

 

 

3.일반 내장 객체

=>자바스크립트의 내장 객체는 http://www.w3schools.com/jsref/default.asp이나

http://devdocs.io/javascript/에서 확인 가능

dom은 우리가 만든것이 dom이다.

 

1)Object객체

=>자바스크립트의 최상위 객체

=>다른 모든 객체들이 가져야 하는 공통 속성을 소유

=>사용자 정의 객체도 Object객체의 하위 객체입니다

=>toString(): 객체를 문자열로 리턴해주는 함수

이 함수는 출력하는 함수에 객체를 매개변수로 대입하면 자동으로 호출

=>Object.prototype.속성이름 = 값을 추가하면 모든 자바스크립트 객체에 속성이 추가가 됩니다.

 

2)Number객체

=>숫자 자료형 객체

 

3)String  객체

=>문자열 객체

=>다른 언어가 가진 메소드들을 대부분 소유

=>length가 함수가 아니고 속성

 

i는 출발점

i  j

0  + 0,1,2,3

1  + 0,1,2,3

2  + 0,1,2,3

3  + 0,1,2,3

=>word.charAt((i+j)%word.length) 원래 자리로 돌아간다.

 

           var word ="rose";

          

           //각각의 글자를 하나씩 출력

           for(var i = 0; i <word.length; i++){

                       for(var j = 0; j <word.length; j++){

                                  document.write(word.charAt((i+j)%word.length));

                       }

                       document.write("<br/>")

           }

      

   

 

4)Math

=>JavaMath 객체와 동일

=>객체를 만들지 않고 Math.속성 또는 메소드()로 사용

=>random(): 0.0 ~ 1.0 사이의 랜덤한 실수 리턴

=>PI, E라는 속성을 이용해서 파이값과 자연로그 값을 사용

           var ar = ["C","Java" ,"Python" ,"JavaScript"];

           //배열 내의 데이터를 랜덤하게 추출

           //Math.random()이면 0.0 ~ 1.0 사이의 랜덤한 실수

           //정수로 변환 : parseInt또는 Math.round()반올림

           //배열의 데이터 개수는 length속성

          

           //random숫자에 일정한 값을 곱해서 0 ~ 3 범위를 넘어서게 만듭니다.

           //소수 반올림을 이용해서 정수로 변환

           //변환한 정수를 배열의 데이터 개수로 나눈 나머ㄴ지로 범위를 축소

           //ramdom 난수 표 있다. 현재시간으로 시드에서 나온다.

           //c언어는 맨 처음에 부조건 46이 나온다.

           var x = Math.round((Math.random() * 100) % ar.length);

           document.write(ar[x]+"<br/>");

 

 

5)Date

=>날짜를 위한 객체

=>날짜 및 시간은 기준시를 기준으로 지나온 시간을 정수로 저장

=>필요에 따라 이 정수를 년월일 시분초로 변환

=>필요에 따라 이 정수를 년월일 시분초로 변환

=>자바스크립트는 시간의 단위가ㅏ 1/1000(밀리초)

=>객체 생성

new Date(): 현재 날짜 및 시간

new Date(정수): 197011일 자정부터 지나온 시간 -epoch time

new Date(,,,,,,밀리초) ; 뒤에서부터 생략 가능

 

 

=>메소드

get단위(),set단위()

 

=>getTime(): epoch time을 리턴

           //자바나 자바스크립트는 월이 0부터 시작합니다.

           var d = new Date(1986, 4,5);

           document.write(d+"<br/>"); //Thu Jun 05 1986 00:00:00 GMT+0900 (대한민국 표준시)

           //오늘 날짜에서 d까지 몇칠이 지났는지 확인

           var today = new Date();

          

           var ch = today.getTime() - d.getTime();

           alert(Math.round(ch/(1000*60*60*24)));

           //자바는 21억 까지 밖에 안되서 확인 해야 한다.

 

1000분의 1초 단위로 나온다.

 

 

6) Array

=>배열 객체

=>배열은 Double Linked List

=>앞이나 뒤에서 삽입가능하고 중간에 삽입이나 삭제도 가능

=>reverse(),pop()- 마지막 요소를 꺼내서 리턴, push()-저장, shift()- 첫번째 데이터를 제거하고 리턴, unshift()-첫번째에 데이터를 저장

=>remove(데이터) - 데이터 삭제

=>indexOf(데이터) - 데이터를 찾아서 위치를 리턴하는데 없으면 음수 리턴

=>sort()-데이터를 오름차순 정렬

숫자 데이터는 문자열로 치환해서 정렬합니다.

매개변수가 2개이고 정수를 리턴하는 함수를 대입하면 메소드를 이용해서 비교한 후 정렬

 

python은 결과가 나오는것만

sort(str.len)

 

           var doubleLinkedList = [];

           doubleLinkedList.push(29);

           doubleLinkedList.push(31);

           doubleLinkedList.push(129);

           doubleLinkedList.push(41);

           document.write(doubleLinkedList+"<br/>");

           //"29","31","129","41"

           document.write(doubleLinkedList.sort()+"<br/>");//129,29,31,41

           //자바스크립트는 단위를 다르게 안여면 결과를 알수가 없다.

           //2개의 데이터 뻴셈 결과로 정렬 - 함수형 프로그래밍

           //함수의 매개변수로 함수를 대입

           document.write(doubleLinkedList.sort(function(left,right){return left-right})+"<br/>");//29,31,41,129

           document.write(doubleLinkedList.sort(function(left,right){return right-left})+"<br/>");//129,41,31,29

소켓동신 tcp,udp 성능은 좋은데 구현이 어렵다.

url 통신 성능은 떨어지지만 구현은 쉽다.

클라이언트가 중요한 원인인 요청만 했다. 서버(처리 ->결과 ->화면)

 

     <------ 화면

 1024 *768

반응형 웹 : 화면 크기와 상관없이 크기가 같게 나오자.

모바일 때문에 클라이언트가 중요해졌다.

 

최근에는 화면을 주지 말고 데이터만 줘라

서버에서 결과물을 만들어오면 정렬 하면 저장소 까지 가야 한다. 화면에서 할수 있으면 서버 까지 갈 필요없다.

데이터를 무료로 주면 OpenAPI

데이터를 빠르게 해주는 것이 중요하다 그래서 화면에서 해주는 것이 좋다.

통신할 때는 텍스트 밖에 안한다.

 

컬럼단위가 아니라 행단위로 정렬하는 것

           //생성자 생성

           var Data = function(name, score, age){

                       this.name = name;

                       this.score = score;

                       this.age = age;

                       this.disp = function(){

                                  document.write(this.name +":" + this.score+ ":" + this.age+"<br/>")

                       }

           }

          

           var list = [new Data("크루이프",98,54),new Data("베르캄프",99,51),new Data("반브스텐",87,53)];

           //정렬을 위한 함수를 생성

           var nameCompare = function(left, right){

                       if(left.name > right.name){

                                  return 1;

                       }else if(left.name < right.name){

                                  return -1;         

                       }else{

                                  return 0;

                       }

           }

           var scoreCompare = function(left, right){

                       return left.score - right.score;

           }

           var ageCompare = function(left, right){

                       return left.age - right.age;

           }

          

           var menu = prompt("정렬할 옵션을 선택하세요(1.이름, 2점수 , 3.나이)");

           if(menu == "1"){

                       list.sort(nameCompare);

           }else if(menu == "2"){

                       list.sort(scoreCompare);

           }else if(menu == "3"){

                       list.sort(ageCompare);

           }else{

                       alert("잘못된 메뉴 입력한 대로 출력");

           }

          

           for(var temp in list){

                       list[temp].disp();

           }

 

 

=>배열에 추가된 함수: forEach(), filter(),map()=>이방법을 이용하면 조금 더 효율적이다.

forEach()는 매개변수가 1개이고 리턴이 없는 함수를 대입해서 배열의 모든 요소가 함수를 수행하도록 합니다.

 

filter는 매개변수가 1개이고 boolean을 리턴하는 함수를 대입해서 배열의 모든 요수 중에서 true를 리턴하는 데이터를 가지고 새로운 배열을 만들어서 리턴합니다.

 

map은 매개변수가 1개이고 데이터를 리턴하는 함수를 대입해서 배열의 모든 요솔르 가지고 함수를 수행해서 리턴된 값들을 가지고 새로운 배열을 만들어서 리턴합니다.

 

           var x = [30,23,76,72];

           //배열의 모든 요소를 함수의 매개변수로 대입해서 함수를 실행

           x.forEach(function(arg){

                       alert(arg);

           });

          

           //fiter는 골라내는 것 return 을 받아야 한다.

           //배열을 모든 요소를 함수의 매개변수로 대입해서 함수의 리턴값이 true인 데이터만 추출해서

           //배열로 생성

           var o = x.filter(function(arg){return arg%2 == 0});

           alert(o)

          

           //배열의 모든 요소를 함수의 매개변수로 대입해서 함수의 리턴값을 가지고 새로운 배열을 리턴

           o = x.map(function(arg){return arg+10 ;});

           alert(o);

 

7)JSON객체

=>JSON :자바스크립트 객체 표현 방법을 이용해서 데이터를 표현

[]: 배열

{속성:,속성:...}

=>직접 작성하는 경우에는 속성이름데 ""를 해주어야 합니다.

실제로는 직접 작성하는 경우는 거의 없음

데이터를 만드는 것은 데이터를 가져와서 라이브러리를 이용해서 변환

 

=>JSON.parse(문자열): JSON형식의 문자열을 자바스크립트의 자료형으로 변환

=>JSON.stringfy(자바스크립트객체): json형식의 문자열로 변환

parse가 중요합니다.

최근에 서버가 클라이언트가 넘겨주는 데이터 포맷중에서 가장 많이 사용되는 것이 JSON입니다.

스마트 폰은 거의 대부분 JSON입니다.

google apple이 데이터를 JSON으로 넘겨줍니다.(twitter)

Back-end 언어를 할 때는 html을 만들어주는 것도 중요하지만 JSON이나 XML형식의 데이터를 리턴하는 것도 중요합니다.

 

4 .BOM(Browser Object Model)

=>브라우저가 처음부터 제공하는 객체

1)window객체

=>웹 브라우저에 해당하는 객체

=>location 속성 : 현재 url확인

=>opener 속성: 팝업 창의 경우 자신을 출력할 window

=>self 속성 : 자신

opnerself속성은 예전에 팝업 창을 이용할 때 많이 사용하던 속성

=>open(): 팝업창을 만들어준느 메소드

첫번째 매개변수로 출력할 url을 주는 것이다.

두번째 매개변수로 통신을 할 때 사용할 이름

세번째 매개변수로 윈도우 모양을 객체로 대입

네번째 매개변수는 history변경 여부 - 팝업창의 주소를 기억할 지여부를 설정

 

=>타이머 관련 메소드

setTimeout(함수 , 시간) : 시간이 지난 후에 함수를 1번만 수행

setInterval(함수 ,시간)  애니메이션 만들 수 있다  : 시간 단위로 함수를 계속 수행

 

setTimeout이나 setIterval로 타이머를 만들고 결과를 변수에 대입하면 타이머를 중지할 수 있습니다.

 

clearTimeout(타이머);

clearInterval(타이머);

 

광고처럼 이미지를 순서대로 보여주다가 마우스를 갖다 대면 중지 한다던가 하는 것들이 타이머와 ajax 조합입니다.

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>BOM</title>

<script>

           var img = document.getElementById("img");

           //Uncaught TypeError: Cannot set property 'src' of null

           img.src ="./images/pt2.png";//에러가 난다.

 

</script>

</head>

<body>

           <img src="./images/pt1.jpg" width="100" height = "100" id = "img">

</body>

</html>

 

 

                       //스크립트에서는 이벤트를 이용하지 않는 경우에는 만들어지지 않은 것은 사용 못함

                       //스타일시트는 코드를 전부 읽고 화면에 랜터링할 때 수행되기 때문에 시트를 먼저 만들어도 실행이 나중에 되기 떄문에

                       //코드 작성 위치는 상관이 없습니다.

                       var img = document.getElementById("img");

                       var imgname = ["pt1.jpg","pt2.jpeg","pt3.jpg"];

                      

                       var text = ["C","Java","Python","JavaScript"];

                       var disp = document.getElementById("disp");

                      

                       //타이머 생성

                       //1초마다 function을 실행하는 타이머

                       var i = 0;

                       var timer = setInterval(function(){

                                  i = i+ 1;

                                  img.src = "./images/"+imgname[i % imgname.length];

                                  disp.innerHTML = text[i % text.length];

                       }, 1000);

 

2) screen

=>화면과 관련된 정보를 소유한 객체

=>widthheight속성

 

3)location

=>url관련된 객체

=>href 속성: 현재 url, 다른 url을 대입합면 그 url로 이동

=>reload():새로고침

 

4)navigator 객체

=>userAgent: 접속한 운영체제와 브라우저 정보를 문자열로 리턴

이 속성을 이용해서 어떤 기기에서 접속했는지 알 수 있고 어떤 브라우저인지 알아냅니다.

모바일 운영체제에서 접속하면 모바일 페이지로 이동시키는 것도 이 속성을이용

 

//모바일 운영체제 이름 배열을 생성

                       var userAgent = navigator.userAgent;

                       alert(userAgent);

 

 

                       //모바일 운영체제 이름 배열을 생성

                       //apple제품은 iphone ipad가 구분됨

                       //andriod 제품은 스마트 폰과 테블릿이 구분이 안됨

                       //모바일 페이지를 만들 때 andriod 를 고려하는 경우에는 pc버전이라는 버튼을 추가합니다.

                       var mobile = ["iphone" ,"ipad","andriod"];

                       //userAgenr mobile에 있는 텍스트가 있는 지 확인

                       var result = false;

                       for(var idx in mobile){

                                  if(userAgent.toLowerCase().indexOf(mobile[idx]) >= 0){

                                              result = true;

                                              break;

                                  }

                       }

                       if(result == true){

                                  //locatoin.href = "모바일페이지 url";

                                  alert("스마트 폰에서 접속");

                       }else{

                                  alert("pc에서 접속")

                       }

 

http://ip주소:9000/web/bom.html

확대 축소가 안되고 따로 만들어지는 경우가 있다

피씨 버전이 있다 .외냐하면 안드로우드 테블릿 때문이다.

 

5)history

=>이동한 url에 대한 정보를 가진 객체

=>back():뒤로

=>forward():앞으로

=>go(인덱스) : 인덱스 만큼 이동

 

form

 

 

 

history.back

메시지 출력할 수 가 없다.

 

 

반응형

'Study > html,css, javascript' 카테고리의 다른 글

frontEnd-6  (0) 2020.10.15
frontEnd-5  (0) 2020.10.15
frontEnd-3  (0) 2020.10.12
frontEnd-2  (0) 2020.10.12
frontEnd-1  (0) 2020.10.10
반응형

**css

1.border-raduis

=>경계선에 원형 곡선을 적용할 수 있도록 해주는 속성

 

2.box-shadow

=>그림자를 생성

=>그림자 방향(insert, outset) x-offset y-offset blur정도 색상

 

3.실습

=>디렉토리 구조

WebContent

-resources

         -js

         -css

         -images

 

-views

 

=>views디렉토리에 boxshadow.html을 생성하고 작성

검사로 소스가 틀렸는지 확인한다.

404: 잘못된 url

=>경로 설정 잘못

 

메뉴 만들고 효과를 주는 것

 

box-shadow: inset 0px 0px 20px 15px rgba(18,52,88,0.3);

           box-shadow:0px 0px 20px 15px rgba(18,52,88,0.3);

 

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>박스의 경계선과 그림자 효과</title>

<link rel ="stylesheet" href="./../resources/css.css">

</head>

<body>

           <h1 class ="korea"><p>대한민국</p></h1>

</body>

</html>

 

=>css 디렉토리에 css.css 파일을 만들고 작성

.korea {

           /*속성: ;*/

           color:#000000 ;

           width:200px ;

           line-height: 30px;

           padding:30px ; /*경계선과 콘텐츠와의 여백*/

/*         margin다른 객체와의 여백*/

           border: 1px solid rgb(18, 52, 88) ;

           /*여러 속성의 값을 한 번에 적용할 때 공백으로 구분*/

           /* , 는 동일한 속성의 값을 여러 개 적용할 때 구분*/

           background:#eeeeee;

           /*여러 개의 값을 지정할 수 있는 속성의 경우에 뒤에서 부터 값 생략 가능합니다.*/

           /*cssjavascript는 옵션에 전부 기본값이 설정되어 있습니다.*/

           border-radius: 15px;

           box-shadow: inset 0px 0px 20px 15px rgba(18,52,88,0.3);

           /*0px 0px 20px 15px 출발점이고 어디 까지 줄지 */

}

 

.korea p { vertical-align: middle;} /*line-height 만 주면 중간에 잘 간다.*/

 

 

 

4.float

=>콘텐츠를 배치하는 방법

=>이 속성을 이용하면 콘텐츠를 화면위에 올려놓은 것 처럼 배치

=>블록 요소 옆에 다른 콘텐츠를 배치할 때 사용

=>left, right, none으로 설정

 

 

5.float해제

clear: both; 를 사용

 

6실습

1).html에 추가

           <div class="menu">Unix</div>

           <div class="menu">Max OS X</div>

           <div class="menu">Linux</div>

           <div class="menu">Windows</div>

          

           <!-- 다음 줄로 내려고자 하면 기존 float를 해제 해야 합니다. -->

         <div class="title"><h2>운영체제</h2></div>

2)css에 추가

/*menu클래스를 가진 객체들을 왼똑에서부터 배치하고 오른쪽에 다른 콘텐츠를 배치할 수 있도록 설정*/

.menu{

           float:left;

           margin: 10px;

}

 

/*title 클래스를 가진 객체는 이전에 적용된 float를 해제하고 원래대로 배치*/

.title{

           clear: both;

}

 

7.display 속성

=>콘텐츠가 화면에 보여질 때 어떤 형태로 보여질 것인지 설정

=>block, inline,inline-block 등이 있음

=>block(블록 요소로 변환) ,inline(인라인 요소로 변환), inline-block(블록으로 만드는데 내부에서 줄 바꿈을 하지 못하도록 변환) 등이 있음

=>테이블 요소로도 변환이 가능

 

8.overflow

=>크기에 비해 많은 양의 콘텐츠를 가진 경우 출력방법을 설정

=>visible(크기를 눌려서 출력), hidden(숨김) , scroll(스크를 바를 생성)

=>화면에 안에 별도의 영역을 구성해서 콘텐츠를 출력하고 내부에 스크롤을 배치하는 경우나 많은 데이터를 출력할 때 테이블을 사용하는 경우에 해딩을 고정시키는 용도로도 사용 가능

전체 화면 에 또 화면 있고 안에도 scroll bar가 있고 밖에도  scroll bar가 있다.

탭으로 만든 이유는 모바일때문이다. 인터넷 끊어질 가능성이 있기 떄문이다.

hidden으로 했다가 후에 visible로 하는 것이다.

데이터가 발생한곳에서 해야 한다.스마트폰의 센스 데이터 받아서 위치정보 등 이슈가 된다.

 

9.엑셀의 틀 고정 처럼 스크롤을 해도 항목의 이름은 화면에 계속 출력되도록 하기

1)html에 작성

           <table>

                       <tr>

                                  <th>이름</th>

                                  <th>언어</th>

                       </tr>

           </table>

          

           <div class="contents">

                       <table>

                                  <tr>

                                              <td>데니스리치히</td>

                                              <td>C언어</td>

                                  </tr>

                                  <tr>

                                              <td>제임스 고슬링</td>

                                              <td>Java</td>

                                  </tr>

                                  <tr>

                                              <td>귀도 반 로섬</td>

                                              <td>Python</td>

                                  </tr>

                                  <tr>

                                              <td>브랜던 아이크</td>

                                              <td>Javascript</td>

                                  </tr><tr>

                                              <td>비야네 사우스스트룹</td>

                                              <td>C++</td>

                                  </tr>

                                  <tr>

                                              <td>아르네스 하임스베르</td>

                                              <td>C#</td>

                                  </tr>

                       </table>

         </div>

2)css에 작성

table{

           border: 1px solid black;

           width: 400px;

}

 

th, td{

           width: 200px;

}

 

.contents{

           width:420px;

           height:100px;

           overflow: auto;

}

 

10.position

=>콘텐츠의 배치 방법

1)static : 콘텐츠를 순서대로 배치

2)relative: 이전 요소와의 관계를 가지고 배치, lefttop속성을 이용해서 원하는 만큼 떨어뜨려서 배치 가능

3)absolute: left, top,right, bottom 속성을 이용해서 배치

4)fixed :스크롤을 해도 특정위치에 고정되는 방식

 

 

11.visibility

=>visible, hidden속성을 설정해서 보여지고 보여지지 않도록 해주는 설정

 

12.z-index

=>겹쳐서 출력되는 경우 출력되는 순서 설정을 위한 속성

 

 

13.transform

=>변환 -크기 , 위치 ,회전 ,비틀기 등의 변환을 수행

=>표준으로 적용ㄷ되지 않아서 verndor-prefix를 이용해야 합니다.

=>크롤과 사파리는 webkit, firefoxmoz, IEms

-webkit-transform: scale(2.0);

         -webkit-transform:skew(10deg,10deg);

-webkit-transform: scale(2.0);

         -webkit-transform: rotate(45deg);

                                           여기를 조작하는 것을 transform이라고 한다.

이것을 추상으로 한다.                                     x          y          z

 

연산의 기준점:origin(회전의 기준점 응용프로그램은 )

scale(2.0)->출력만 2배로 확대해서 한다.

 

원본

                    연산해서 출력한다.

 

게임시

(10,0)  <----------------(0,0)

(10,0)애서 죽었을 경우 (0,0)으로 가야 한다. 0,0에서 있고 10,0에다 출력한다.

10,0만 버리면 원본이 된다.

확대 축소도 같다. 원본은 그대로 이고 출력만 변한다

 

 

 

 

복사본이 필요 없으면 버리면 된다. 데이터베이스 원리 메모리 부담이 줄어들 수 있다.

 

기본형과 참조형

python scalar vector

 

system에서는 변경 가능 , 변경 불가능 이 큰 문제이다.

변경이 가능하다면 여분의 공간이 필요하다.

변경 불가능이라면 여분의 공간이 필요없다.

List[10,30]

List.add(1,20);

컴퓨터에서는 중간에 끼여널려면 큰 공간을 할당받아서 이것 저것 작업해야 한다.

작업해야 할 것이 많다.

implacabler기능이 있다.

R에서는 <- 하고 = 이것이 필요하다.

원복속성을 바꾸면 부담이 되서 transform으로 한다.

그래서 수학을 알아야 한다. 행렬 계산 등

행렬연산

 

 

출력은 비동기이다. 순서대로 하는 것이 아니라 모아서 처리한다.

애니메이션 : 비동기 그래서 콜백 함수가 항상 있다. 화면 출력은 시간이 오래 걸린다.

         화면 출력: 오랜시간이 걸리는 작업

         오랜시간이 걸리는 것은 입출력 문제

         FIFO=>먼저 입력한것 먼저 출력한다.

         오랜 시간 뒤에 짧은 시간 처리하는 것이 있으면 짧은 시간 이 걸리는 분은 starvation이 걸릴 수 있다.

콘솔 출력

1-10 출력시 10번만 쓰여진다. 이것은 모아서 처리하기 때문이다.

 

동기 : 순서데로

비동기 : 순서와 상관없이

 

transform은 운본 크기가 변한 것이 아니라 출력만 변한 것이 기 떄문이다.

 

14.animation

1)transition animnation

transition-property: 애니메이션을 적용할 속성을 설정(all 을 기재하면 모든 속성);

transition-duration:애니메이션 적용시간

transition-timing-function: 애니메이션 적용방법(linear(균등하게) ,ease-in(가속 점점 빨라진다.) , ease-out( 점점늦어진다. 천천히) , ease-in-out(가운데 빠르는 것) )

transition-timing-delay: 대기시간

 

2)Keyframe Animation

=>중간 중간에 변화를 추가할 수 있는 애니메이션 기법

=>애니메이션 생성

@-webkit-keyframes 애니메이션이름{

           from{시작값 설정}

           to{종료값 설정}

}

from대신에 백분율로 애니메이션 변화시점 지정 가능

 

=>애니메이션 적용

-webkit-animation-name: 애니메이션이름

타이밍 함수( timing-function)나 시간(duration), 반복횟수(iteration-count: infinite이면 무한대) ,play-state, direction(alternate-왕복, normal-한쪽으로만 적용)을 설정

 

jquery 메뉴 plugin

jquery table plugin

jquery 무료 차트 plugin

jqplot http://www.jqplot.com/

 

**반응형 웹 디자인

=>디바이스나 브라우저의 크기에 상관없이 동일한 콘텐츠를 사용할 수 있도록 디자인

스마트 폰 애플리케이션을 제작할 때도 이 개념은 중요

=>웹에서는 cssmedia query와 상대적인 크기 개념으로 구현을 합니다.

모바일에서 확대 축소 안 되는 것user-scalable : user-scalable

가장 일반적인 설정

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximumscale=1.0, user-scalable=no"/>

 

**javacript

1.개요

=>script는 웹 페이지의 처리능력을 향상시키기 위해서 등장

동적으로 DOM객체의 변환을 하는 것이 목적

=>초창기에는 APPLE script, vb scripte등이 존재하지만 지금은 javascript를 표준으로 간주

javajavascript근본적으로는 관계가 없습니다.

=>최근에는 타입의 안정성(정적인 자료형 도입 ,클래스의 개념)을 추가한 typescript도 있습니다.

=>기본적으로는 브라우저 안에서만 동작하는 클라이언트 사이드 언어

=>웹 프로그래밍을 할 때는 자바스크립트가 필수 요소라서 최근에는 라이브러리나 프레임워크를 이용해서 자바스크립트 문법으로 서버 사이드 개발이 가능한 node.js 도 등장했고 브라우저 엔진 위에서 동작하는 응용 프로그램을 만드는 용도로도 사용이 되면 스마트 폰 앱 애플리케이션 제작에도 활용됩니다.

=>자바스크립트 문법만으로 웹 서버와 클라이언트를 같이 제작하기도 합니다.

M(Mongo DB), E(Express.js) A(Angular.js) N(Node.js)이라고 합니다.

A대신에 reactvue를 사용하기도 합니다.

mnc++

=>최근에는 텐서플로우와 같은 ai분야의 라이브러리도 등장

 

2.사용방법

1) 외부 파일에 만들어두고 사용

<script scr="자바스크립트 파일 경로"> </script>

 

 

2)html 파일 내부에서 만들어서 사용

<script>

내용

</script>

 

3)태그 안에 만들어서 사용

<태그 이벤트 ="script:내용"></태그>

 

 

3.작성시 주의 사항

=>대소문자 구별

=>;은 한줄에서 2개 이상의 명령을 작성할 때 명령을 구분하기 위해서 사용

=>명령어마다 ;을 할 필용는 없지만 한 줄에 2개의 명령어를 사용할 때는 필수

=>문자열을 만들 때 작은 따옴표나 큰 따옴표를 동일한 역할을 수행

작은 따옴표나 큰 따옴표 안에 다른 따옴표를 할 때는 반드시 나중에 만들어진것을 먼저 닫아야 합니다.

=>자바스크립트나 파이썬은 줄 단위로 변역하면 실행되기 떄문에 뒤부분에 에러가 있더라도 에러가 없는 부분까지는 수행이 되고 예외가 발생할 수 도 있습니다.

 

print()

print()

 

print() print()=>이렇게 쓸 경우 에러가 난다. 그래서 ;세미코론을 추가한다.

; 여기까지는 하나의 명령어이니깐 한번에 실행해주세요

 

4.제어문자

=>\ 다음에 하나의 영문자를 추가해서 만든 특별한 문자 상수

\n: 줄 바꿈

\t:

\',\",\\ : ',",\를 의미

 

5.주석

//내용: 한줄 주석

/* 내용 */ : 여러 줄 주석

 

 

6.Literal

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

숫자 리터럴: 10진수 형태로 작성

문자열 리터럴: '문자열' 또는 "문자열"

논리형 리터럴: true,false

참조형 리터럴: null(만들어졌지만 가리키는 데이터가 없음 . 변수는 만들어졌는데 값이 null인것이고 ) ,undefined(만들어지지 않는 데이터)

 

var a ;//a undefined

var b= null;//bnull이다.

 

int a ; undefined사용못한다.undefined는 이름 자체가 없다.

String str = null; str.은 할 수없다. 데이터가 없다. 이름이 있는데 저장하고 있는게 없다.

 

7. 변수 선언

var 변수명 = ;

=>처음에 값을 대입하지 않으면 변수는 생성되지 않습니다.

=>초기값을 대입하지 않은 경우에는 나중에 값을 대입해야만 생성되는 것으로 간주

=>var를 붙이지 않고 만드는 것이 가능한데 이 경우는 실제로는 변수가 만들어지는 것으로 보지 않습니다.

var를 붙이지 않으면 전역변수의 개념처럼 동작합니다.

변수명 = 값 이런식으로 하기도 합니다.

 

8. 데이터 출력

1) 브라우저 창에 출력

document.write(메시지 또는 변수 나 상수 또는 연산식 그리고 함수 수행 )

document.writeln(메시지 또는 변수 나 상수 또는 연산식 그리고 함수 수행 )

=>writeln은 줄 바꿈이 아니고 한번에 수행해 달라는 요청

ln이 없으면 모아서 출력하는 것이고 ln이 있으면 모으지 말고 바로 출력하는 것입니다.

메시지가 길 때 한번에 작성하는 것이 어려우면 write 를 이용해서 나누어서 작성한 후 한번에 출력 해달라고 합니다.

 

2)대화상자에 출력

alert(출력할 내용)

=>최근 브라우저에서는 별도의 윈도우 출력하는 것을 권장하지 않아서(팝업 금지) 옵션을 변경하지 않으면 출력되지 않을 수 있습니다.

 

 

3)브라우저 디버거에 출력

console.log(출력할 내용)

=>화면에서는 보이지 않고 디버거 창을 열어서 콘솔에서 확인

크롬의 경우는 마우스 오른쪽 클릭해서 [검사]를 실행해야 확인이 가능

 

9.스크립트 작성 위치

=>스크립트는 html문서 내의 어느곳에나 작성 가능

=>순서대로 실행되므로 자신이 사용하고자 하는 객체는 호출하기 전에 만들어져 있어야 합니다.

=>예전에는 head에 만들었는데 최근에는 body안에 만들기도 합니다.

 

10.html파일을 만들고 작성

<script>

           //변수 만들기

           var msg ="자바스크립트";

          

           //브라우저에 출력

           document.write(msg);

           //대화상자에 출력

           alert("대화상자에 출력");

           //콘솔에 출력

           console.log("콘솔에 출력");

</script>

 

           //자바스크립트에서는 변수를 만들고 값을 대입하지 않으면 없는 값으로 간주

           //이런 경우는 undefined

           var x;

           document.write(x);

 

 

<script>

           //변수 만들기

           var msg ="자바스크립트";

          

           //브라우저에 출력

           document.write(msg +"<br/>");

           //대화상자에 출력

           alert("대화상자에 출력");

           //콘솔에 출력

           console.log("콘솔에 출력");

          

          

           //자바스크립트에서는 변수를 만들고 값을 대입하지 않으면 없는 값으로 간주

           //이런 경우는 undefined

           var x;

           document.write(x);

</script>

 

 

11.javascript디버깅

=>자바스크립트는 대부분의 IDE가 디버깅 기능을 제공하지 않습니다.

1)자바스크립트는 에러가 없는 부분까지 실행하는 경우가 많기 때문에 중간중간 출력하는 코드를 삽입해서 어디까지 에러없이 실행되는지 확인해 볼 수 있습니다.

 

2)브라우저의 검사 기능을 이용

크롬이나 IE는 검사 기능을 이용하면 문서의 구조, 그리고 CSS적용 , 자바스크립트 에러를 어느 정도 까지는 확인할 수 있도록 해줍니다.

단지 에러라고 출력합니다. 예외 종류를 구체적으로 알려주지는 않습니다.

 

document.wris is not a function

위 문장만 가지고는 document가 없는 것인지 wris가 없는 것인지 알 수 없습니다.

 

 

12. 배열 선언

=>자바스크립트의 배열은 List입니다.

var 배열명 = [데이터 나열];

var 배열명 = new Array(데이터 나열);

 

=>데이터 사용

배열명[정수 인덱스]

 

=>없는 인덱스를 사용하면 가져올 때는 undefined 대입할 때는 추가가 됩니다.

파이썬이나 자바스크립트는 객체가 클래스로부터 만들어지지 않고 Map의 인스턴스로 보는 것이 이해하기 편리합니다.

 

 

 

 

13.자료형 변환

1)숫자로 된 문자열에 * 정수를 하게 되면 문자열을 숫자로 변환해서 *을 수행

2)자료형(데이터) 를 이용하면 데이터를 자료형으로 변환

Number, Boolean , String

정확하게는 자료형이 아니라 생성자로 봐야 한다.

3)다른 자료형 객체를 문자열로 변환할 때는 toString()메소드의 결과를 이용해도 됩니다.

 

14)연산자

1)최우선 연산자

=>[인덱스] :배열에서 인덱스번째 데이터를 가리키기 위한  연산자

=>.:객체가 자신에게 속한 속성이나 메소드를 호출 할 때 사용하는 연산자

 

 

2)증감연산자

=>정수 변수에만 사용가능한 연산자

=>++,--

=>++는 변수의 값을 1증가시키고 --는 변수의 값을 1감소시키는 연산자

=>명령문에 사용되는 경우 ++를 변수 앞에 사용하면 변수의 값을 증가시키고 명령문에 변수의 값을 사용하고 변수 뒤에 사용하면 변수의 값을 명령문에 사용하고 변수의 값을 감소시킵니다.

 

3)산술 연산자

=>% : 나머지 구해주는 연산자

=>*,/ :곱과 나누기 연산자

=>+,- : 더하기와 뺴기 연산자

 

 

4)결합연산자

=>문자열과 다른 종류의 데이터또는 문자열과의 결합에 사용: +

 

5)비트 논리 연산자

=>정수를 2진수로 변환해서 비트 단위로 연산 한 후 다시 10정수로 리턴해주는 연산자

& : 둘다 1인 경우만 1그 이외의 경우는 0

| : 둘다 0인 경우만 0 그 이외의 경우는 1

^: 두개가 같으면 0 다르면 1

파이썬의 numpy, pandasR에서는 그룹 데이터 Collection이 이 연산자를 이용해서 조건 필터링을 합니다.

 

~: 1의 보수

<< : 왼쪽의 데이터를 오른쪽의 숫자만큼 왼쪽으로 shift - 1번할 때마다 *2

>> : 왼쪽의 데이러를 오른쪽의 숫자만큼 오른쪽으로 shift -1번 할때마다 /2

 

컴퓨터의 숫자 표현

정수: 2진수로 표현

실수 : 부동소수점 방식으로 표현

음수 : 2의 보수 방법으로 표현한다.

 

 

-20

1의 보수 구하면

 

-를 하는 것은 뒤으로 부터 1을 찾은 다음 그다음 부터 뒤집기 하면 된다.

 

정수 -> 2진수 문자열

2진수 문자열 -> 정수

정수 문자열 -> 정수

"12476" -> 12476

Integer.pareInt()안하고 정수문자열을 정수로 바꾸는 것

 

 

실수:

 

 

python에서는 &&전체를 연산하고 & 부분으로 연산한다.

1111

1111

비교할 경우

&&는 결과가 하나 나오고

& 는 여러개 나온다.

 

~1의 보수이다. 숫자상에는 의미가 없는데

1의 보수는 0->1 1->0으로 바꾼다.

숫자로는 의미가 별로 없지만 이미지에서는 의미를 가진다. 반대되는 색을 만들 경우

이미지 에서는 0->1 1->0을 반대되는 색을 의미한다.

 

-1:

12의 보수가 전부 1이기 때문에

0000 0001

1111 1111 =>-1

-1은 모든 비트가 1로 전부 채워졌다.

 

-1은 모든 비트가 1로 채워진 수

signed

unsigned

 

00000000~ 11111111

-1이 될수 있고 가장 큰 수도 될수 있다.

indexOf() -> 값이 있으면 위치를 주고 없으면 -1을 준다. -1을 끝까지 가봤는데 없다.

infinite가 무한데라고 했는데 -1주면 무한반복처럼 동작한다.

컴퓨터에는 무한반복이 없다.

 

a++->있는 언어 있고 없는 언어도 있다.

a= a+1=>알고리즘은 이것을 사용한다.

and0하고 &하면 0을 준다.

&0->포맷 혹은 delete이다.

or 데이터를 복사할 떄는 삽입할 떄 사용한다.

 

0하고 or하면 데이터가 그대로 옯겨진다. copy,

xor 비교할 때사용한다..

 

6) 비교 연산자

>,>=,<,<= : 크기 비교

 

==: 값의 일치 여부를 확인

=== : 값과 자료형 까지 일치하는 지 확인

"123" == 123 : true로 나온다. 원래는 비교가 안되야 하는데 ->숫자 123을 문자열로 변환해서 비교해버립니다

"123" === 123 : false

 

"123" == 123 : "123" == "123"

 

!= : 값의 불일치 여부를 확인

 

 

7) 조건 존리 연산자

&& :and

||:or

=>데이터 전체를 하나로 보고 연산을 해서 결과가 boolean 1개로 리턴

 

 

8) 여러개의 데이터로 구성된 데이터 끼지 andor연산을 할 때는 &

python에서는 && 중요하고

데이터 분석에서는 & 이 중요하다.

 

9) 삼항 연산자

(조건식) ? 명령1: 명령2;

=>조건식이 true이면 명령1 false이면 명령2

=>조건식은 boolean데이터가 나오는 식이어도 되지만 숫자의 경우는 0이면 false그 이외의 수는 양true로 간주하고 존재하는 데이터면 true존재하지 않는 데이터 (null, undefined)false로 간주합니다.

 

var a = 10;

a?100:200->a10이라는 값을 가지고 있어서 true로 간주

a= 0 ->a false로 간주

 

var ar;

arfalse

ar = [100,200];

artrue

 

10)대입 연산자

= : 오른쪽 데이터를 왼쪽의 변수에 대입

 

+= : 왼쪽의 변수에 저장된 값과 오른쪽의 데이터를 +연산을 해서 결과를 왼쪽의 변수에 대입

 

var a= 10;

a+= 7;

a = a+7과 같습니다.

 

 

11)new

=>생성자를 호출할 때 사용하는 연산자로 생성자를 이용해서 객체를 생성하고 생성한 객체의 참조를 리턴하는 연산자

 

12)this

=>생성자나 인스턴스 메소드 안에서 객체 자신을 가리키는 포인터

 

13) typeof

=>데이터의 자료형을 문자열로 리턴해주는 연산자

 

 

14)delete

=>데이터를 삭제하는 연산자

 

15)instance of

=>객체가 특정 클래스로 부터 만들어 졌는지 확인해서 boolean으로 리턴해주는 연산자

 

16)in

=>속성이 객체에 존재하는지 확인해서 boolean으로 리턴하는 연산자

 

결과 : intercept=>절편

결과 : slope=>기울기

책은 자기가 중요하는 것만 출력해준다.먼저 타입을 확인해야 한다

dir 사용할 수 있는 것이 다 나온다.

type으로 확인하고 -> dir ->help

어떻게 사용하는지 주고 가면서 해야 한다.

어떤 자료형인지 확인 해야 한다.

 

 

15.제어문

1)제어문의 종류

=>분기문 : 조건이나 값에 따라 다른 문장을 수행해도록 해준는 명령어

if: 조건에 의한 분기

switch:값에 대한 분기

 

=>반복문(Loop- iteration)

while :조건이 false가 될때 까지 수행

do ~while : 일단 한번은 하고 조건이 false가 될 때 까지 반복

for :  시작점부터 종료하는 부분 까지 하나의 괄호안에 모두 작성

for ~ each : for ~ in - 어떤 객체나 데이터의 모임을 순서대로 방문 (순회)

자바스크립트는 데이터의 모임 뿐 아니라 객체도 for-in사용 가능

 

1)if

=>조건 분기를 위한 명령어

 

if(조건1){

           조건1의 내용이 true일 때 수행할 내용;

}else if(조건2){

           조건1의 내용이 false이고 조건2true일 때 수행할 내용;

} else if(조건3){

           앞의 모든 조건이 false이고 조건3true일 때 수행할 내용;

}...

else{

           앞의 모든 조건이 false일 때 수행할 내용

}

 

=>if는 필수 이고 else if는 생략 가능하고 여러 개 사용도 가능

else는 생략 가능하고 1번만 사용 가능

 

3)switch

=>값에 의한 분기

switch(변수 또는 정수나 문자열을 리턴하는 연산식){

           case 1:

                       ()안의 결과가 값1일 때 수행할 내용;

                       break;'

           case 2:

                       ()안의 결과가 값2일 때 수행할 내용;

                       break;'

           ....

           default:

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

                       break;

}

=>break가 없으면 break를 만날 때 까지 계속 수행합니다.

 

 

 

반응형

'Study > html,css, javascript' 카테고리의 다른 글

frontEnd-6  (0) 2020.10.15
frontEnd-5  (0) 2020.10.15
frontEnd-4  (0) 2020.10.12
frontEnd-2  (0) 2020.10.12
frontEnd-1  (0) 2020.10.10
반응형

 

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