文章目录
在1996年,计算机科学家们证明了一个事实:任何简单或者复杂的算法都是由顺序结构、选择结构、循环结构这三种基本结构组合而成的。流程控制就对应其中的选择结构。
顺序结构无可厚非,默认情况都是从上往下按照代码的顺序执行。
选择结构就是流程控制、条件判断相关的概念,一个程序肯定会有偶流程控制,例如根据业务的状态、用户的操作,选择性的执行部分代码,从而达到某种效果。
如下图一个简单的流程控制:首先选择要操作的服务器,然后输入服务器的账号密码,紧接着就会有一个流程控制,判断输入的账号密码是否正确,如果条件判断的结果为True,那么就登陆到服务器的控制台,否则结果为False,那么就提示拒绝登陆,还有第二个流程控制,判断是否要关闭控制台,如果条件判断的布尔值为False则进行其他的操作,如果为True就断开连接。

在编程语言中,代码块相当于一组语句的集合,代码块的开始和结束都是通过某个特殊字符指定,例如以{开始,以}结束。
在Python中,代码块的开始用冒号表示,在代码块中的所有行,都要缩进相同数量的空格,通常是缩进4个空格,如果不索引就会抛出异常,提示语法错误,和Yaml文件格式一样,该缩进的时候必须索引,没必要索引的时候不要添加。
1)单分支的if流程控制语法结构
单分支的if流程控制是最简单的流程控制,单分支指的是只有一个条件判断。语法结构如下:
if 条件判断:
条件执行体
单分支的if语句执行流程:如果条件判断的结果为True,那么就执行条件执行体中的代码块,执行完成后继续执行if语句后面的代码,如果条件判断的结果为False,那么跳过条件执行体中的代码,直接执行if语句后面的代码。
2)单分支if语句+else的语法结构
else语句相当于if的从句,因为else语句不是一个独立的整体,是if语句中的一部分,else语句表示,当流程控制中没有一个分支满足条件,那么就执行else语句对应的代码块,else语句会放在if语句中的最后部分。语法格式如下:
if 条件判断:
条件执行体1
else:
条件执行体2
单分支if语句+else的执行流程:如果条件判断的结果为True,那么就执行条件执行体1中的代码,执行完成后继续执行if语句后面的代码,此时就会跳过else语句对应的代码块,如果条件判断的结果为Flase,那么就执行else语句中的代码块,执行完成后继续执行if语句后面的代码。
3)多分支的if流程控制语法结构
如果if语句存在两个以上的条件判断分支,那么就称为多分支的if流程控制结构,多分支可以在if语句中添加多个elif语句,elif语句是else if的简写。语法格式如下:
if 条件判断1:
条件执行体1
elif 条件判断2:
条件执行体2
elif 条件判断3:
条件执行体3
......
elif 条件判断n:
条件执行体n
else:
条件执行体n
多分支的if流程控制执行流程:
执行完代码块中的代码后,相当于判断结束了,执行if语句之后的其他代码。
只要返回值是布尔类型:True或者False,都可以进行流程控制。
下面对if流程控制语句先进行简单的使用,后续我会写一些需求案例,我们再深入学习if流程控制。
首先完成一个简单的if流程控制语句。
需求:判断一篇文章的质量分数,如果质量分高达95,则允许这篇文章上热榜。
article_quality = 97
#如果article_quality的值大于95,则输出文章质量的分数,然后提示其允许上热榜
if article_quality > 95:
#返回的内容通过格式化字符串输出
aq_format = '这篇文章的质量分是:{}, 允许上热榜'
print(aq_format.format(article_quality))
#输出结果:这篇文章的质量分是:97, 允许上热榜
当文章的质量分大于95时,则会返回该文章的质量分,然后提示允许上热榜。

在流程控制语句中增加else从句,当条件不满足流程控制中的任何一个条件时,就执行else代码块中的代码。
需求:判断一篇文章的质量分数,如果质量分高达95,打印该文章的质量分,并提示允许这篇文章上热榜,如果不满足条件也输出这篇文章的质量分,并提示该文章的质量分与标准质量相差多少。
article_quality = 92
#如果质量分大于95,则输出文章的质量分,并提示允许上热榜
if article_quality > 95:
#打印的内容由格式化规则存储,传递实际的分数到格式化字符串,最终打印
aq_format = '这篇文章的质量分是:{}, 允许上热榜'
print(aq_format.format(article_quality))
#如果质量分不满足条件,则输出文章的质量分,并计算该文章的质量分与标准质量分的差值,最终一并提示给用户
else:
aq_format = '这篇文章的质量分是:{0}, 与标准分相差{1}, 再接再厉哟'
#标准质量分为95,用95减去文章的质量分,得到差值
diff = 95 - article_quality
#打印的内容都在格式化规则内,利用format方法传递实际值,最终返回给用户
print(aq_format.format(article_quality, diff))
指定这篇文章的质量分为92,然后由if流程控制进行判断,当大于95时,返回该文章的质量分,并提示允许上热榜,否则也返回出该文章的质量分,并计算出与标准分的差值,一并返回给用户。

多分支的if流程控制指的是if语句中存在多个判断条件,从上往下依次进行判断,当满足其中一项时,不再执行后面的判断。
需求:
质量分由用户手动输入,不写死。
当文章质量分为50以下,提示文章质量不佳,可能会影响推荐。
当文章质量分为60~80之间,提示文章质量还有待提升,继续加油。
当文章质量分为80~90之间,提示文章质量以及跨进一大步了,持续努力。
当文章质量分为90以上,提示文章质量很好。
否则就提示参数不合法
思路分析:
此案例的完整代码如下:
#质量分通过input函数由用户手动输入
article_quality = input('请输入文章的质量分:')
#input函数输入的数据类型是字符串,要判断字符串中是否全部为数字组成
if article_quality.isdigit():
#已经证明传入的字符串全部由数字组成,将字符串类型转换成数字类型,否则后续判断就会异常
article_quality = int(article_quality)
#如果传入的字符串不是全部由数字组成,那么就提示参数不合法,从而退出程序
else:
print('参数不合法,请输入数字')
exit() #退出程序
#判断质量分是否小于60
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
#判断质量分是否大于等于60并且小于80
elif article_quality >= 60 and article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
#判断质量分是否大于等于80并且小于90
elif article_quality >= 80 and article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
#判断质量分是否大于等于90
elif article_quality >= 90 and article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
#其余分数则执行如下代码
else:
print('分数太高了,不合理')
代码运行,在冒号后面输入要传入的数据,当数据是不是数字时,则返回参数不合法,请输入数字。

当传入的数据是一个合理的数值时,则运行满足条件的部分代码。

当传入的数值超出最大范围时,最大范围仅100,此时就会允许不满足条件的部分代码。

写代码时,我将判断input()函数传入的字符串是否全部由数字组成的、质量分区间的流程控制,单独分离了出来,为了增强代码的可读性,其实也可以将这两个流程控制合并,由嵌套if实现,建议使用这种方式,但是也不要嵌套的太多,代码如下:
#质量分通过input函数由用户手动传入
article_quality = input('请输入文章的质量分:')
#input函数输入的数据类型是字符串,要判断字符串中是否全部为数字组成
if article_quality.isdigit():
#已经证明传入的字符串全部由数字组成,将字符串类型转换成数字类型,否则后续判断就会异常
article_quality = int(article_quality)
#下面开始对质量分的大小进行判断
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
elif article_quality >= 60 and article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
elif article_quality >= 80 and article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
elif article_quality >= 90 and article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
else:
print('分数太高了,不合理')
#如果传入的字符串不是全部由数字组成,那么就提示参数不合法,从而退出程序
else:
print('参数不合法,请输入数字')
exit() #退出程序
对于elif还可以再用嵌套来实现,但是代码可读性会非常差,相当于不用elif了,在else下用if,可供学习使用,在实际开发中不建议这么写代码,可读性非常差,代码如下:
article_quality = input('请输入文章的质量分:')
if article_quality.isdigit():
article_quality = int(article_quality)
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
else:
if article_quality >= 60 and article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
else:
if article_quality >= 80 and article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
else:
if article_quality >= 90 and article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
else:
print('分数太高了,不合理')
else:
print('参数不合法,请输入数字')
exit()
还是建议使用elif的方法,代码可读性好

对于多条件的比较运算符,还可以这样简写:
80 <= article_quality < 90
代码含义:article_quality值小于等于80且小于90,换句话说就是article_quality值在80~90
要注意这种代码的写法,值1 <= 现有值 < 值2
主要是对比较运算的代码进行了优化,代码如下:
#input函数输入的数据类型是字符串,要判断字符串中是否全部为数字组成
if article_quality.isdigit():
#已经证明传入的字符串全部由数字组成,将字符串类型转换成数字类型,否则后续判断就会异常
article_quality = int(article_quality)
#下面开始对质量分的大小进行判断
if article_quality < 60:
aq_format = '这篇文章的质量分是:{}, 文章质量不佳可能会影响推荐'
print(aq_format.format(article_quality))
elif 60 <= article_quality < 80:
aq_format = '这篇文章的质量分是:{}, 文章质量还有待提升继续加油'
print(aq_format.format(article_quality))
elif 80 <= article_quality < 90:
aq_format = '这篇文章的质量分是:{}, 文章质量已经跨进一大步了持续努力'
print(aq_format.format(article_quality))
elif 90 <= article_quality <= 100:
aq_format = '这篇文章的质量分是:{}, 文章质量很好'
print(aq_format.format(article_quality))
else:
print('分数太高了,不合理')
#如果传入的字符串不是全部由数字组成,那么就提示参数不合法,从而退出程序
else:
print('参数不合法,请输入数字')
exit() #退出程序
在Python中,任何对象都有其对应的布尔值,True或者False,我们可以调用内置函数bool()得到对象的布尔值。
当对象为:False、数值0、None、空字符串、空列表、空元组、空字典、空集合时,对应的布尔值都为False,剩余的所有对象的布尔值都为True。
布尔值为False的对象:
>>> bool(False)
False
>>> bool(0)
False
>>> bool(0.0)
False
>>> bool(None)
False
>>> bool('')
False
>>> bool("")
False
>>> bool([])
False
>>> bool(list())
False
>>> bool(())
False
>>> bool(tuple())
False
>>> bool({})
False
>>> bool(dict())
False
>>> bool(set())
False
>>> bool(frozenset())
False
布尔值为True的对象:
>>> bool(22)
True
>>> bool('jiangxl')
True
>>> bool(' ')
True
>>> bool([1,2,3])
True
>>> bool((1,2,3))
True
>>> bool({'1': 12, '2':13})
True
>>> bool({1,2,3,4})
True
在Python中,所有对象都可以直接用布尔值进行逻辑判断,解释器会自动调用内置函数bool()进行转换,无需手动用bool函数转换。
if 99:
print(99, True)
if-else条件表达式通俗一点来说,就是if-else语句的简写模式,类似于C语言中的三目条件运算符。
条件表达式的语法格式:
#单if-else条件表达式的语法格式
x if 判断条件 else y
#嵌套if-else条件表达式的语法格式
x if 判断条件1 else (z if 判断条件2 else y)
单if-else条件表达式的执行顺序:当判断条件的结果为True值,条件表达式的返回值为x,否则返回y。
嵌套if-else条件表达式的执行顺序:当判断条件1的结果为True时,条件表达式的返回值为x,否则继续看判断条件2的结果是否为True,如果为True则返回z,否则返回y。
需求:如果文章质量分大于等于80,返回优秀,否则返回不佳。
article_quality = 88
#当article_quality >=80判断结果为True时,返回优秀,否则返回不佳
result = '优秀' if article_quality >=80 else '不佳'
print(result)
#输出结果:优秀
这个条件表达式,相当于如下代码,等价:
article_quality = 88
if article_quality >= 80:
result = '优秀'
else:
result = '不佳'
print(result)
简而言之,条件表达式就是if-else语句的简写,看个人喜好。
需求:
- 如果文章质量分为60以下,返回文章质量不佳。
- 如果文章质量分为60~80之间,提示文章质量良好。
- 如果文章质量分为80~100之间,提示文章质量优秀。
article_quality = 88
'''
如果article_quality < 60结果为True,质量分小于60,则打印文章质量不佳,如果不满足此条件,则执行else后面的语句。
如果60 <= article_quality <= 80的结果为True,质量分在60~80之间,则打印文章质量良好,如果不满足此条件,则执行嵌套if中的else语句,最终返回文章质量优秀。
'''
result = '文章质量不佳' if article_quality < 60 else ('文章质量良好' if 60 <= article_quality <= 80 else '文章质量优秀')
print(result)
#输出结果:优秀
嵌套的条件表达式,等同于如下代码:
article_quality = 88
if article_quality < 60:
result = '文章质量不佳'
else:
if 60 <= article_quality <= 80:
result = '文章质量良好'
else:
result = '文章质量优秀'
print(result)
if not语句可以判断一个条件的布尔值是否为False,如果为False则执行相应的代码。
在默认情况下,if语句判断条件的布尔值是否为True,通过if not就可以判断条件的布尔值是否为False。
article_quality = input('请输入文章的质量分:')
#如果article_quality.isdigit()条件的返回值是False,则打印
if not article_quality.isdigit():
print('参数不合法')
exit()
else:
print(article_quality)
我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%
当我在Rails控制台中按向上或向左箭头时,出现此错误:irb(main):001:0>/Users/me/.rvm/gems/ruby-2.0.0-p247/gems/rb-readline-0.4.2/lib/rbreadline.rb:4269:in`blockin_rl_dispatch_subseq':invalidbytesequenceinUTF-8(ArgumentError)我使用rvm来管理我的ruby安装。我正在使用=>ruby-2.0.0-p247[x86_64]我使用bundle来管理我的gem,并且我有rb-readline(0.4.2)(人们推荐的最少
我正在使用Ruby2.1.1和Rails4.1.0.rc1。当执行railsc时,它被锁定了。使用Ctrl-C停止,我得到以下错误日志:~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`gets':Interruptfrom~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.2/lib/spring/client/run.rb:47:in`verify_server_version'from~/.rvm/gems/ruby-2.1.1/gems/spring-1.1.
我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新rubygems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList()Obt
说在前面这部分我本来是合为一篇来写的,因为目的是一样的,都是通过独立按键来控制LED闪灭本质上是起到开关的作用,即调用函数和中断函数。但是写一篇太累了,我还是决定分为两篇写,这篇是调用函数篇。在本篇中你主要看到这些东西!!!1.调用函数的方法(主要讲语法和格式)2.独立按键如何控制LED亮灭3.程序中的一些细节(软件消抖等)1.调用函数的方法思路还是比较清晰地,就是通过按下按键来控制LED闪灭,即每按下一次,LED取反一次。重要的是,把按键与LED联系在一起。我打算用K1来作为开关,看了一下开发板原理图,K1连接的是单片机的P31口,当按下K1时,P31是与GND相连的,也就是说,当我按下去时
作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐
在我的Character模型中,我添加了:字符.rbbefore_savedoself.profile_picture_url=asset_path('icon.png')end但是,对于数据库中已存在的所有角色,它们的profile_picture_url为nil。因此,我想进入控制台并遍历所有这些并进行设置。在我试过的控制台中:Character.find_eachdo|c|c.profile_picture_url=asset_path('icon.png')end但这给出了错误:NoMethodError:undefinedmethod`asset_path'formain:O
当我进入Rails控制台时,我已将pry设置为加载代替irb。我找不到该页面或不记得如何将其恢复为默认行为,因为它似乎干扰了我的Rubymine调试器。有什么建议吗? 最佳答案 我刚发现问题,pry-railsgem。忘记了它的目的是让“railsconsole”打开pry。 关于ruby-on-rails-带有Pry的Rails控制台,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question
我正在尝试将$stdout设置为临时写入一个文件,然后返回到一个文件。test.rb:old_stdout=$stdout$stdout.reopen("mytestfile.out",'w+')puts"thisgoesinmytestfile"$stdout=old_stdoutputs"thisshouldbeontheconsole"$stdout.reopen("mytestfile1.out",'w+')puts"thisgoesinmytestfile1:"$stdout=old_stdoutputs"thisshouldbebackontheconsole"这是输出。r