Swift 第一周 小结

print函数

print("Hello,world")

: 默认情况下print函数输出后会自动换行,如果不希望换行可以通过指定terminator参数设定自己的终止符来替换掉默认的换行符

Naming Constants and Variables (标识符的命名规则)

  1. 字母(Unicode字符)、数字、下划线,数字不能开头
  2. 大小写敏感
  3. 不能使用关键字做标识符
  4. 驼峰标识 - 第一个单词全小写以后每个单词首字母大写
  5. 见名知意
    : var用来定义变量,let用来定义常量
print("请输入圆的半径: ", terminator: "" )
let r = inputDouble()
let perimeter = 2 * M_PI * r
let area = M_PI * r * r
print(String(format: "周长: %.2f", perimeter))
print(String(format: "面积: %.2f", area))

: 正常情况下表示整数首选Int, 表示小数首选Double, 表示字符串首选String, 表示真假首选Bool.

String Interpolation (字符串插值)

print("\\\\(a) + \\\\(b) = \\\\(a + b)")
print("\\\\(a) - \\\\(b) = \\\\(a - b)")
print("\\\\(a) * \\\\(b) = \\\\(a * b)")
print("\\\\(a) / \\\\(b) = \\\\(a / b)")
print("\\\\(a) % \\\\(b) = \\\\(a % b)")

转义字符 - \\n(换行符), \\t(制表符)

print("Hello, World!", terminator: "\\\\n")
print("大家好", terminator: "\\\\t")
print("")

Swift中的运算

: 运算符
-算术运算符: + - * / %
-关系运算符: == != > >= < <=
-短路运算符: && ||

: Swift中加减乘除运算的左右两边类型必须一致

let x: Double = 321.99999
print(x / Double(b))
print(Int(x) / b)

: && - 短路与运算(而且) || - 短路或运算(或者)

let year = 2000
let c1 = year % 4 == 0      // 四年一闰
let c2 = year % 100 != 0    // 百年不闰
let c3 = year % 400 == 0    // 四百年又闰
if (c1 && c2) || c3 {
    print("\\\\(year)年是闰年")
}
else {
    print("\\\\(year)年不是闰年")
}

: 用科学计数法表示小数

y = 1.23e4
print(y)    // 12300.0
y = 1.23e-4
print(y)    // 0.000123

: 忽略不计

y = 0xAp3
print(y)    // 80.0
y = 0x10p-2
print(y)    // 4.0

: 复合赋值运算符

a += b
a -= b
a *= b
a /= b
a %= b
print(a)

: 元组(tuple) - 用一个变量或者一个常量保存多项数据信息的类型

(x, y) = (y, x)      // 用元组交换两个变量的值

: 比较运算符 (关系运算符) 产生bool类型的值要么是true,要么是false
: 三元条件运算符 -- question ? answer1 : answer2 (问号前面是一个产生Bool类型的变量常量或表达式,如果其值为true就取冒号前面的值,如果其值为False则取冒号后面的值)

  • 三元条件运算的?前面一定要加空格!!!
let msg = username == "admin" && password == "123456" ? "登录成功!!!" : "非法用户!!!"

: 可以使用圆括号改变运算顺序

分支语句

: if - else

  • 输入年和月 输出这个月有多少天
print("请输入年和月用空格隔开(例如: 1980 2)")
let year = inputInt()
let month = inputInt()
let day: Int
if month < 1 || month > 12 {
    print("瓜西西的")
    exit(0) // 程序退出不再执行
}
else if month == 2 {
    day = year % 4 == 0 && year % 100 != 0 || year % 400 == 0 ? 29 : 28
}
else if month == 4 || month == 6 || month == 9 || month == 11 {
    day = 30
}
else {
    day = 31
}
print("\\\\(year)年\\\\(month)月有\\\\(day)天")
  • 分段函数求值
print("x = ", terminator: "")
let x = inputDouble()
let y: Double
if x < -1 {
    y = 2 * x - 5
}
else if x <= 1 {
    y = 3 * x + 7
}
else {
    y = 4 * x - 3
}
print("f(\\\\(x)) = \\\\(y)")

: switch - case 语句

  • 摇色子决定做什么事
let face = Int(arc4random_uniform(6)) + 1
switch face {
case 1:
    print("扮鬼脸")
case 2:
    print("吻对方")
case 3:
    print("真心话")
case 4:
    print("唱一首")
case 5:
    print("听指挥")
case 6:
    print("脱一件")
default:
    print("色子坏了!!!")
}
  • IT从业人员等级评定
print("请输入你的月薪: ", terminator: "")
let salary = inputInt()
if salary >= 0 {
    switch salary {
    case 0:
        print("你是一个无业游民")
    case 1...30000:
        print("你是一个小码畜")
    case 30001...60000:
        print("你是一个小码奴")
    case 60001...100000:
        print("你是一个大码农")
    case 100001...200000:
        print("你是一个光荣的IT民工")
    case 200001...500000:
        print("你是一个优秀的IT工程师")
    case 500001..<10000000:
        print("你是IT精英")
    case 10000000..<100000000:
        print("你是IT大哥, 我服")
    default:
        print("你是头上有光环的IT领袖, 求带")
    }
}
else {
    print("你丫有病!!!")
}

循环语句

: for循环

  • 水仙花数 - 153 = 1^3 + 5^3 + 3^3
func cube(n: Int) -> Int {
    return n * n * n
}
for i in 100...999 {
    let a = i % 10          // 个位
    let b = i / 10 % 10     // 十位
    let c = i / 100         // 百位
    if i == cube(a) + cube(b) + cube(c) {
        print(i)
    }
}
  • 猴子吃桃
var sum = 1
for _ in 0..<9 {
    sum = (sum + 1) * 2
}
print(sum)
  • 求m的n次方(m和n都是正整数)
print("m = ", terminator: "")
let m = inputInt()
print("n = ", terminator: "")
let n = inputInt()
var val = 1.0
for _ in 0..<n {
    val *= Double(m)
}
print("\\\\(m)的\\\\(n)次方 = \\\\(val)")

: while 循环 (有可能一次都不执行)

  • 求阶乘
print("n = ", terminator: "")
let n = inputInt()
var val = 1.0
var i = 2
while i <= n {
    val *= Double(i)
    i += 1
}
print("\\\\(n)! = \\\\(val)")
  • 求1-100之间的偶数的和
var sum = 0
var i = 2
while i <= 100 {
    sum += i
    i += 2
}
print(sum)
  • 用for循环求1-100之间的偶数的和
var sum = 0
for i in 1...100 {
    if i % 2 == 0 {
        sum += i
    }
}
print(sum)

: repeat - while 循环(程序至少执行一次)

var i = 1
repeat {
    print("\\\\(i). Hello, world!")
    i += 1
} while i <= 100

: 分支语句&&循环语句的重要应用

  • Craps赌博游戏
func roll() -> Int {
    return Int(arc4random_uniform(6)) + 1
}
var money = 1000
repeat {
    print("玩家总资产: ¥\\\\(money)元")
    var debt: Int
    repeat {
        print("请下注: ", terminator: "")
        debt = inputInt()
    } while debt <= 0 || debt > money
    var needsGoOn = false
    let firstPoint = roll() + roll()
    print("玩家摇出了\\\\(firstPoint)点")
    switch firstPoint {
    case 7, 11:
        money += debt
        print("玩家胜!!!")
    case 2, 3, 12:
        money -= debt
        print("庄家胜!!!")
    default:
        needsGoOn = true    // 游戏继续
    }
    while needsGoOn {
        let currentPoint = roll() + roll()
        print("玩家摇出了\\\\(currentPoint)点")
        if currentPoint == 7 {
            money -= debt
            print("庄家胜!!!")
            needsGoOn = false
        }
        else if currentPoint == firstPoint {
            money += debt
            print("玩家胜!!!")
            needsGoOn = false
        }
    }       } while money > 0            print("你破产了!!!") 
  • 百钱百鸡 - GET: 穷举法(穷尽所有的可能性直到找到正确答案)
for x in 0...20 {
    for y in 0...33 {
        let z = 100 - x - y
        if 5 * x + 3 * y + z / 3 == 100 && z % 3 == 0 {
            print("公鸡: \\\\(x), 母鸡: \\\\(y), 小鸡: \\\\(z)")
        }
    }
}
  • 冒泡排序: 两两比较, 前面的元素比后面的元素大就交换位置
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
    var swapped = false
    for j in 0..<array.count - 1 - i {
        if array[j] > array[j + 1] {
            (array[j], array[j + 1]) = (array[j + 1], array[j])
            swapped = true
        }
    }
    if !swapped {
        break
    }
}
print(array)
  • 简单选择排序: 每次从剩下元素中找最小的元素放到对应的位置
var array = [29, 98, 35, 12, 47, 66, 53, 79]
for i in 0..<array.count - 1 {
    var minIndex = i
    for j in i + 1..<array.count {
        if array[j] < array[minIndex] {
            minIndex = j
        }
    }
    (array[i], array[minIndex]) = (array[minIndex], array[i])
}
print(array)

数组

: 创建数组

var array1 = [String]()
var array2: [String] = []
var array3 = ["apple", "grape", "banana", "apple", "orange"]
var array4 = [String](count: 100, repeatedValue: "")

: 获取数组元素个数

print(array1.count)
print(array2.count)
print(array3.count)
print(array4.count)

: 对数组中的元素进行遍历

for index in 0..<array3.count {
    // []是对数组进行下标运算(取出指定位置的元素)
    print(array3[index])
    if index == 1 {
        array3[index] = "litch"
    }
}
print(array3)

: 向数组中添加元素

array1 += ["strawberry"]  // +=即在数组的最后加入相当于.append
array1.append("pear")
array1.insert("waxberry", atIndex: 0)   // .insert即在数组的指定位置加入
array1.insert("watermelon", atIndex: 2)
array1.insert("lemon", atIndex: array1.count)  //在这个数组的最后加入
print(array1)

: 从数组中删除元素

array1.removeAtIndex(2) // 指定位置删除
print(array1)
array1.removeFirst()   // 删除第一个
print(array1)
array1.removeAll()     // 全部删除
print(array1)
//array5.removeAll() 全部删除
//array5.removeAll(keepCapacity: <#T##Bool#>) 只删除元素不回收空间
//array5.removeAtIndex(2) 删除指定位置的元素
//array5.removeRange(0...2)//删除一个范围内的

: 数组的复制

var array5 = array3  // 复制数组
array5[0] = "pitaya"  // 数组的0号位置元素替换为"pitaya"
print(array3)
print(array5)
var array6 = array3[1...3] // 复制数组的一部分
print(array6)

: 数组的+运算

let array7 = array1 + array3
print(array7) // 元素排列为 - 先排列array1的元素再排列array3的元素

: 只读循环(在循环过程中不能修改数组元素)

for str in array3 {
    print(str)
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,248评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,681评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,443评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,475评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,458评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,185评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,451评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,112评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,609评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,083评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,163评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,803评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,357评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,357评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,590评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,636评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,925评论 2 344

推荐阅读更多精彩内容