Menu
CoddyTech

Vòng lặp lồng nhau

Thuộc phần Kiến thức nền tảng trong hành trình GDScript của Coddy. Bài học 49 trên 92.

Vòng lặp lồng nhau là vòng lặp nằm bên trong một vòng lặp khác. Với mỗi lần lặp của vòng lặp bên ngoài, vòng lặp bên trong chạy hết tất cả các lần lặp:

var rows := 3
var cols := 2
for i in range(rows):
	print("Outer: ", i)
	for j in range(cols):
		print("  Inner: ", j)
Outer: 0
  Inner: 0
  Inner: 1
Outer: 1
  Inner: 0
  Inner: 1
Outer: 2
  Inner: 0
  Inner: 1

Khối lệnh bên trong được thụt lề hai cấp. Khối này chạy tổng cộng rows x cols = 3 x 2 = 6 lần. j lại bắt đầu từ 0 mỗi khi vòng lặp bên ngoài chạy, còn rows và cols giữ nguyên và chỉ cho các vòng lặp biết khi nào cần dừng.

Hai vòng lặp cần các tên biến khác nhau. Viết for i bên trong một for i khác sẽ gây lỗi, và lỗi này được báo trước khi chương trình chạy.

Vòng lặp lồng nhau hữu ích khi xử lý hàng và cột. print() luôn kết thúc dòng, vì vậy để in một hàng dấu sao, trước tiên hãy tạo hàng đó trong một chuỗi rồi in ra sau khi vòng lặp bên trong hoàn tất:

for row in range(2):
	var line := ""
	for col in range(3):
		line += "*"
	print(line)
***
***

Vòng lặp ngoài chạy một lần cho mỗi hàng, còn vòng lặp trong thêm một dấu sao cho mỗi cột. Một câu lệnh break bên trong vòng lặp trong chỉ dừng vòng lặp trong: vòng lặp ngoài tiếp tục với lần lặp tiếp theo.

challenge icon

Thử thách

Dễ

Chương trình đọc hai số nguyên: rows và cols.

Dùng các vòng lặp lồng nhau để in một hình chữ nhật gồm các dấu sao (*), với rows dòng và mỗi dòng có cols dấu sao.

Với đầu vào 3 và 4, đầu ra là:

****
****
****

Dùng một biến đếm mới cho mỗi vòng lặp (ví dụ: row cho các dòng và col cho các dấu sao trên một dòng), rồi so sánh biến đó với rows hoặc cols. Đừng thay đổi chính rows và cols: mỗi dòng đều cần cols.

Tự làm thử

extends Node

func _ready():
	var rows := int(OS.read_string_from_stdin())
	var cols := int(OS.read_string_from_stdin())
	# Vòng lặp (loop) ngoài: mỗi hàng một lần lặp
	# Vòng lặp trong: thêm một dấu sao cho mỗi cột
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Kiến thức nền tảng

Tự luyện tập: Trình biên dịch GDScript online