610 likes | 752 Views
프로그래밍 본격 시작. Mi-Jung Choi Department of Computer Science Kangwon National University, Korea. 배열 (Array). 프로그래밍 본격 시작. 같은 데이터 형식의 저장공간이 연속적으로 배치되어 있어 , 인덱스를 이용하여 상대위치를 읽거나 쓸 수 있는 자료구조 (array_dow.php). $dow = array (“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”);.
E N D
프로그래밍 본격 시작 Mi-Jung Choi Department of Computer Science Kangwon National University, Korea
배열 (Array) 프로그래밍 본격 시작 같은 데이터 형식의 저장공간이 연속적으로 배치되어 있어, 인덱스를 이용하여 상대위치를 읽거나 쓸 수 있는 자료구조 (array_dow.php) $dow = array (“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”); $coins = array (1, 5, 10, 50, 100, 500); <?PHP $arr1 = array (“A”, “B”, “C”, “D”, “E”, “F”, “G”); $arr2 = array (“A”, “B”, “D”, “E”, “F”, “G”, “H”); $results = array_diff ($arr1, $arr2); foreach ($results as$value) { { print “$value<br>”; } ?>
array_diff(), foreach() 프로그래밍 본격 시작 • 함수 array_diff 문법 • array1에는 있으나 나머지 array에는 없는 값을 반환 • 두 개 이상 array의 원소 값을 비교 arrayarray_diff(array array1, array array2 [,array …]) • 함수 foreach 문법 • Array_expression에 의해 순환, 현재 element 값이 $value에 할당 • 매 순환마다 다음 element로 전진 foreach(array_expression as$value)statement
2차원 배열 (2D Array) (1/2) 프로그래밍 본격 시작 중첩된 구조로 표현(array 구조 내부에 array를 정의) 2차원 배열 예 $twod_array = array ( array (1, 2, 3), array (4, 5, 6), array (7, 8, 9) ); 2차원 배열에서 원소를 지정하는 방법 ($var[i][j]) [index는 0부터 시작] $temp = $twod_array[2][1]; • N차원 배열인 경우 • 반복적으로 중첩하여 표현 • 원소 지정 방법: $var[i1][i2]…[iN]
2차원 배열 (2D Array) (2/2) 프로그래밍 본격 시작 2차원 배열의 예제 (array-2d.php) <? $twod_array = array ( array (1, 2, 3), array (4, 5, 6), array (7, 8, 9) ); $dim = 1; foreach ($twod_array as $oned_array) { print "dimension(" . $dim++ . ") "; foreach ($oned_array as $element) { print $element . " "; } print "<br>"; } for($i=0;$i < 3;$i++) { print "dimension(" . ($i+1) . ") "; for($j=0;$j < 3;$j++) { print $twod_array[$i][$j] . " "; } print "<br>"; } ?>
배열의 정렬(Sorting) (1/3) 프로그래밍 본격 시작 정렬의 예 (sort1.php) <? $arrays = array (“Kim”, “Lee”, “Park”, “Cho”, “Kang”, “Shim”, “Choi”, “Chang”, “Bae”, “Yang”); sort ($arrays); foreach ($arrays as$ar) { print “$ar<br>”; } ?>
배열의 정렬(Sorting) (2/3) 프로그래밍 본격 시작 • 정렬 함수 sort() • array 배열에 있는 원소들이 낮은 것에서 높은 순서로 배치 • 배열에 있는 내용을 알파벳 순으로 정렬하여 원래의 배열에 저장 voidsort(array array) sample1.php sample11.php sample21.php sample2.php sample12.php sample22.php sample3.php sample13.php sample23.php sort 적용 후 sample1.php sample11.php sample12.php sample13.php sample2.php sample21.php sample22.php sample23.php sample3.php
배열의 정렬(Sorting) (3/3) 프로그래밍 본격 시작 • 자연(natural) 정렬 함수 natsort() (sort2.c) • 문자(알파벳, 한글 등)와 숫자가 섞여 있는 문자열을 정렬할 때 사용 • 자연 순서(natural ordering) voidnatsort(array array) sample1.php sample11.php sample21.php sample2.php sample12.php sample22.php sample3.php sample13.php sample23.php natsort 적용 후 sample1.php sample2.php sample3.php sample11.php sample12.php sample13.php sample21.php sample22.php sample23.php
연상/연관 배열(Associative Array) (1/7) 프로그래밍 본격 시작 숫자를 사용하지 않고 문자(스트링)를 키(key)로 사용하는 배열 <?PHP $freshman = array ( “Kim” => “Computer”, “Lee” => “Math”, “Park” => “Physics”, “Choi” => “Music”, “Han” => array (“Electronics”, “Statistics”) ); ?> 키(key) 배열 원소
연상/연관 배열(Associative Array) (2/7) 프로그래밍 본격 시작 배열의 항목을 가져올 때 $result = $freshman[Kim] // or $result = $freshman[“Kim”]; 배열에 항목을 추가할 때 $freshman[Ko] = “History”; 배열에서 항목을 삭제할 때 unset($array[key_value]);혹은 unset($array[$index]);
연상/연관 배열(Associative Array) (3/7) 프로그래밍 본격 시작 삭제(unset() 함수)의 예 (unset.php) <? $fruit = array ( "Apple" => "Red", "Pear" => array ("Brown", "Yellow"), "Peach" => "Pink", "Tomato" => array ("Red", "Green"), "Banana" => "Yellow" ); print "**** BEFORE ****<br>"; var_dump($fruit); print "<br><br>"; unset($fruit[Pear], $fruit[Banana]); print "**** AFTER ****<br>"; var_dump($fruit); ?> var_dump()는 배열 내 모든 항목을 출력하는 함수임
연상/연관 배열(Associative Array) (4/7) 프로그래밍 본격 시작 foreach 문의 사용 예 $fruit = array ( “Apple” => “Red”, “Pear” => array (“Brown”, “Yellow”), “Peach” => “Pink”, “Tomato” => array (“Red”, “Green”), “Banana” => “Yellow” ); print “**** BEFORE ****<br>”; print_fruit ($fruit); print “<br><br>”; print “**** AFTER ****<br>”; unset ($fruit[Pear], $fruit[Banana]); print_fruit ($fruit); ?>
연상/연관 배열(Associative Array) (5/7) 프로그래밍 본격 시작 foreach 문의 사용 예 (계속) <?PHP functionprint_fr ($arr_var) { foreach ($arr_varas$arr_item) { if (is_array ($arr_item)) print_fr ($arr_item); else print “Color = “ . $arr_item . “<br>”; } } functionprint_fruit ($arr_var) { foreach ($arr_varas$arr_item => $arr_list) { print “FRUIT: “ . $arr_item . “<br>”; if (is_array ($arr_list)) print_fr ($arr_list); else print “Color = “ . $arr_list . “<br>”; print “====================<br>”; } }
연상/연관 배열(Associative Array) (6/7) 프로그래밍 본격 시작 foreach 문의 사용 예 (계속) – 결과 화면 (array_assoc.php)
연상/연관 배열(Associative Array) (7/7) 프로그래밍 본격 시작 • 연상 배열의 정렬 • asort() 함수의 경우, 원소가 배열이 아닌 것을 먼저 정렬하고, 배열인 것은 다음 순으로 정렬함 • 연상 배열의 정렬의 예: pp. 68-70 array_assoc_sort.php
기타 배열 관련 함수들 프로그래밍 본격 시작 배열 재배치: shuffle(), array_reverse() 배열 탐색: each(), current(), reset(), end(), next(), pos(), prev() 배열 각 원소에 함수 적용: array_walk() 배열의 수 세기: count(), sizeof(), array_count_values() 배열을 스칼라 변수로 변환: extract() 각 함수의 사용법에 대해서 각자 읽힐 것
for 문 (1/4) 프로그래밍 본격 시작 • 문법 • expr1 계산 • 매 순환의 시작에 expr2가 계산 • 이때 계산된 expr2 값이 TRUE이면 순환은 계속되며 statement가 수행 • 계산된 expr2 값이 FALSE이면 순환 종료 • 매 순환의 마지막에 expr3가 계산 for(expr1; expr2; expr3) statement for(expr1; expr2; expr3): statement; ...; endfor; for(expr1; expr2; expr3) { statement; ...; }
for 문 (2/4) 프로그래밍 본격 시작 구하기 (for_ex1.php, for_ex2.php) <?PHP $i = 1; $sum = 0; while ($i < 101) { $sum = $sum + $i; $i = $i + 1; } print “1부터 100까지의 합 = $sum”; ?> <?PHP for ($i = 1, $sum = 0;$i < 101;$i++) $sum = $sum + $i; print “1부터 100까지의 합 = $sum”; ?>
for 문 (3/4) 프로그래밍 본격 시작 구구단 예제 (99_ex.php) <html> <body> <center> <table border=“1”> <tr> <td> </td> <?PHP for ($cols = 1; $cols <= 9; $cols++) print “<td>$cols</td>”; ?> </tr> <?PHP for ($rows = 1; $rows <= 9; $rows++) { print “<tr>\n”; print “<td>$rows</td>”; for ($cols = 1; $cols <= 9; $cols++) print “<td>” . $rows * $cols . “</td>”; print “</tr>\n”; } ?> </table> </center> </body> </html>
for 문 (4/4) 프로그래밍 본격 시작 구구단 예제 – 결과 화면
switch 문 프로그래밍 본격 시작 여러 개의 if문이 이어져있는 것과 같은 기능을 수행 하나의 변수에 따라 각각의 다른 코드를 실행하고자 할 때 편리 <?PHP $score = 80; switch ($score) { case 100: print “당신의 성적은 A입니다.”; break; case 80: print “당신의 성적은 B입니다.”; break; case 60: print “당신의 성적은 C입니다.”; break; case 40: print “당신의 성적은 D입니다.”; break; case 0: print “당신의 성적은 F입니다.”; break; default: print “당신의 성적은 … 모르겠네요.”; break; } ?>
재귀 호출 (Recursive Calls) (1/2) 프로그래밍 본격 시작 • 함수 자신이 자기 자신을 호출 • 큰 문제를 작은 문제로 나누어서 해결할 수 있기 때문에 알고리즘의 구현에 있어 많이 사용되는 구조 (예: merge sort) • Factorial을 구하는 프로그램 예 (factorial.php) • 수학적으로 보면, n! = n x (n-1)! functionfactorial ($n) { if ($n == 1) return (1); return ($n * factorial ($n – 1)); }
재귀 호출 (Recursive Calls) (2/2) 프로그래밍 본격 시작 • 피보나치 수열 (Fibonacci Sequence) (fibonacci.php) • 수열의 각 항은 바로 앞 두 항의 합으로 정의됨 • 이웃한 두 항에서 전항/후항 값이 황금비(1.618033)에 가까운 값을 가짐 <?PHP functionfibo ($num) { if ($num == 0 || $num == 1) return (1); return (fibo ($num – 1) + fibo ($num – 2)); } print “피보나치수열 출력” . “<br>”; for ($i = 1; $i <= 20; $i++) print (fibo ($i)) . “<br>”; ?>
global 변수 프로그래밍 본격 시작 함수 영역 밖에 있는 변수를 참조하는 경우 (함수 영역 내: local 변수)(global_var.php) <?PHP functioncounts() { global$i; $i = $i + 1; } $i = 0; while ($i < 10) { counts (); print$i . “<br>”; } ?>
static 변수 프로그래밍 본격 시작 이전의 함수 호출 시 가지고 있던 변수의 값 유지 (static_var.php) <?PHP functioninc() { static$i = 1; print $i . “<br>”; $i = $i + 1; } for ($j = 1; $j <= 10; $j++) inc (); ?>
Call By Value (1/2) 프로그래밍 본격 시작 PHP에서 기본적으로 사용하는 방법 파리메터의 (주소가 아닌) 값이 함수의 Argument로 전달됨 C의 예: abc(int a, int b) {…}, abc(x, y); (cbv.php) <?PHP functionswap ($a, $b) { $temp = $a; $a = $b; $b = $temp; } $i = 3; $j = 4; print "before swap = $i, $j <BR>" swap ($i, $j); print "after swap = $i, $j"; ?>
Call By Value (2/2) 프로그래밍 본격 시작 배열을 사용한 CBV 예제 (cbv_arr.php) <?PHP function my_reverse($param_array, $num) { // $temp_array = $param_array; for($i=0;$i < $num;$i++) $temp_array[$num-$i-1] = $param_array[$i]; $param_array = $temp_array; } $num_array = array (10, 20, 30, 40, 50); print "before = "; for($i=0;$i < sizeof($num_array);$i++) print “$num_array[$i] “; my_reverse($num_array, sizeof($num_array)); print “<BR>after = "; for($i=0;$i < sizeof($num_array);$i++) print “$num_array[$i] “; ?>
Call By Reference (1/2) 프로그래밍 본격 시작 파리메터의 (값이 아닌) 저장 장소(주소)가 함수의 Argument로 전달됨 C의 예: abc(int *a, int *b) {…}, abc(&x, &y) (cbr.php) <?PHP functionswap(&$a, &$b) { $temp = $a; $a = $b; $b = $temp; } $i = 3; $j = 4; print “before swap = $i, $j” . “<br>”; swap($i, $j); // same as swap(&$i, &$j); print “after swap = $i, $j” . “<br>”; ?>
Call By Reference (2/2) 프로그래밍 본격 시작 배열을 사용한 CBR 예제 (cbr_arr.php) <?PHP function my_reverse(&$param_array, $num) { // $temp_array = $param_array; for($i=0;$i < $num;$i++) $temp_array[$num-$i-1] = $param_array[$i]; $param_array = $temp_array; } $num_array = array (10, 20, 30, 40, 50); print "before = "; for($i=0;$i < sizeof($num_array);$i++) print “$num_array[$i] “; my_reverse($num_array, sizeof($num_array)); print “<BR>after = "; for($i=0;$i < sizeof($num_array);$i++) print “$num_array[$i] “; ?>
클래스 (Class) (1/9) 프로그래밍 본격 시작 • 용어 정리 • 데이타: attribute • 함수: method • 객체(object): 데이타 + 함수 • 클래스(class): 동종의 객체를 하나의 그룹으로 묶어 정의한 것 • 객체화(Instantiation): 클래스 정의에 의해 생성된 객체 변수
attribute method 클래스 (Class) (2/9) 프로그래밍 본격 시작 클래스 선언의 예 (class1.php) <?PHP classStudent { var$StudentID; var$StudentName; functionprintStudent ($id, $name) { print “ID: “ . $id . “<br>”; print “Name: “ . $name . “<br>”; } } $object = newStudent; $object->StudentID = 1234; $object->StudentName = “Kim”; $object->printStudent ($object->StudentID, $object->StudentName); ?>
클래스 (Class) (3/9) 프로그래밍 본격 시작 클래스 내부 Attribute 접근(this) (class2.php) <?PHP classStudent { var$StudentID; var$StudentName; functionprintStudent () { print “ID: “ . $this->StudentID . “<br>”; print “Name: “ . $this->StudentName . “<br>”; } } $object = newStudent; $object->StudentID = 1234; $object->StudentName = “Kim”; $object->printStudent (); ?>
Student $StudentID $StudentName printStudent() 클래스 (Class) (3/9) 프로그래밍 본격 시작 객체화 (Instantiation) 객체화 객체화 object1 object2 $StudentID=1234 $StudentName=Kim printStudent() $StudentID=7890 $StudentName=Lee printStudent()
클래스 (Class) (4/9) 프로그래밍 본격 시작 • Public vs. Private (class3.php) • 클래스 내의 Attribute는 기본적으로 (외부에서 보이는) Public 타입임 • (외부에서 보이지 않는) Private 타입을 표시하기 위해서는 Attribute 앞에 Underbar(“_”)를 붙임 classApple { var$_price; var$color; var$weight; functionprintApple () { $this->_printPrivate (); } function_printPrivate () { print$this->_price . $this->color . $this->weight . “<br>”; } }
클래스 (Class) (5/9) 프로그래밍 본격 시작 • 생성자 (Constructor) • 클래스를 생성(new)할 때 실행되는 함수 • 클래스와 동일한 이름을 사용하여 생성자 Method를 선언해야 함 <?PHP classfruit { var$_fruit_name; var$_price; var$_color; functionfruit ($name, $price, $color) { $this->_fruit_name = $name; $this->_price = $price; $this->_color = $color; }
클래스 (Class) (6/9) 프로그래밍 본격 시작 생성자 (계속) (class4.php) functionprint_fruit () { print “Fruit name: $this->_fruit_name<br>”; print “Fruit price: $this->_price<br>”; print “Fruit color: $this->_color<br>”; print “<br>”; } } $Apple = newfruit (‘Apple’, 1000, ‘red’); $Orange = newfruit (‘Orange’, 2000, ‘orange’); $Banana = newfruit (‘Banana’, 500, ‘yellow’); $Pear = newfruit (‘Pear’, 3000, ‘gray’); $Apple->print_fruit (); $Orange->print_fruit (); $Banana->print_fruit (); $Pear->print_fruit (); ?>
클래스 (Class) (7/9) 프로그래밍 본격 시작 • 상속 (Inheritance) • 부모 클래스로부터 자식 클래스가 특성(property)을 계승 받는 것 • 부모 클래스에서 선언되었던 Attribute와 Method를 자식 클래스에서 그대로사용 가능 • 예약어 “extends”를 사용하여 자식 클래스가 어느 부모 클래스로부터 상속받는지를 명시
People $Name $Age printPeople () Student Professor Staff $Name $Age $ID printPeople() printStudent() $Name $Age $Office_No printPeople() printProfessor() $Name $Age $Title printPeople() printStaff() 클래스 (Class) (8/9) 프로그래밍 본격 시작 상속되는 클래스 예 상속
클래스 (Class) (9/9) 프로그래밍 본격 시작 상속이 적용된 프로그램의 예 (class5.php) classPeople { var$Name; var$Age; functionprintPeople () { print “Name: “ . $this->Name . “<br>”; print “Age: “ . $this->Age . “<br>”; } } classProfessorextendsPeople { var$Office_No; functionprintProfessor () { $this->printPeople (); print “Office_No: “ . $this->Office_No . “<br>”; } }
정규 표현식 (Regular Expression) (1/6) 프로그래밍 본격 시작 • 정규 표현식이란? • 문자열에서 문자열 매칭 (string matching)을 하기 위한 패턴 (pattern) • 여러 가지 특수 문자들을 패턴으로 제공 • 예를 들어 “www.”과 “.co.kr” 사이에 영문 소문자 단어가 하나 이상 있는 인터넷 주소를 찾는 정규 표현식 • ^www\.[a-z]+\.co\.kr$
정규 표현식 (Regular Expression) (2/6) 프로그래밍 본격 시작 • 정규 표현식의 원칙 • 특수 문자가 아닌 것은 문자 그대로 매치 (예를 들어, 패턴이 영문자 A라면 이 패턴은 타겟 문자열에 있는 A와 매치) • 특수 문자 ^은 문자열 시작에 매치 • 특수 문자 $는 문자열 마지막에 매치 • 특수 문자 .은 어느 문자와도 매치 • 특수 문자 *는 이전 정규표현식이 0번 이상 반복되는 것에 매치 • 특수 문자 +는 이전 정규표현식이 1번 이상 반복되는 것에 매치 • 대괄호로 묶여진 문자의 집합은 그 집합에 속한 어느 문자와도 매치예를 들어 [bc]는 b 또는 c와 매치 • 어떤 문자를 한번이상 매칭하기 원할 때는 { } 사용예를 들면 [a-z]{5}는 5개의 소문자를 포함한 문자열을 매치
정규 표현식 (Regular Expression) (3/6) 프로그래밍 본격 시작 PHP에서 제공하는 문자 집합
정규 표현식 (Regular Expression) (4/6) 프로그래밍 본격 시작 • 문자열 매칭 함수 • string에서 정규 표현식으로 표현된 pattern을 찾음 • string 내에 pattern을 찾았으면 TRUE를 리턴하고 그렇지 않으면 FALSE를 리턴 • regs는 선택적으로 존재하는 배열이며, pattern에 괄호가 있을 경우 i번째 괄호의 패턴에 매치된 것은 배열 regs의 i번째 항목에 저장 (예제 reg_ex2.php 참조) • ereg() 함수는 대소문자를 구별하고, eregi() 함수는 대소문자를 구별하지 않음(case insensitive) boolereg(string pattern, string string [,array regs]) booleregi(string pattern, string string [,array regs])
정규 표현식 (Regular Expression) (5/6) 프로그래밍 본격 시작 정규 표현식 사용 예(1) (reg_ex1.php) <?PHP $urls = array (“www.samsung.co.kr”, “www.daum.net”, “www.donga.co.kr”, “www.chosun.com”, “www.kbs.co.kr”, “virus.donga.co.kr”, “www.LIST.co.kr”, “www.note.abc.co.kr”); print “ereg()를 사용했을 때<br>”; foreach ($urls as$url) if (ereg (“^www\.[a-z]+\.co\.kr$”, $url)) print “$url<br>”; print “eregi()를 사용했을 때<br>”; foreach ($urlsas$url) if (eregi (“^www\.[a-z]+\.co\.kr$”, $url)) print “$url<br>”; ?>
정규 표현식 (Regular Expression) (6/6) 프로그래밍 본격 시작 정규 표현식 사용 예(2) (reg_ex2.php) <?PHP $date1 = “2001-08-15”; $date2 = “2002-7-17”; if (ereg (“([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})”, $date1, $regs)) { print “$regs[3]/$regs[2]/$regs[1]<br>”; } if (ereg (“([0-9]{4})-([0-9]{1,2})-([0-9]{1,2})”, $date2, $regs)) { print “$regs[3]/$regs[2]/$regs[1]<br>”; } ?>
Form 필드를 사용한 입력 처리 (1/10) 프로그래밍 본격 시작 • 사용자가 입력한 데이타를 전달 받기 위한 도구로서, HTML의 Form 필드를 활용하고, 전달 받은 값을 PHP 프로그램으로 처리 • 사용 단계 • HTML로 사용자의 입력을 받을 Form을 생성 • 입력 받은 Form을 처리할 PHP 파일을 생성 • Form 사용법에 대해서는 강의노트 “04. CGI.pptx” 참조
Form 필드를 사용한 입력 처리 (2/10) 프로그래밍 본격 시작 예제 1: 두 수 및 연산자를 입력 받아 계산하기 HTML 프로그램(lecture10_form1.html) <form method=post action="lecture10_form1.php"> <input type="text" name="val01" size=5> <input type="text" name="operator" size=1> <input type="text" name="val02" size=5> <input type="submit" value="계산하기"> </form>
Form 필드를 사용한 입력 처리 (3/10) 프로그래밍 본격 시작 예제 1: 두 수 및 연산자를 입력 받아 계산하기 (계속) PHP 프로그램 (lecture10_form1.php) <? extract(array_merge($HTTP_GET_VARS, $HTTP_POST_VARS)); switch($operator) { case("+"): $result = $val01 + $val02; print $val01." + ".$val02." = ".$result; break; case("-"): $result = $val01 - $val02; print $val01." - ".$val02." = ".$result; break; case("*"): $result = $val01 * $val02; print $val01." * ".$val02." = ".$result; break; case("/"): $result = $val01 / $val02; print $val01." / ".$val02." = ".$result; break; } ?> GET 및 POST 방식으로 전달된 변수 값을 “변수 = 값”의 형태로 변환 다음 슬라이드 참조
Form 필드를 사용한 입력 처리 (4/10) 프로그래밍 본격 시작 • 예제 1: 두 수 및 연산자를 입력 받아 계산하기 (계속) • 변수 및 함수 설명 • $HTTP_GET_VARS: GET으로 전송된 변수 값을 저장하는 배열배열의 원소를 지칭하려면, $HTTP_GET_VARS[“변수명”] 사용 • $HTTP_POST_VARS: POST로 전송된 변수 값을 저장하는 배열배열의 원소를 지칭하려면, $HTTP_POST_VARS[“변수명”] 사용 • array_merge(array, array, …): 모든 배열을 통합하는 함수 • extract(array): 배열에서 키와 값을 변수와 값으로 추출하는 함수 • In conclusion, HTML에서 전달된 변수를 PHP 프로그램에서 사용하기 위해서는 PHP 문서 맨 앞에 다음을 덧붙여 사용함 extract(array_merge($HTTP_GET_VARS, $HTTP_POST_VARS));
Form 필드를 사용한 입력 처리 (5/10) 프로그래밍 본격 시작 예제 2: 리스트로 구구단 출력하기 HTML 프로그램 (lecture10_form2.html) <form method=post action="lecture10_form2.php"> <select name="val01" size="1"> <option value="2">2단</option> <option value="3">3단</option> <option value="4">4단</option> <option value="5">5단</option> <option value="6">6단</option> <option value="7">7단</option> <option value="8">8단</option> <option value="9">9단</option> </select> <input type="submit" value="결과 보기"> </form>