django33全栈班2025年008 条件和逻辑运算符

98 阅读10分钟

前言

通过前面的学习, 我们掌握的编程知识已经越来越多了.

现在, 我们已经懂了常用的数据结构, pywebio3录入多个数据, 数学运算符等等.

接下来, 我们学习一下比较运算符和逻辑运算符.

比较运算符

比较运算符主要是用来比较大小的, 通常是数值与数值之间的比较, 常见的有.

  • >: 大于
  • >=: 大于等于
  • <: 小于
  • <=: 小于等于
  • !=: 不等于

光从运算符来看比较简单, 一般就是看一眼就懂, 不过要真正会用, 还是需要大量的练习才行.

在做练习之前, 我们先看看逻辑运算符.

逻辑运算符

逻辑运算符主要是用来组合多个比较表达式的, 比较表达式就是比较运算符组成的算式, 结果是布尔值, 所以逻辑运算符本质上就是判断多个布尔值执行的结果.

常见的逻辑运算符有:

  • and: 与, 连接左右两个结果为布尔值的表达式, 如果同时为真, 则为真, 否则为假
  • or: 或, 连接左右两个结果为布尔值的表达, 有一个为真就为真, 都不为真则为假
  • not: 非, 后面跟一个结果为布尔值的表达式, 如果为真则转成假, 如果为假则转成真

逻辑运算符光从描述上看可能比较绕, 但是用起来实际上比较简单, 不过要真正的学会, 同样也需要做大量的练习.

实践出真知!!!

那么让我们来不断的做练习吧.

课堂练习1

从浏览器输入一个年份, 判断这个年份是否为闰年.

这道题比较简单, 不过核心要理解什么是闰年.

如果一个年份是闰年, 则可以被4整除, 不能被100整除, 或者可以被400整除.

这里面总共有三个条件表达式:

  • 条件1: 可以被4整除
  • 条件2: 不能被100整除
  • 条件3: 可以被400整除

用逻辑运算符连接三个表达式就是: 可以被4整除 并且 不能被100整除 或者 能被400整除

转换成python代码就是: year % 4 == 0 and year % 100 != 0 or year % 400 == 0

了解了核心的算法以后, 我们就开搞吧, 直接上代码, 实际上代码是特别简单的.

参考代码如下:

from pywebio3.input import input, NUMBER, input_group
from pywebio3.output import print

year = input('年份'type=NUMBER)
is_leap_year = year % 4 == 0 and year % 100 != 0 or year % 400 == 0
print(f"{year}年是否为闰年: {is_leap_year}")

课堂练习2

比较两个整数num1 = 10和num2 = 15,使用比较运算符判断num1是否小于num2,并将结果打印出来。

这个直接写就行:

num1 = 10
num2 = 15

print(num1 < num2)

接着我们升级一下, 要求从浏览器录入两个数, 判断哪个数比较大并输出. 这里会涉及到if-else语句的用法.

from pywebio3.input import input, NUMBER, input_group
from pywebio3.output import print

num1 = input('第1个数'type=NUMBER)
num2 = input('第2个数'type=NUMBER)
if num1 > num2:
    print("第一个数比较大")
else:
    print("第二个数比较大")

这里其他部分代码我们基本都学过了, 就是这个if语句需要给大家讲解一下.

if语句叫做条件表达式, if后面跟一个布尔表达式, 结果是一个布尔值.

  • 如果这个布尔值是True, 则执行if下面的代码块
  • 如果这个布尔值是False, 则执行else下面的代码块

这种根据条件的真假, 也就是布尔值是True还是False判断来执行的逻辑, 也叫做分支语句.

课堂练习3

给定字符串str1 = "apple"和str2 = "banana",使用比较运算符判断它们是否不相等,并打印结果。

这个我们也是可以先直接写出结果:

str1 = "apple"
str2 = "banana"

print(str1 == str2)

接着我们也是来升级一下, 从浏览器录入两个用户的姓名, 判断这两个用户的姓名是否相同并输出.

from pywebio3.input import input
from pywebio3.output import print

name1 = input('姓名')
name2 = input('姓名')
print(f"姓名是: {name1} {name2}, 是否相同: {name1 == name2}")

课堂练习4

有三个整数a = 5,b = 10,c = 15,判断a是否小于b并且b是否小于c,使用逻辑运算符实现,打印最终结果。

这个主要是熟悉逻辑运算符的用法.

a = 5
b = 10
c = 15

# 判断a是否小于b并且b是否小于c
print(a < b and b < c)

接下来我们也是升级一下, 从控制台同时录入三个数, 比较哪个数最大, 输出最大的那个数.

from pywebio3.input import input, NUMBER, input_group
from pywebio3.output import print

data = input_group(
    "请输入三个数字",
    [
        input('数字1', name='num1'type=NUMBER),
        input('数字2', name='num2'type=NUMBER),
        input('数字3', name='num3'type=NUMBER),
    ],
)

# 比较最大的值, 假设数字1最大
max_num = data.get('num1')
# 然后和第二个数比较
if data.get('num2') > max_num:
    max_num = data.get('num2')
# 此时max_num是两个数中最大的那个数
# 继续和第三个数比较
if data.get('num3') > max_num:
    max_num = data.get('num3')
# 最终得到的是三个数里面最大的数
print(f"三个数分别是: {data} 最大的数是: {max_num}")

运行效果如下:

在这里插入图片描述

在这里插入图片描述

得到的结果如下:

三个数分别是: {'num1': 11'num2'22'num3'33} 最大的数是: 33

我们来看一下核心代码:

# 比较最大的值, 假设数字1最大
max_num = data.get('num1')
# 然后和第二个数比较
if data.get('num2') > max_num:
    max_num = data.get('num2')
# 此时max_num是两个数中最大的那个数
# 继续和第三个数比较
if data.get('num3') > max_num:
    max_num = data.get('num3')
# 最终得到的是三个数里面最大的数
print(f"三个数分别是: {data} 最大的数是: {max_num}")

首先, 我们假设第一个数最大. 然后拿着最大的数和第二个数比较, 此时我们能够得到两个数中最大的那个数.

也就是说,max_num是第二个数和第二个数中最大的那个数.

继续拿着这个数和第三个数比较, 这样我们就能够得到三个数中最大的那个数是多少.

课堂练习5

有变量x = 8,判断x是否在 5 和 10 之间(包括 5 和 10),使用比较运算符和逻辑运算符组合实现,打印结果。

这个也比较简单, 直接写就行.

x = 8
# 判断x是否在 5 和 10 之间(包括 5 和 10)
if 5 <= x <= 10:
    print("x 在 5 和 10 之间")
else:
    print("x 不在 5 和 10 之间")

我们也是来升级一下, 通过浏览器录入用户的年龄, 判断年龄是否在0-100之间.

from pywebio3.input import input, NUMBER, input_group
from pywebio3.output import print

age = input('年龄'type=NUMBER)
if 0 <= age <= 100:
    print("age 在 0 和 100 之间")
else:
    print("age 不在 0 和 100 之间")

这个案例再扩展一下, 就可以用来识别用户输入的年龄是否为合法的年龄了.

课后练习

以下是 10 道包含比较运算符和逻辑运算符的 Python 练习题:

  1. 给定两个整数num1 = 25num2 = 18,判断num1是否大于num2并且num1除以num2的余数是否为 0,使用比较运算符和逻辑运算符实现,打印结果。
  2. 有三个整数变量a = 7b = 12c = 5,判断a是否小于b或者c是否大于a,同时判断b是否等于c的两倍,使用逻辑运算符连接这两个条件,打印最终结果。
  3. 定义两个字符串str1 = "abcde"str2 = "bcdef",判断str1的长度是否小于str2的长度并且str1是否按字典序小于str2,使用比较运算符和逻辑运算符实现,打印结果。(提示:字符串比较大小是基于字典序)
  4. 对于整数x = 15,判断x是否为奇数(即x除以 2 的余数不为 0)并且x是否大于 10 且小于 20,使用逻辑运算符组合条件,打印判断结果。
  5. 给定两个浮点数float1 = 4.5float2 = 3.8,判断float1是否大于等于float2加上 0.5,同时判断float1float2的乘积是否小于 20,使用比较运算符和逻辑运算符,打印结果。
  6. 有两个布尔变量is_raining = Falseis_windy = True,判断是否(is_raining为真且is_windy为假)或者(is_raining为假且is_windy为真),使用逻辑运算符实现,打印结果。
  7. 定义三个整数m = 9n = 6p = 3,判断m是否能被n整除并且m除以p的结果是否大于 2,同时判断n是否小于p的两倍,使用逻辑运算符组合条件,打印判断结果。
  8. 对于字符串password = "abc123",判断其长度是否在 6 到 10 之间(包括 6 和 10)并且是否至少包含一个数字和一个字母,使用比较运算符、逻辑运算符以及相关字符串方法(如isdigit()isalpha())实现,打印结果。
  9. 给定两个列表list1 = [2, 4, 6, 8]list2 = [1, 3, 5, 7],判断list1的第一个元素是否大于list2的第一个元素并且list1的长度是否等于list2的长度,使用比较运算符和逻辑运算符,打印结果。
  10. 有两个整数变量age1 = 22age2 = 18,判断age1是否大于 20 并且age2是否小于 20,或者age1age2的和是否大于 40,使用逻辑运算符实现,打印结果。

课后练习示例代码

# 练习题 1
num1 = 25
num2 = 18
print(num1 > num2 and num1 % num2 == 0)

# 练习题 2
a = 7
b = 12
c = 5
print((a < b or c > a) and b == 2 * c)

# 练习题 3
str1 = "abcde"
str2 = "bcdef"
print(len(str1) < len(str2) and str1 < str2)

# 练习题 4
x = 15
print(x % 2!= 0 and 10 < x < 20)

# 练习题 5
float1 = 4.5
float2 = 3.8
print(float1 >= float2 + 0.5 and float1 * float2 < 20)

# 练习题 6
is_raining = False
is_windy = True
print((is_raining and not is_windy) or (not is_raining and is_windy))

# 练习题 7
m = 9
n = 6
p = 3
print(m % n == 0 and m / p > 2 and n < 2 * p)

# 练习题 8
password = "abc123"
has_digit = any(i.isdigit() for i in password)
has_letter = any(i.isalpha() for i in password)
print(6 <= len(password) <= 10 and has_digit and has_letter)

# 练习题 9
list1 = [2468]
list2 = [1357]
print(list1[0] > list2[0] and len(list1) == len(list2))

# 练习题 10
age1 = 22
age2 = 18
print((age1 > 20 and age2 < 20) or age1 + age2 > 40)

总结

到目前为止, 我们就学完了比较运算符和逻辑运算符, 也做了大量的练习.

接下来, 只要把条件语句和循环语句学完了, 实际上我们的基础核心就已经学的差不多了.

再接着就是对各种数据结构的详细学习.

接下来学什么

  • 语句

    • 条件语句: if elif else
    • 循环语句: while for
  • 字符串类型专题

  • 列表类型专题

  • 元组类型专题

  • 字典类型专题

  • 集合类型专题

  • 函数

  • 生成式, 在基础阶段就要熟练的掌握...