Python-Level1-day04 循环语句for;跳转语句;容器之字符串;容器通用操作
0 复习与作业
作业 1. 三(代码demo、图片、理论)合一 2. 当天练习独立完成 3. 写出下列程序运行结果: (1) input_number = 8 random_number = 8 if input_number == random_number: print("猜对了") else: print("猜错了") (2) num = 12 if num > 3: print("⼤于3") elif num > 5: print("⼤于5") elif num > 10: print("⼤于10") elif num > 15: print("⼤于15") (3) str_value = "" #if str_value: #new_str = str_value #else: #new_str = "empty" new_str = str_value if str_value else "empty" print(new_str) 4. 根据需求写出程序 (1) 电梯设置规定: 如果承载⼈不超过10⼈,且总重量不超过1000千克,可以正常使⽤,否则提示超载。 步骤: 终端中获取人数/总重量 显示电梯正常运行 电梯超载 (2) 根据年龄,输出对应的人生阶段。 年龄 ⼈⽣阶段 0-6 岁 童年 7-17 岁 少年 18-40 岁 ⻘年 41-65 岁 中年 65 岁之后 ⽼年 步骤: 终端中获取年龄 显示人生阶段 (3) 如果是vip客户,消费小于等于500,享受85折 消费大于500,享受8折 如果不是vip客户,消费大于等于800,享受9折 消费小于800,原价 在终端中输入账户类型,消费金额,计算折扣. (4) 在终端中录入4个同学体重,打印最轻的值. 效果: 请输入第1个同学体重:100 请输入第2个同学体重:120 请输入第3个同学体重:93 请输入第4个同学体重:160 最轻的同学:93 5. 阅读 程序员的数学第二章 Python入门到实践第二章
""" 电梯设置规定: 如果承载⼈不超过10⼈,且总重量不超过1000千克,可以正常使⽤,否则提示超载。 步骤: 终端中获取人数/总重量 显示电梯正常运行 电梯超载 """ if int(input("people")) >= 10 and int(input("weight")) >= 1000: print("no") else: print("ok") """
""" (2) 根据年龄,输出对应的人生阶段。 年龄 ⼈⽣阶段 0-6 岁 童年 7-17 岁 少年 18-40 岁 ⻘年 41-65 岁 中年 65 岁之后 ⽼年 步骤: 终端中获取年龄 显示人生阶段 """ age = int(input("age")) if age < 6: print(1) elif age < 17: print(2) elif age < 40: print(3) elif age < 65: print(4) elif age < 80: print(5) else: print(6)
""" 如果是vip客户,消费小于等于500,享受85折 消费大于500,享受8折 如果不是vip客户,消费大于等于800,享受9折 消费小于800,原价 在终端中输入账户类型,消费金额,计算折扣. """ price = int(input("price")) vip = input("vip") if vip == "vip": if price < 500: price *= 0.85 else: price *= 0.8 else: if price > 800: price *= 0.9 print(price)
""" 在终端中录入4个同学体重,打印最轻的值. 效果: 请输入第1个同学体重:100 请输入第2个同学体重:120 请输入第3个同学体重:93 请输入第4个同学体重:160 最轻的同学:93 """ weight1 = int(input("weight1")) weight2 = int(input("weight2")) weight3 = int(input("weight3")) weight4 = int(input("weight4")) temp = weight1 if weight2 < temp: temp = weight2 if weight3 < temp: temp = weight3 if weight4 < temp: temp = weight4 print(temp)
1 while循环
""" while 循环计数 1.开始值 2.结束 3.间隔 """ count = 0 while count < 5: count += 1 print("go")
""" 在终端中显示 0 1 2 3 在终端中显示 2 3 4 5 6 在终端中显示 1 3 5 7 在终端中显示 8 7 6 5 4 在终端中显示-1 -2 -3 -4 -5 """ count = 0 while count < 4: print(count) count += 1 count = 2 while count < 7: print(count) count += 1 count = 1 while count < 8: print(count) count += 2 count = 8 while count >= 4: print(count) count -= 1 count = -1 while count >= -5: print(count) count -= 1
""" 一张纸的厚度是 0.01 毫米 请计算,对折多少次超过珠穆朗玛峰(8844.43 米) """ height = 1e-5 count = 0 while height < 8844.43: height *= 2 count += 1 print(count)
""" 练习 3:在终端中循环录入 5 个成绩, 最后打印平均成绩(总成绩除以人数) 效果:请输入成绩:98 请输入成绩:83 请输入成绩:90 请输入成绩:99 请输入成绩:78 平均分:89.6 """ count = 5 score = 0 while count > 0: count -= 1 score += int(input("score")) print(score / 5) """
""" 程序产生 1 个,1 到 100 之间的随机数。 让玩家重复猜测,直到猜对为止。 每次提示:大了、小了、恭喜猜对了,总共猜了多少次。 """ import random # 随机数工具 num = random.randint(1, 100) count = 0 while True: num1 = int(input("num")) if num1 > num: print("big") count += 1 elif num1 < num: print("small") count += 1 else: print("yes") print(count+1) break
""" 猜数字2.0 最多猜 3次,超过就提示游戏失败 while 与 else 配对的特点在这个语言独有, 执行过循环体内容就不会执行else内语句 """ import random # 随机数工具 num = random.randint(1, 100) count = 0 while count < 3: num1 = int(input("num")) if num1 > num: print("big") count += 1 elif num1 < num: print("small") count += 1 else: print("yes sucess") print(count+1) break else: print("no sucess")
2 for循环
for 语句
-
作用: 用来遍历可迭代对象的数据元素。可迭代对象是指能依次获取数据元素的对象,例如:容器类型。
-
语法:
for 变量列表 in 可迭代对象:
语句块 1
else:
语句块 2
-
说明:else 子句可以省略。在循环体内用 break 终止循环时,else 子句不执行。
""" for 变量 in 字符串(可迭代对象): 语句块 """ message = "abcdefghijklmnopqrstuvwxyz" for item in message: print(item) message = "我是孙悟空" # 通过内存理解它 for item in message: # for只能读取容器,不能修改,字符串本身就不能修改 item = "a"#修改变量item,不影响message数据 print(item) print(message)
""" 在终端中输入任意整数,计算累加和. "1234" -> "1" -> 累加 1 请输入一个整数:12345 累加和是 15 """ message = input("please") sum = 0 for item in message: sum += int(item) print(sum)
range 函数
-
作用:用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)。
-
语法:range(开始点,结束点,间隔)
-
说明: 函数返回的可迭代对象可以用 for 取出其中的元素,返回的数字不包含结束点,开始点默认为 0,间隔默认值为 1
""" for+range(开始,结束,间隔)配合:不包括结束 适合确定结束循环条件的,while适合不确定循环条件的 """ for item in range(3,8,1):#间隔默认1 print(item) for item in range(8):#间隔默认1,开始值默认0 print(item)
""" 在终端中累加 0 1 2 3 在终端中累加 2 3 4 5 6 在终端中累加 1 3 5 7 在终端中累加 8 7 6 5 4 在终端中累加-1 -2 -3 -4 -5 """ print(range(5)) # 打印range(0, 5) sum = 0 for item in range(4): sum += item print(sum) sum = 0 for item in range(2, 7): sum += item print(sum) sum = 0 for item in range(1, 8, 2): sum += item print(sum) sum = 0 for item in range(8, 3, -1): sum += item print(sum) sum = 0 for item in range(-1, -6, -1): sum += item print(sum)
3 跳转语句
break 语句
-
跳出循环体,后面的代码不再执行。
-
可以让 while 语句的 else 部分不执行。
continue 语句
跳过本次,继续下次循环。
""" 累加1-100 """ sum = 0 for num in range(101): sum += num print(sum) sum = 0 for num in range(101): if num % 3 == 0: sum += num print(sum) sum = 0 for num in range(101): if num % 3 != 0: continue # 跳过本次循环 break跳出这一层循环 sum += num print(sum)
""" 累加 10 -- 60 之间,个位不是 3/5/8 的整数和 """ #两种思路:满住条件做,或者不满足条件跳过 sum = 0 for i in range(10, 61): if i % 10 in (3, 5, 8): continue sum += i print(sum) sum = 0 for i in range(10, 61): if i % 10 == 3 or i % 10 == 5 or i % 10 == 8: continue sum += i print(sum)
4 容器之字符串
字符串 str
定义:由一系列字符组成的不可变序列容器,存储的是字符的编码值。序列即有顺序的连续存储,之间没有缝隙。
编码
-
字节 byte:计算机最小存储单位,等于 8 位 bit.
-
字符:单个的数字,文字与符号。
-
字符集(码表):存储字符与二进制序列的对应关系。
-
编码:将字符转换为对应的二进制序列的过程。
-
解码:将二进制序列转换为对应的字符的过程。
-
编码方式:
--ASCII 编码:包含英文、数字等字符,每个字符 1 个字节。
--GBK 编码:兼容 ASCII 编码,包含 21003 个中文;英文 1 个字节,汉字 2 个字节。
--Unicode 字符集:国际统一编码,旧字符集每个字符 2 字节,新字符集 4 字节。
--UTF-8 编码:Unicode 的存储与传输方式,英文 1 字节,中文 3 字节。
相关函数
-
ord(字符串):返回该字符的 Unicode 码。
-
chr(整数):返回该整数对应的字符。
""" 字符串:数据不可变。原因是如果在原有内存空间修改,会破坏其他数据类型(损人利己) 如果要变,就只能创建新数据,用变量指向他 """ name = "悟空" name = "孙悟空" # 是数据不可变性,不是变量 num = ord("a") print(num) a = chr(67) print(a)
""" 练习:在终端中录入一个内容,循环打印每个文字的编码值。 效果:请输入文字:qtx 113 116 120 循环录入编码值打印文字,直到输入空字符串停止。 效果:请输入数字:113 q 请输入数字:116 t 请输入数字: Process finished with exit code 0 """ # message = input("please") # for item in message: # print(ord(item)) while True: i = input("please") if i == "": break else: print(chr(int(i)))
字符串字面值
单引和双引号的区别
-
单引号内的双引号不算结束符
-
双引号内的单引号不算结束符
三引号作用
-
换行会自动转换为换行符\n
-
三引号内可以包含单引号和双引号
-
作为文档字符串
转义字符
-
改变字符的原始含义。 \’ \” \””” \n \ \t \0 空字符
-
原始字符串:取消转义。a = r”C:\newfile\test.py”
字符串格式化
-
定义:生成一定格式的字符串。
-
语法:字符串%(变量)"我的名字是%s,年龄是%s" % (name, age)
-
类型码:%s 字符串 %d 整数 %f 浮点数
""" 字符串字面值:三种写法 单(与双引号功能一样,但习惯用双引号) 双 三(所见即所得) 三单与三双没区别 """ content = 'sdfs' content = "asda" content = """sdf sd hh""" content = '''ds fs''' print(content) """ 引号冲突问题 """ print("我是'shunwukong' ")#用不同引号即可解决引号冲突问题 #转义字符(\"):根本上解决引号冲突,引号前面加个斜杠就可以 # 其中\t表示tab, print("我是\"shunwu\tkong\" ")#我是"shunwu kong" # r 原始字符串 不读取成转义字符 print(r"32\n\r\''")#32\n\r\'' # 字符串格式化打印 i = "abc" b = "abcd" print("i == %s,b == %s" % (i, b)) i = 99.9 print("ok = %s%%"%(i))#两个百分号表示一个百分号打印 # %s 既可以给%d 与 %f 表示,但是缺点是不能进行保留几位有效数 #如%0.2f表示保留两位小数 #如%.2d表示两位数值宽度
""" 根据下列文字,提取变量,使用字符串格式化打印信息 湖北确诊 67802 人,治愈 63326 人,治愈率 0.99 70 秒是 01 分零 10 秒 """ a = 234 b = 342 c = 0.3242 print("hubei que zheng %s ,zhi yu %s " "zhi yu lv %0.2f" % (a, b, 0.345345)) print("%.2d 秒是 %.2d 分零 %2.d 秒" % (70, 1, 10))
5 容器通用操作
通用操作
数学运算符
-
+:用于拼接两个容器
-
+=:用原容器与右侧容器拼接,并重新绑定变量
-
*:重复生成容器元素
-
*=:用原容器生成重复元素, 并重新绑定变量
-
< <= > >= == !=:依次比较两个容器中元素,一但不同则返回比较结果。
成员运算符
-
语法:数据 in 序列;数据 not in 序列
-
作用:如果在指定的序列中找到值,返回 bool 类型。
""" 容器的通用操作 算术运算符 + * 比较 """ name = "ba" name1 = "wu" name2 = name + name1 print(name2) name2 = name1 * 6 print(name2) # 支持字符串容器比大小 print(name2 > name) # 比较的是编码字符大小,一旦不同就比较结束 print((1, 2, 3) < (1, 3, 2)) # 成员运算符 :看顺序在不在判断 print("abc" in "abcdefg") print("abc" not in "abcdefg")
""" 练习:在终端中获取一个整数,作为边长,打印矩形。 """ # a = int(input("please")) # b = a # print("*" * a) # while a - 2 > 0: # a -= 1 # print("*%s*" % (" " * (b - 2))) # print("*" * b) a = int(input("please")) print("*" * a) # 打印第一行* for __ in range(a - 2): # 后面如果不用变量也可以用下划线代替哦 print("*%s*" % (" " * (a - 2))) print("*" * a) # 打印最后一行*
索引 index
-
作用:定位单个容器元素。
-
语法:容器[整数]
-
说明:正向索引从 0 开始,第二个索引为 1,最后一个为 len(s)-1。
反向索引从-1 开始,-1 代表最后一个,-2 代表倒数第二个,以此类推,第一个是-len(s)。
""" 索引 index """ messa = "abcdefghijklmnopqrstuvwxyz" print(messa[0]) print(messa[-1]) print(messa[len(messa)-1]) print(messa[-len(messa)])
homework
作业 1. 三合一 2. 当天练习独立完成 3. 自学教程的字符串新版占位符f-string https://www.runoob.com/python3/python3-string.html 4. 模拟登录 如果账号的密码错误3次,提示锁定账户,效果如下: 请输入账号:qtx 请输入密码:1234 登录失败 你还剩余 2 次机会 请输入账号:Qtx 请输入密码:1234 登录失败 你还剩余 1 次机会 请输入账号:Qtx 请输入密码:123456 登录成功 6. (选做)赌大小游戏 玩家的身家初始10000,实现下列效果: 少侠请下注: 30000 超出了你的身家,请重新投注。 少侠请下注: 8000 你摇出了5点,庄家摇出了3点 恭喜啦,你赢了,继续赌下去早晚会输光的,身家还剩18000 少侠请下注: 18000 你摇出了6点,庄家摇出了6点 打平了,少侠,在来一局? 少侠请下注: 18000 你摇出了4点,庄家摇出了6点 少侠,你输了,身家还剩 0 哈哈哈,少侠你已经破产,无资格进行游戏 7. (选做)一个小球从100m高度落下,每次弹回原高度一半. 计算: -- 总共弹起多少次?(最小弹起高度0.01m) -- 全过程总共移动多少米? 提示: 数据/算法 8.阅读 https://unicode-table.com/cn/ 程序员的数学第四章:数学归纳法