1. 程序的组织结构
2. 顺序结构
3. 选择结构
4. 表达式简写
5. pass空语句
6. 循环结构
7. 跳转语句
程序的组织结构顺序结构选择结构循环结构顺序结构功能:默认自上而下执行代码
示例:
print('第一行') #第一行print('第二行') #第二行print('第三行') #第三行选择结构
功能:也叫分支结构
程序根据判断条件的布尔值选择性的执行部分代码
布尔类型和比较运算符布尔数据类型:有两个值
真:True /是 /1 /有假:False/否 /0 /空比较运算符
== / != / > / < / >= / <=单分支语法:
if 条件表达式: 执行代码示例:
a = int(input('请输入一个整数...'))if a > 0: # 对 a > 0 这个表达式做判断,如果是真就执行代码 。 print(a) # 条件为真时,执行的代码。
图示:
python:单分支结构
双分支语法:
if 条件表达式: 执行代码1:else: 执行代码2
示例:
a = int(input('请输入一个整数...')) # 用户输入数据:15if a > 10: # 输入的数据与10做判断: 15 >10 结果是:真 print(a) # 结果为真,执行这条语句,输出:15else: # 否则 print('你的数字不大于10') # 表达式为真,不执行这条语句
图示:
python 双分支结构
多分支语法:
if 条件表达式1: 执行代码1elif 条件2: 执行代码2elif 条件3: 执行代码3[ else: ] 执行代码...
示例:成绩判断
grade = int(input('请输入你的成绩...')) # 输入成绩:87if grade >= 90: # 87 >= 90 :不成立 print('优秀') # 不执行elif grade >= 70: # 87 >= 70 :成立 print('良好') # 执行这里的代码:输出:良好,结束判断。elif grade >= 60: print('合格')else: print('成绩不理想')
图示:
python 多分支结构
嵌套语法:
if 条件1: if 条件2: 代码1 else: 代码2else: if 条件3: 代码3 else: 代码4
示例:入场票价判断,根据年龄大小来判断。
age = int(input('请输入你的年龄...')) # 45if age >= 18: # 45 >= 18 条件成立 if age >= 60: # 再次判断 45 >= 60 条件不成立 print('敬老8折') # 跳过不执行 else: # 执行下面的代码 print('全票入场') # 执行:输出全票入场else: if age >= 12: print('学生半价') else: print('儿童免费')
示例:
python 嵌套结构
表达式简写功能:可以对:if ... else ... 的简写
# 语法:x if 判断条件 else y
运算规则:
条件布尔值为 True ,返回 x条件布尔值为 False ,返回 y示例:
a = int(input('请输入数字a:')) # 请输入数字a:10b = int(input('请输入数字b:')) # 请输入数字b:15print('a>b' if a>b else 'a<b') # a<b
pass空语句
占位语句为程序做逻辑架构时,防止程序报错的点位功能循环结构概念:有选择性的,反复做同一件事情,称为循环
循环范围# renge()# 内置函数:生成整数序列# 语法:range( x )
示例:range ( x )
a = range(10)print(list(a)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
示例:range ( x , y )
a = range(0,10)print(list(a)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
示例:range( x , y , i )
a = range(0,10,2) # 间隔输出成偶数print(list(a)) # [0, 2, 4, 6, 8]
a = range(1,10,2) # 间隔输出成奇数print(list(a)) #[1, 3, 5, 7, 9]
a = range(10,0,-1) # 反转数据print(list(a)) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
a = range(10,0,-1) # 再次反转数据 print(list(a)[::-1]) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]while循环
功能:直到条件不成立时退出循环
语法:
while 条件表达式: 执行代码
while 条件成立: 1次 2次 ……
示例:打印0-10的数字
a = 0while a <= 10: # 判断 a <= 10 条件成立,向下执行 print(a,end='|') # 条件成立执行 a += 1 # 条件发生+ 1 的变化# 结果: 0|1|2|3|4|5|6|7|8|9|10|
示例:100的累加
a = 0sum = 0while a < 100: # 判断条件a += 1 # 成立执行sum += a # 修改条件print(sum) # 结果: 5050
示例:猜数字:猜1-100的随机数字,猜中为止,猜时大小有提醒
随机数:imput rand
import random # 导入随机数模块a = random.randint(1,100)count = 0while 1: count += 1 g_num = int(input('请输入数字')) # 输入猜测的数字 if g_num > a: # 判断数字 print(f'猜大啦,第{count}次猜...') # 对大小提醒 continue # 猜大的时候:跳过,回到循环开始 elif g_num < a: print(f'猜小啦,第{count}次猜...') continue # 猜小的时候:跳过,回到循环开始 else: print(f'OK,猜对啦,第{count}次猜...') break # 猜对的时候,终止循环。
图示:
python while循环结构
与if 的区别:if 判断1次,条件为True 执行一行while 判断N+1次,条件为True 执行N次四步循环法:
初始化变量:判断条件:执行代码(循环体):修改变量:图示:(初始化变量, 判断条件, 执行代码(循环体), 修改变量)
python 四步循环图
for in 循环概念:
从那里到那里,是一种轮询的机制,有逐渐的意思相当于对待办事项逐个处理的意思,无法定义循环条件,只能被动取出数据处理for in 遍历的对象必须是可迭代对象in 表示从(字符串,序列等)中依次取值,又称遍历。循环体内不需要访问定义变量时,可将自下定义变量替代为下划线【_】语法:
for 变量 in 可迭代对象: 循环体
for 临时变量 in 待处理数据集(序列): # 【序列/字符串/列表/元组】 循环满足条件时执行的代码
for _ in 可迭代对象: 循环体
图示:
python for in 循环结构
示例:
for x in range(10): print(x,end='|') # 0|1|2|3|4|5|6|7|8|9|
for _ in 'python': print(_)# p# y# t# h# o# n统计有多少个 a :
a = 'it and root it or hi abc'count = 0for x in a: if x == 'a': count = count+1print(count) # 2水仙花数概念:与他每个数位的3次方之和相等的数。要求:求:100-999之类的的水仙花数有多少 个?
for i in range(100,1000): ge = i%10 shi = i%100//10 bai = i//100 if ge**3+shi**3+bai**3 == i: print(i)# 153# 370# 371# 407嵌套循环:
循环中break 和 continue 用于控制本层循环
图示:
python 循环条件控制语句
示例:
九九乘法表:一
for i in range(1,10): print(f'[第{i}列]') for j in range(1,i+1): print(f'{j}*{i}={i*j:0>2}',end='\t')
九九乘法表:二
i = 1while i <= 9: j = 1 while j <= i: print(f'{j}*{i}={j*i}',end='\t') j += 1 i += 1 print()输出不换行功能end = ' 'end = ' \t '跳转语句:
break:
达到条件:退出整个循环通常与if 一起使用图示:
python 循环结构break终止
continue:
满足条件:跳过单次循环图示:
python 循环结构continue跳出
else:与else配合使用的三种情况
图示:
python 循环结构与else配合使用的三种情况
图示总结:python 程序的流程控制顺序、选择、循环、跳转、终止与点位
在公司的项目中,分页功能十分常见,以前就是简单的复制粘贴,每次来回切换切面,还经常复制错位置或复制到其他页面去了,半天找不到原因(内心:#*! $%^&@ 1)。
核心思路分页原理:属性 page来控制分页数,初始值为1;moreFlag有更多数据的标志,初始值为true;pageSize页面自行定义,可以默认设置为10
组件 原生scroll-view或recycle-view,但内容页面定制化(循环detailList)
方法 bindscrolltolower 或 bindscrolltoUpper 调取接口获取更多数据,若结果集中的数据量小于pageSize时,moreFlag更新为false,界面激活“暂无更多”标识;bindrefresherrefresh时刷新重置变量为初始值。
后端接口对接 一般接口都会用Promise异步封装,但一般页面中的请求和处理都各不相同,所以不能作为共同点
getListChangeStatus初始化
getList加载数据
getRemoteList调接口输出处理好的结果集
getList合并结果集
下拉刷新重置pulldownRefresh
混入复制代码根据上面的分页原理,大都为逻辑处理,所以考虑使用类似Vue里的混入,而在小程序中有一个类似的语法:BehaviorBehavior
behaviors 是用于组件间代码共享的特性,类似于一些编程语言中的 “mixins” 或 “traits”。
每个 behavior 可以包含一组属性、数据、生命周期函数和方法。组件引用它时,它的属性、数据和方法会被合并到组件中,生命周期函数也会在对应时机被调用。 每个组件可以引用多个 behavior ,behavior 也可以引用其它 behavior。
定义Behavior和组件的配置参数差不多,点击查看详情
注意 即使运用在Page里,方法也需放在methods里;同时注意一下同名字段和生命周期的规则,如下图所示:
以 scroll-view 按照分页原理来定义分页的Behavior
js复制代码module.exports = Behavior({ data: { page: 1, moreFlag: true, detailList: [], refreshFlag: false }, methods: { // 初始化 async getListChangeStatus() { this.setData({ page: 1, detailList: [], moreFlag: true }) await this.getList() }, // 获取列表 async getList() { if (!this.data.moreFlag) { ... // 可以增加处理,例如吐司等 return } let { detailList,fun } = await this.getRemoteList() if (detailList) { let detailListTem = this.data.detailList if (this.data.page == 1) { detailListTem = [] } if (detailList.length < this.data.pageSize) { //表示没有更多数据了 this.setData({ detailList: detailListTem.concat(detailList), moreFlag: false }) } else { this.setData({ detailList: detailListTem.concat(detailList), moreFlag: true, page: this.data.page + 1 }) } // 可能需要一些处理,例如获取容器的高度之类的,又或者scroll-into-view对应id if(fun && fun instanceof Function) fun() } }, // 到达底部 reachBottom() { console.log('--reachBottom--') this.getList() }, // 下拉刷新重置 pullDownRefresh() { this.setData({ page: 1, hasMoreData: true, detailList: [] }) this.getList() setTimeout(() => { this.setData({ refreshFlag: false }) }, 500) } }})引入方法
在页面或组件中(如果页面多个需要分页的地方建议用组件)使用behaviors: [myBehavior]
js复制代码import pagination from '../../behaviors/pagination.js'Page({ data: { pageSize: 10 }, behaviors: [pagination], onShow() { this.getListChangeStatus() }, async getRemoteList() { let { page, pageSize } = this.data const returnObj = {} const res = await XXX // 请求接口 ... // 处理数据 returnObj.detailList = data return returnObj }})
html复制代码<scroll-view scroll-y refresher-enabled refresher-triggered="{{refreshFlag}}" bindrefresherrefresh="pullDownRefresh" bindscrolltolower="reachBottom" style="height:100%;"><!--定义内容--></scroll-view>
在使用循环语句时,并不是必须等待循环完成后才能退出循环,我们也可以主动退出循环,C#为我们提供了break、continue和goto三种方式来跳出循环:
1.break(直接跳出条件循环,后面的程序将不执行)
它不仅可以用来终止switch语句,在循环语句中使用时还可以用来跳出循环,执行循环外的下一条语句。如果是在嵌套循环中使用,例如在内层的循环中使用break语句,那么程序只会跳出内层的循环,并不会影响到外层循环的执行。
代码示例如下:
for (int i = 1; i <= 9; i++){ if (i == 5) { break; } Console.Write("{0}",i);}Console.ReadLine();Console.ReadKey();
运行结果:
图一
2.continue(类似断点,跳出条件循环,但不影响继续执行)
C#中continue语句的工作原理与break语句类似,但是continue语句并不会跳出整个循环,而是跳过本次循环继续执行下一次的循环。
示例代码如下:
for(int i=1;i<=9;i++){ if(i==5) { continue; } Console.Write("{0}", i);}Console.ReadLine();
运行结果:
图二
3.goto(可以跳到指定位置执行语句)
C#中的goto语句也称为跳转语句,使用它可以控制程序跳转到指定的位置执行。不过并不建议在程序中多次使用goto语句,因为它会程序变得更加复杂。在使用goto语句来跳转程序之前,必须先在想要跳转的位置定义好一个标签(labels),标签的名称的定义和变量名相似,然后使用goto标签名;即可使程序跳转到指定位置执行。goto语句并不限于在循环中使用,其他的情况也可以使用,但是,goto语句不能从循环外跳到循环语句中,而且不能跳出类的范围。
示例代码如下:
int count = 1; login: for (int b = 0; b <= count; b++) { Console.WriteLine("第{0}次:请输入用户名", count); string username = Console.ReadLine(); Console.WriteLine("第{0}次:请输入密码", count); string userpwd = Console.ReadLine(); if (username == "admin" && userpwd == "123456") { Console.WriteLine("登录成功"); Console.WriteLine("正在退出"); goto end; } else { break; } } count++; if (count > 3) { Console.WriteLine("用户名或者密码错误次数过多!退出"); } else { Console.WriteLine("用户名或密码错误"); goto login;//返回login标签处重新输入用户名密码; } end: Console.ReadKey();
运行结果:
图三
图四
图五
图六