프로그래밍/Ruby

Ruby 프로그래밍 - 5. 반복문

seungdols 2015. 2. 19. 15:52


반복문이란?



무언가 동작하는데 반복적인 것들이 필요로 할 때 쓰는 문법이다.

어떤 변수의 값을 10번 출력한다거나 변수의 값을 지속적으로 출력한다거나? 그런 상황?

혹은 출력 작업이 아니더라도 반복적인 작업의 경우에는 반복문을 사용한다.


대표적으로 While, For 문이라고 부르는 것들이 있다.


While문



while boolean or 비교 연산

<수행 문장>

end


만약 특정 조건을 넣는다면, 

<수행 문장>

밑에 변수의 증감시키는 문장을 추가해야 한다.


irb(main):165:0> i = 0
=> 0
irb(main):166:0> while i < 10
irb(main):167:1> puts 'seungdols'
irb(main):168:1> if i%5 == 0
irb(main):169:2> puts 'company'
irb(main):170:2> end
irb(main):171:1> i += 1
irb(main):172:1> end
seungdols
company
seungdols
seungdols
seungdols
seungdols
seungdols
company
seungdols
seungdols
seungdols
seungdols
=> nil


코드를 설명하자면, if i%5 == 0에서 '%'퍼센트는 '나머지 연산자라고 한다'

보통 5로 i값을 나누었을 때 나머지 값을 반환하게 된다. 그러므로 말로 풀어 보면

i 값을 5로 나누면 나머지가 0이면 True가 되어 puts 문장을 수행하게 된다. 

그리고 while i < 10 이라는 조건을 걸었다. 그 말은 i 값이 10보다 작으면 True 값이라는 말이다.

그런데 i값에 대한 + 1을 해주는 문장이 없다면 무한 반복 될 것이다.

아래와 같게 된다.

while true

puts '1'

end 

1이 무한히 출력 될 것이다. 

그럴 땐 ctrl + d눌러 강제종료를 해야 한다.



For문



For 변수 [, 변수 ...]  in 표현식 [do]

<수행 문장>

end

표현식의 경우 예로 0..9를 하게 되면 변수 값에 0 ~ 9를 차례로 대입하여 동작하는 순서다.

irb(main):173:0>
irb(main):174:0> i = 0
=> 0
irb(main):175:0> for i in 0..5
irb(main):176:1> puts i
irb(main):177:1> end
0
1
2
3
4
5
=> 0..5
irb(main):178:0> for i in 0..10
irb(main):179:1> puts "suengdols #{i}"
irb(main):180:1> end
suengdols 0
suengdols 1
suengdols 2
suengdols 3
suengdols 4
suengdols 5
suengdols 6
suengdols 7
suengdols 8
suengdols 9
suengdols 10
=> 0..10


#{}이 문장을 안에 변수를 넣으면 해당 변수 값을 출력하게 된다.

즉, " " 안에 있는 문장을 문자열로 인식하지만, #{변수}이렇게 표현된 형식은 해당 변수 값으로 치환되고, 그 후에 문자열로 인식 된다. 그러면 한 문장에서 문자열과 변수:(현재코드상) 숫자값이 동시에 출력 할 수 있게 된다.

단, '' 으로 문자열을 쓰면 #{}이렇게 변수값을 찍으려 해도 그 자체 문자열로 나온다. 즉, 코드 치환이 필요한 문자열의 경우에는 "" 쌍따옴표를 써야한다는 말이다. Tip으로 알아두자.

 

제어


반복문 중간에 멈출 수 없을까? 

끝까지 기다려야 하나? 그런 고민에 대한 해결법이 있다.


break문



보통 반복작업 중에 특정 조건에서 멈추고 싶을 때를 위한 문법이다.


irb(main):181:0>
irb(main):181:0> for i in 0..10
irb(main):182:1> if i == 5
irb(main):183:2> break
irb(main):184:2> end
irb(main):185:1> puts 'seungdols'
irb(main):186:1> end
seungdols
seungdols
seungdols
seungdols
seungdols
=> nil

5번째 이후 반복문이 종료 되었다. 이렇게 조건절에 break를 통한 반복문 종료가 가능하다.

next문



반복 작업중에 특정 조건에서 일시정지를 시키되, 반복작업은 지속 되게 하기 위한 문법이다.

irb(main):187:0> for i in 0..10
irb(main):188:1> if i == 5
irb(main):189:2> next
irb(main):190:2> end
irb(main):191:1> puts "seungdols #{i}"
irb(main):192:1> end
seungdols 0
seungdols 1
seungdols 2
seungdols 3
seungdols 4
seungdols 6
seungdols 7
seungdols 8
seungdols 9
seungdols 10
=> 0..10

특정 조건인 5번째에서 반복문은 if문에 의해 일시종료 되었다가? 혹은 뛰어 넘게 되고 다음 문장을 다시 실행하게 되는 것이다. 필요 할까 싶지만 분명 필요한 상황이 오게 된다.

반복문으로 구구단을 만들어 보자!

결과는 이렇게 되어있다.

아래에 순서가 나와 있다. 가이드 라인일 뿐, 똑같이 하지 않아도 무방하다.


2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
2 * 7 = 14
2 * 8 = 16
2 * 9 = 18
3 * 1 = 3
3 * 2 = 6
3 * 3 = 9
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18
3 * 7 = 21
3 * 8 = 24
3 * 9 = 27
4 * 1 = 4
4 * 2 = 8
4 * 3 = 12
4 * 4 = 16
4 * 5 = 20
4 * 6 = 24
4 * 7 = 28
4 * 8 = 32
4 * 9 = 36
5 * 1 = 5
5 * 2 = 10
5 * 3 = 15
5 * 4 = 20
5 * 5 = 25
5 * 6 = 30
5 * 7 = 35
5 * 8 = 40
5 * 9 = 45
6 * 1 = 6
6 * 2 = 12
6 * 3 = 18
6 * 4 = 24
6 * 5 = 30
6 * 6 = 36
6 * 7 = 42
6 * 8 = 48
6 * 9 = 54
7 * 1 = 7
7 * 2 = 14
7 * 3 = 21
7 * 4 = 28
7 * 5 = 35
7 * 6 = 42
7 * 7 = 49
7 * 8 = 56
7 * 9 = 63
8 * 1 = 8
8 * 2 = 16
8 * 3 = 24
8 * 4 = 32
8 * 5 = 40
8 * 6 = 48
8 * 7 = 56
8 * 8 = 64
8 * 9 = 72
9 * 1 = 9
9 * 2 = 18
9 * 3 = 27
9 * 4 = 36
9 * 5 = 45
9 * 6 = 54
9 * 7 = 63
9 * 8 = 72
9 * 9 = 81
=> 2..9
irb(main):203:0>


1. for문의 사용 표현은 2..9 , 1..9 반복문의 중첩이 필요하다.

2. puts #{변수} * #{변수} = #{변수*변수}를 하게 되면 아래 형식처럼 나온다. 

3. end 또한 두 번.

4. 순서 대로 해보자. 그래도 안되면 txt 파일을 보고 실행 해보자.

*파일은 txt 파일이다. 루비 파일이 아니므로 따라서 입력 해야 한다.


ruby 구구단.txt


반응형