前言
通过前面的学习, 我们掌握的编程知识已经越来越多了.
现在, 我们已经懂了常用的数据结构, 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 练习题:
- 给定两个整数
num1 = 25和num2 = 18,判断num1是否大于num2并且num1除以num2的余数是否为 0,使用比较运算符和逻辑运算符实现,打印结果。 - 有三个整数变量
a = 7,b = 12,c = 5,判断a是否小于b或者c是否大于a,同时判断b是否等于c的两倍,使用逻辑运算符连接这两个条件,打印最终结果。 - 定义两个字符串
str1 = "abcde"和str2 = "bcdef",判断str1的长度是否小于str2的长度并且str1是否按字典序小于str2,使用比较运算符和逻辑运算符实现,打印结果。(提示:字符串比较大小是基于字典序) - 对于整数
x = 15,判断x是否为奇数(即x除以 2 的余数不为 0)并且x是否大于 10 且小于 20,使用逻辑运算符组合条件,打印判断结果。 - 给定两个浮点数
float1 = 4.5和float2 = 3.8,判断float1是否大于等于float2加上 0.5,同时判断float1与float2的乘积是否小于 20,使用比较运算符和逻辑运算符,打印结果。 - 有两个布尔变量
is_raining = False和is_windy = True,判断是否(is_raining为真且is_windy为假)或者(is_raining为假且is_windy为真),使用逻辑运算符实现,打印结果。 - 定义三个整数
m = 9,n = 6,p = 3,判断m是否能被n整除并且m除以p的结果是否大于 2,同时判断n是否小于p的两倍,使用逻辑运算符组合条件,打印判断结果。 - 对于字符串
password = "abc123",判断其长度是否在 6 到 10 之间(包括 6 和 10)并且是否至少包含一个数字和一个字母,使用比较运算符、逻辑运算符以及相关字符串方法(如isdigit()和isalpha())实现,打印结果。 - 给定两个列表
list1 = [2, 4, 6, 8]和list2 = [1, 3, 5, 7],判断list1的第一个元素是否大于list2的第一个元素并且list1的长度是否等于list2的长度,使用比较运算符和逻辑运算符,打印结果。 - 有两个整数变量
age1 = 22和age2 = 18,判断age1是否大于 20 并且age2是否小于 20,或者age1与age2的和是否大于 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 = [2, 4, 6, 8]
list2 = [1, 3, 5, 7]
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
- 条件语句:
-
字符串类型专题
-
列表类型专题
-
元组类型专题
-
字典类型专题
-
集合类型专题
-
函数
-
生成式, 在基础阶段就要熟练的掌握...