美文网首页
逻辑分支和嵌套三目运算

逻辑分支和嵌套三目运算

作者: 落叶刺客 | 来源:发表于2017-08-12 21:30 被阅读62次
问题:找出1~100中所有能被3整除,或者能被5整除,或者既能被3整除又能被5整除的数。

  如果只是单纯的问题求解,那么这个答案就比较简单了,只要逻辑捋顺畅了,用常规的for ... in循环就可以解决:

func challenge() {
    for i in 1...100 {
        if i % 3 == 0 && i % 5 == 0 {
            print("\(i)既可以被3整除,又可以被5整除")
        } else if i % 3 == 0 {
            print("\(i)可以被3整除")
        } else if i % 5 == 0 {
            print("\(i)可以被5整除")
        } else {
            print("\(i)既不能被3整除,又不能被5整除")
        }
    }
}

challenge()

  还是用for ... in循环和逻辑分支,我再给一个答案。不要小看这一个答案,因为它对我们后面嵌套三目运算符的理解很有帮助:

func challenge1() {
    for i in 1...100 {
        if i % 3 == 0 {
            if i % 5 == 0 {
                print("\(i)既可以被3整除,又可以被5整除")
            } else {
                print("\(i)可以被3整除")
            }
        } else if i % 5 == 0 {
            print("\(i)可以被5整除")
        } else {
            print("\(i)既不能被3整除,又不能被5整除")
        }
    }
}

challenge1()

  如果你看过我前面的这个系列的笔记,就应该知道,问题不应该就这么简单对不对?所以我下面要给一个装逼的答案:

func challenge2() {
    (1...100).forEach {
        print($0 % 3 == 0 ? $0 % 5 == 0 ? "\($0)既可以被3整除,又可以被5整除" : "\($0)可以被3整除" : $0 % 5 == 0 ? "\($0)可以被5整除" : "\($0)既不能被3整除,又不能被5整除")
    }
}

challenge2()

  上面的代码看起来非常简洁,但是有点鬼畜对不对?其实主要是用到了两个知识点:一个是forEach(_: )函数;另外一个就是三目运算符的嵌套,它承包了所有的鬼畜。下面我们将对这两个知识点做重点讲解。

  先来看forEach(_: )函数。它接收一个闭包作为其参数,实际功能和for ... in循环差不多,都可以对某个序列进行遍历,并且遍历的结果一致。但是,forEach(_: )函数又与for ... in循环有两个明显的区别:

1、不能在forEach(_: )函数的闭包中使用breakcontinue语句;
2、可以在forEach(_: )函数的闭包中使用return语句退出当次调用

  我们把forEach(_: )函数闭包中省略的参数名给补上,这样一来就容易理解多了:

func challenge2() {
    
    (1...100).forEach { (num) in
        print(num % 3 == 0 ? num % 5 == 0 ? "\(num)既可以被3整除,又可以被5整除" : "\(num)可以被3整除" : num % 5 == 0 ? "\(num)可以被5整除" : "\(num)既不能被3整除,又不能被5整除")
    }
}

challenge2()

  接下来再看那一坨鬼畜的嵌套三目运算符。其实三目运算符的本质还是if-else结构的变体,如果你确实不明白,可以考虑给它加小括号,就跟我们刚开始学习运算符优先级的时候一样,它可以有效的帮助你减少懵逼:

print(num % 3 == 0    ?    (num % 5 == 0 ? "\(num)既可以被3整除,又可以被5整除" : "\(num)可以被3整除")   :   (num % 5 == 0 ? "\(num)可以被5整除" : "\(num)既不能被3整除,又不能被5整除"))

  我特意用小括号和多个空格将嵌套三目运算符的逻辑结构做了一个区隔,这样以来,你很容易就能发现,它其实就是上面第二种答案的逻辑结构,只不过我们将if-else用三目运算符给替换了。

相关文章

  • 逻辑分支和嵌套三目运算

    问题:找出1~100中所有能被3整除,或者能被5整除,或者既能被3整除又能被5整除的数。   如果只是单纯的问题求...

  • Swift学习 -- 逻辑分支

    什么是逻辑分支? 逻辑分支即if / else if / switch / 三目运算符 / guard等判断语句,...

  • Swift 逻辑分支 if / switch

    逻辑分支的分类 if语句 switch语句 三目运算符 (相当于 If else) if分支语句 注意:在swi...

  • 2 Swift中的分支语句和循环语句

    1. 逻辑分支 1.1 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行...

  • Swift基本语法之逻辑分支

    逻辑分支 一. 分支的介绍 分支即if/switch/三目运算符等判断语句 通过分支语句可以控制程序的执行流程 二...

  • swift基础语法(三)——逻辑分支

    逻辑分支主要包括: if语句 三目运算符 switch语句 guard if语句 和OC中if语句有一定的区别判断...

  • Swift4 控制流

    布尔类型 布尔判断 逻辑判断 if 分支判断 三目运算符 While 循环 repeat-while 循环 区间 ...

  • swift语法(2)

    1.逻辑分支 分支:if/switch/三目运算符 ifif后面的()可以省略swift中必须有明确的真假Bool...

  • swift基础---逻辑分支

    一.介绍下逻辑分支 分支也就是if,switch,三目运算等判断语句 通过分支语句可以控制程序都执行流程 二.if...

  • [easy][Tree]617. Merge Two Binar

    原题是: 代码是: 总结: 这个题的逻辑分支,我用到了Python里的三目运算符,不在是 ?:而是if else:...

网友评论

      本文标题:逻辑分支和嵌套三目运算

      本文链接:https://www.haomeiwen.com/subject/nqejrxtx.html