Python语法基础--条件选择

本文介绍了Python编程中的布尔表达式、比较运算符、随机数生成、if语句和选择控制,包括单向和双向if-else语句,逻辑运算符的使用,以及如何处理条件表达式和运算符优先级。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标

  • 使用比较运算符编写布尔表达式。
  • 使用random.randint(a,b)或者random.random()函数来生成随机数。
  • 编写布尔表达式(AdditionQuiz)。
  • 使用单向if语句实现选择控制。
  • 使用单向if语句编程。
  • 使用双向if-else语句实现选择控制。
  • 使用嵌套if和多向if-elif-else语句实现选择控制。
  • 避免if语句里的常见错误。
  • 使用选择语句编程。
  • 使用逻辑运算符(and、or和not)组合各种条件。
  • 使用带组合条件的选择语句(LeapYear、Lottery)。
  • 编写使用条件表达式的表达式。
  • 了解控制运算符优先权和结合性的规则。
  • 检测出一个对象的位置。

一、引言

关键点:程序可以根据某个条件决定执行哪条语句。

        如果在计算圆的面积程序清单中输入一个负的radius值,程序将产生一个无效结果。如果这个半径是负的,程序将无法计算这个区域。你怎么解决这种情况呢?

        就像所有的高级程序设计语言一样,Python提供选择语句让你可以在两个或多个不同条件下选择不同的动作。你可以使用下面的选择语句来替换程序清单中的代码:

if radius < 0:
    print("Incorrect input")
else:
    area = radius * radius * math.pi
    print("Area is", area)

选择语句使用的条件称为布尔表达式。本章将介绍布尔类型、数值、比较运算符以及表达式。

二、布尔类型、 数值和表达式

关键点:布尔表达式是能计算出一个布尔值True或False的表达式。

        怎么比较两个数值呢?例如,半径是大于0、等于0还是小于0? Python 提供了六种比较运算符(也称为关系运算符),如表4-1所示,那么哪个用来比较两个数值呢? (表中假设使用的半径是5)。

警告:比较运算符的相等是两个等号(==),而不是单个等号(=),后者是用来赋值的。

        比较的结果就是一个布尔逻辑值: True 或False。例如:下面的语句显示结果为True。

radius = 1
print(radius > 0)

        存储布尔值的变量被称为布尔变量。布尔数据类型被用来代表布尔值,一个布尔变量可以代表True或False值中的一个。例如:下面的语句将True赋值给变量lightson。

lightsOn = True

        True和False都是字面量,就像数字10是字面量一样。它们都是保留字,不能在程序中被当作标识符。

        在计算机内部,Python使用1来表示True而使用0来表示False。你可以使用int数将布尔值转换为一个整数。
例如:

print(int(True))   #显示1
print(int(False))  #显示0

        你也可以用bool函数将一个数字值转换成一个布尔值。如果值为0,这个函数返回False;否则,这个函数总是返回True。
例如:

print(bool(0))  #显示False
print(boo1(4))  #显示True。

三、产生随机数

关键点:函数randint (a, b)可以用来产生一个a和b之间且包括a和b的随机整数。

        设想你要开发一个帮助一年级学生练习加法的程序。这个程序会随机产生两个一位整数: number1和number2,然后显示给学生一个问题: What is 1+7( 1+7=? ),如下面程序清单所示。在学生输入答案后,程序会显示一条消息表明答案是对还是错。

        你可以使用函数random模块中的randint (a,b)函数产生一个随机数字。这个函数返回一个在a和b之间包括a和b的随机整数i。使用randint(0,9)获取一个在0到9之间的随机整数。

        这个程序会按照如下步骤工作。

  • 第1步:产生两个一位整数number1 (例如,4)和number2 (例如,5 )。
  • 第2步:提示学生回答What is 4+5。
  • 第3步:检测学生的答案是否正确。
import random

number1 = random.randint(0,9)
number2 = random.randint(0,9)

answer = eval(input("What is " + str(number1) +"+"+ str(number2) + "? "))

print (number1, "+" , number2, "=" , answer , "is",  number1 + number2 == answer)

        程序使用random模块中定义的randint函数。import 语句会导人这个模块(第1行)。

        也可以使用random( )函数生成一个满足条件0<=r<=1.0的随机浮点数r。

注意:调用random. random( ) 返回一个0.0到1.0之间(不包括1.0)的随机浮点数。调用函数random.randint(0,1)返回0或1。调用random.randrange(0,1) 总是返回0。

四、if 语句

关键点:如果条件正确就执行一个单向if语句。

        前面的程序显示一条像“6+2=7 is false”这样的信息。如果你想将信息改成“6+2=7 is incorrect”,你必须使用选择语句来做这种微小改变。

        Python有多种选择语句类型:单向if语句、双向if-else语句、嵌套if语句,多向if-elif-else语句以及条件表达式。这节介绍单向if语句。

当且仅当条件为true时,一条单向if语句执行一个动作。单向if语句的语法如下:

if boolean-expression:
    statement(s) # Note that the statement(s) must be indented

        这里statement(s)必须相对于if向右至少缩进一个空白,而每条语句也必须使用同样个数的缩进。为了保持一致性。

        如果布尔表达式计算的结果为真,那么就会执行if块中的语句。if块里的语句都要在if语句之后缩进。例如:
 

if radius >= 0:
    area = radius * radius * math. pi
    print("The area for the circle of radius", radius, "is",area)

        在if块中的语句必须在if行后的一.行进行缩进,而且要以相同的空白缩进(即上述代码的第2行和第3行缩进要相同)。

五、双向 if-else 语句

关键点:双向if-else语句根据条件是真还是假来决定执行哪些语句。

        如果指定条件是True,那么一条单向if语句会完成一个动作。如果条件是False,那它什么都不做。但是当条件为False时,你想要完成一个或多个动作时应该怎么办?你可以使用一个双向if-else语句。双向if-else语句根据条件是True还是False指定不同的动作。

        下面是一个双向if-else 语句的句法:

if boolean-expression:
    statement(s)-for-the-true-case
else:
    statement(s)-for-the-false-case

六、嵌套 if和多向if-elif-else语句

关键点:将一个if语句放在另一个if语句中就形成了一个嵌套if语句。

if或if-else语句中的语句可以是任意一个合法的Python语句,甚至可以包括另一个if或if-else语句。内部if语句被称为嵌套在外部if语句中。内部if语句也可以包含另一个if语句;事实上,嵌套的深度是没有限制的。例如,下面的语句是一个嵌套if语句:

if i>k:
    if j>k:
        print("i and j are greater than k" )
    else:
        print("i is less than or equal to k")

        if j>k语句是嵌套在if i>k语句中的。

七、选择语句中常见的错误

关键点:选择语句中的大多数常见错误都是由不正确的缩进问题导致的。

仔细思考a和b中的代码。

        在a中,print语句不在if语块内。要将它放进if块中,你必须像b中那样将print语句缩进,如图b所示。

        考虑下面a和b中代码的另一个例子。a中的代码有两个if子句和一个else子句。哪个if子句是匹配这个else子句的?缩进表明a中else子句匹配第一个if子句而b中else子句匹配第二个if子句。

 因为(i>j) 是false,所以a中的代码显示B,但是b中的语句什么也不显示。

八、逻辑运算符

关键点:逻辑运算符not、 and和or都可以用来创建一个组合条件。

        有时候,几个条件组合在一起决定是否执行一条语句。你可以使用逻辑运算符来组合这些条件形成一个组合表达式。逻辑运算符,也被称为布尔运算符,它是在布尔值上的运算并创建出一个新的布尔值。表4-3罗列出所有的布尔运算符。表4-4定义了not运算符。它对True取反得False,对False取反得True。表4-5定义了and运算符。当且仅当两个操作数都为真时,两个操作数的and操作结果是真。表4-6定义了or运算符。至少有一个操作数为真,两个操作数的or操作结果才为真。

 九、条件表达式

关键点:条件表达式是根据某个条件计算一个表达式。

        你可能想给一个变量赋值,但又受一些条件的限制。例如:下面的语句在x大于0时将1赋值给y,在x小于等于0时将-1赋予y。

ifX>0:
    y=1
else:
    y=-1

        你还可以像下面的例子一样,使用一个条件表达式来获取同样的结果。

y=l if x>0 else -1

        条件表达式完全是另一种不同风格。句法结构如下所示:

expression1 if boolean-expression else expression2

        如果布尔逻辑表达式(boolean-expression)为真,那么这个条件表达式的结果就是expressionl;否则,这个结果就是expression2。

        假设你想将变量numberl和number2中较大的赋值给max。你可以使用下面的条件表达式简单地编写一条语句。

max = number1 if number1 > number2 else number2

        对于另一个例子,如果number是偶数,下 面的语句显示消息“ number is even”,否则,显示“number is odd"。

print("number is even" if number% 2 == 0 else "number is odd")

十、运算符的优先级和结合方向

关键点:运算符的优先级和结合方向决定了运算符的计算顺序。

运算符的优先级和结合方向决定Python运算符的计算顺序。假设你有如下的表达式:

3+4*4>5*(4+3)-1

        它的值是多少?这些运算符的执行顺序又是什么?

        算术上,最先计算括号内的表达式。(括号也可以嵌套,最先执行的是最里面括号中的表达式。)当计算没有括号的表达式时,可以根据优先规则和组合规则使用运算符。

        优先规则定义了运算符的优先性。表4-7包含了你至今已经学习过的所有运算符,以从上到下的顺序罗列出来,其优先级越来越弱。逻辑运算符的优先级低于关系运算符,而关系运算符的优先级小于算术运算符。具有相同的优先级的运算符出现在同一行。

        如果相同优先级的运算符紧连在一起,那它们的结合方向决定了计算顺序。所有的二元运算符(除赋值运算符外)都是从左到右的结合顺序。例如:因为+和-都有相同的优先级,所以表达式:

 

 注意: Python 有自己内部计算表达式的方法,Python计算的结果和它对应的算术计算是一样的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值