while문

 

while 문은 조건이 유지되는 동안 반복한다.

 

아래 코드의 경우 a라는 테이블에서 값을 다 꺼내올 때 까지 조건이 유지되고 조건식이 a[count]가 nil 이 되었을 때 false 가 되어 반복을 탈출한다.

local count = 1

a = {1, 3, 5, 7, 9}

while a[count] do
    print(a[count])
    count = count + 1
end

print(a[count])

 

repeat문

다른 언어의 do while에 닮은 반복문이다. 조건식을 until (실행 후)에서 검색한다.

 

i = 0

repeat
    print("repeat " .. i)
    i = i + 1
until i == 3

 

 

for문

*numeric for문

 

인덱스(카운터)로 반복하는 for문이다. C언어의 for(int i = 0; i <= length; i++) 같은 것을 생각하면 된다.

 

print("numeric for #1")

for i = 1, 5 do
    print(i)
end

-- numeric for #2

print("numeric for #2")

for i = 5, 1, -1 do
    print(i)
end

-- numeric for #3

print("numeric for #3")

for i = 1, math.huge do
    if (i*2 % 100 == 0) then
        print(i)
        break
    end
end

*generic for문

 

제네릭은 파이썬의 for문 enumerate과 비슷하다. 테이블을 사용해서 연속적 자료구조의 모든키와 값을 가져온다. 루아에서도 파이썬 처럼 iterator 를 직접 만들 수 있다. iterator 챕터에서 다루게 될 내용이다.

 

days = {
    "월요일",
    "화요일",
    "수요일",
    "목요일",
    "금요일",
    "토요일",
    "일요일",
}

for k, v in pairs(days) do
    print(k .. " : " .. v)
end

 

*for문으로 도형그리기 (사각형, 삼각형)

전통의 for문 도형 그리기를 해보자. 계산을 하려고 하기보다는 패턴에 집중하면 어렵지 않다. 도형 그리기는 블록쌓기에 가깝다. 지금은 * 문자로 표현하지만 실제 이런 방식으로 게임의 그래픽을 표현하는 경우가 꽤 있다. (테트리스 게임 등)

 

콘솔 출력문의 위치에 윈도우의 그래픽 라이브러리로 도형을 그려주면 2D 컴퓨터 그래픽을 만들 수 있다.

print("Please enter the height:\n")
-- height = io.read()
height = 7

-- 정사각형

print("---- square ---\n")

for i = 1, height do
    for j=1, height do
        io.write("*")
    end
    print()
end

-- 삼각형 #1

print("\n---- triangle #1 ---\n")

for i = 1, height do
    for j=1, i do
        io.write("*")
    end
    print()
end

-- 삼각형 #2

print("\n---- triangle #2 ---\n")

for i = 1, height do
    for j=height, i, -1 do
        io.write("*")
    end

    print()
end

-- 삼각형 #3

print("\n---- triangle #3 ---\n")

for i = 1, height do
    for j=height, i, -1 do
        io.write("*")
    end
    io.write(" ")
    for j=1, i do
        io.write("*")
    end
    print()
end

-- 삼각형 #4

print("\n---- triangle #3 ---\n")

for i = 1, height do
    for j=height, i, -1 do
        io.write("*")
    end
    io.write(" ")
    for j=1, i do
        io.write("*")
    end
    io.write(" ")
    for j=1, i do
        io.write("*")
    end
    io.write(" ")
    for j=height, i, -1 do
        io.write("*")
    end
    print()
end

print("\n---- triangle #4 ---\n")

for i = 1, height do
    for j=height, i, -1 do
        io.write(" ")
    end
    io.write(" ")
    for j=1, i do
        io.write("*")
    end
    -- io.write(" ")
    for j=2, i do
        io.write("*")
    end
    print()
end

print("\n---- triangle #5 ---\n")

for i = 1, height do

    io.write(" ")
    for j=1, i do
        io.write(" ")
    end
    for j=height, i, -1 do
        io.write("*")
    end
    -- io.write(" ")
    for j=height-1, i, -1 do
        io.write("*")
    end
    print()
end

 

공유하기

facebook twitter kakaoTalk kakaostory naver band