从大体来讲控制流分为条件语句和循环语句,而这两种语句差不多就是程序的生命全部,条件语句好比黄色的树林里分出两条路,可惜我不能同时去涉足,循环语句好比时光荏苒,斗转星移
循环语句
下面我们用代码来输出0~9这10个数字
print(0)
print(1)
print(2)
print(3)
print(4)
print(5)
print(6)
print(7)
print(8)
print(9)
为什么不是1-10,不是计算机专业出身的话需要适应一下,计算机的计数是从0开始算,而不是1,所以写程序时也要习惯性从0开始算
这样的代码是不是很傻,下面我们用 for in 循环来完成
for number in 0..<10 {
print(number)
}
这里先不用去理解 0..<10 是个什么东西,我们可以把它理解为数学中的半开区间 [0,10) ,也可以写成闭区间 [0, 9]
for number in 0...9 {
print(number)
}
我们再用第二种循环语句 while 循环来实现,while 循环的语法如下:
while condition {
//do something
}
while 语句的规则就是,如果条件 condition 成立,就执行大括号中的代码,直到条件不成立为止:
var number = 0
while number <= 9 {
print(number)
number += 1
}
//如果 number 小于等于9,输出 number 然后将 number 的值加1,继续循环
//直到 number 大于9,循环结束
while 语句一定要注意循环条件必须要有一个结束,否则无限循环下去,程序就卡死了,就像下面这样:
while true {
print("无限循环")
}
循环永远无法结束,应用卡死不动,如果你输入了这段代码,还麻烦强制重启下Xcode
下面我们用while循环来输出100以内的所有奇数:
var num = 0
while num <= 100 {
if num % 2 != 0 {
print(num)
}
num += 1
}
使用 break 强制结束循环:
var num = 0
while true {
if num > 100 {
//当num增加大于100时,使用 break 强制结束整个循环
break
}
if num % 2 != 0 {
print(num)
}
num += 1
}
循环语句中还有个常用的 continue 语句,它的意思是跳过本次循环,直接进入下个循环,我们用下面的代码来计算 0 - 100 以内所有偶数的和:
var sum = 0
for num in 0...100 {
if num % 2 != 0 {
//这个数不是偶数,那么跳过下面的代码,继续下一次迭代
continue
}
sum += num
}
print(sum)
实际上通常 continue 可以用条件语句代替
var sum = 0
for num in 0...100 {
if num % 2 == 0 {
//如果这里是很长很长的一串代码的时候,用 continue 的方式是不是会好看些呢
sum += num
}
}
print(sum)
小作业:用 while 语句并使用 continue 来计算 0 - 100 以内所有偶数的和
循环中可以有循环,循环中的循环还可以有循环,叫做嵌套循环,运行下面的代码,聪明的你一定能看懂是什么意思
for num in 0...9 {
for index in 0...num {
//这是 print 的不同表现形式,请先不要在意,
//我这里只是想把这层循环中的每个数打印在一起
print(index, separator: "", terminator: "")
}
//这里的 print 是为了换行,可以根据运行结果中换行的位置来理解多重循环
print("")
}
//运行结果如下
//0
//01
//012
//0123
//01234
//012345
//0123456
//01234567
//012345678
//0123456789
条件语句
前面我们已经认识了 if-else 条件语句了,它还可以有多层判断
let today = 1
if today == 1 {
print("星期一吃🐔")
} else if today == 2 {
print("星期二吃🐟")
} else if today == 3 {
print("星期三吃🐂")
} else {
print("其它时候吃土")
}
当 else if 比较多的时候,是不是写起来很烦,看起来也累呢,现在我们新认识一个 switch-case 语句
let today = 1
switch today {
case 1:
print("星期一吃🐔")
case 2:
print("星期二吃🐟")
case 3:
print("星期三吃🐂")
default:
print("其它时候吃土")
}
是不是比 if-else 好看多了呢,switch 表示对条件进行匹配,case 表示如果是这个结果就执行对应的代码,default 跟在最后表示所有 case 都没匹配上就执行它,case 后面还可以跟多个条件,用逗号隔开
let today = 1
switch today {
case 1, 3, 5:
print("星期一,三,五吃🐔")
case 2, 4, 6:
print("星期二,四,六吃🐟")
default:
print("星期天吃土")
}
通常情况下,条件语句的顺序是可以随意调整的,这需要各个条件之间没有关联,如果条件之间有关联,其顺序会影响结果
举个例子,如果我们要根据考试成绩发奖金,70分及以上奖励10块钱,80分及以上奖励20块钱,90分及以上奖励30块钱,根据描述顺序我们很容易写出下面的代码:
let prize: Int
let score = 90
if score >= 70 {
prize = 10
} else if score >= 80 {
prize = 20
} else if score >= 90 {
prize = 30
} else {
prize = 0
}
print(prize)
代码出问题了,明明是90分应该奖励30块,得出的结果却是10块,因为条件句从上到下执行,90大于等于70已经满足的条件,语句结束,不会再执行 else 之后的代码了,把条件顺序倒过来就正确了:
let prize: Int
let score = 90
if score >= 90 {
prize = 30
} else if score >= 80 {
prize = 20
} else if score >= 70 {
prize = 10
} else {
prize = 0
}
print(prize)