控制流

上一篇:基础运算
当前篇:控制流
下一篇:集合类型

从大体来讲控制流分为条件语句和循环语句,而这两种语句差不多就是程序的生命全部,条件语句好比黄色的树林里分出两条路,可惜我不能同时去涉足,循环语句好比时光荏苒,斗转星移

循环语句

下面我们用代码来输出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)

上一篇:基础运算
当前篇:控制流
下一篇:集合类型

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • [The Swift Programming Language 中文版]本页包含内容: Swift提供了多种流程控...
    风林山火阅读 624评论 0 0
  • ** 1、 For-In 循环** 你可以使用 for-in 循环来遍历一个集合中的所有元素,例如数字范围、数组...
    平凡之路561阅读 175评论 0 0
  • Swift 提供了类似 C 语言的流程控制结构,包括可以多次执行任务的for和while循环,基于特定条件选择执行...
    OrangeInce阅读 342评论 0 0
  • 有一个美丽的地方,那里彩云在飘荡~~ 大四的第二个学期真是浪的飞起~~除了泡面啤酒麻将,还因为版纳之旅,认识了海香...
    耳朵冬阅读 512评论 0 3
  • 本文参加#感悟三下乡,青春筑梦行#活动,本人承诺,文章内容为原创,且未在其他平台发表过。 作为一名同伴员,我...
    00c906a4ba74阅读 395评论 0 1