我的全栈之路-Python基础之Python基本程序设计
2.1 标识符
标识符是在程序开发时给工程、包,类、变量,方法等等命名的字符序列。 标识符在命名时需要遵守相关的规则和规范:
命名规则
- 标识符由字母、数字、下划线组成,不能以数字开头
- 标识符不能是关键字,因为关键字是被Python赋予特殊含义,但是标识符可以包含关键字
- Python区分大小写,例如name和Name是不同的含义
- 标识符建议命名时见名知意,增加程序的可维护性
- 标识符建议命名(例如变量、函数)时如果包含多个单词,单词字母小写,多个单词之间使用下划线隔开。
python提供了获取关键字的包keyword,可以通过keyword.kwlist获取关键字,然后使用printf()函数输出关键字。
import keyword
"""
python关键字获取
首先导入python提供的获取关键字的包 keyword
然后调用keyword提供的kwlist方法
最后调用print方法输出关键字
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 12:21 上午
@since python3.7.4
"""
print(keyword.kwlist)
2.2 变量
2.2.1 变量概述
程序的核心任务就是处理数据,而数据的来源通常是通过输入设备(例如鼠标键盘)、磁盘、网络的数据加载到内存中,然后由CPU从内存中获取数据和指令执行,然后将执行结果写入到内存或者磁盘。
如果想要将程序的数据临时存储到内存中,并方便的操作内存中的数据,编程语言(C/C++/Python等等)通过变量来描述这一过程,操作变量就是操作内存的数据。
变量的本质就是内存的一段区域,这段区域占据的内存大小、存储的数值范围、能进行的运算等等由这个变量的类型来决定。变量名就意味着代表特殊含义的内存区域,操作这个变量就是操作变量代表的内存区域,每个变量在内存中都有唯一一个地址。在同一时刻,变量只能存储一份值,如果重复赋值,那么新值会将旧的值覆盖掉。
2.2.2 变量的定义和使用 Python变量的定义格式为 变量名 = 变量值,例如 name = "刘光磊" ,=表示把右边的值赋值给左边的变量。
如果想要查看赋值后的结果可以使用print(name)输出变量的值,变量既然称为变量,就是可以进行多次赋值,首次赋值时称为定义变量,再次赋值时称为修改变量的值。
变量除了被赋值以外,还可以做运算,例如算术运算等等。同时也可以将一个之前定义过的变量赋值给另外一个变量。
"""
变量定义的格式 变量名 = 变量值
通过操作变量名
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 12:00 上午
@since python3.7.4
"""
# 首次赋值是定义变量
name = "刘光磊"
# 输出变量的值
print(name) # 此时name存储的是刘光磊
# 再次赋值时是修改变量的值
name = "戴娆"
# 输出变量的值
print(name) # 此时name的值已经被改变,存储的是戴娆
# 使用变量和其他数据进行运算
age = 26
print(age)
# 先计算 age+1,得到一个结果27,然后调用python解释器的打印输出27
print(age + 1)
left = 10
print(left) # 10
# 变量赋值时可以将之前定义的变量名(例如这里的left)赋值给另外一个变量(right)
right = left
# 此时right表示内存区域存储的变量值也是10
print(right) # 10
2.2.3 变量的数据类型
之前在定义变量时,并未指定变量的类型,python编译器会根据变量值的类型来自动推断出变量的类型,如果想要获取变量的类型,可以使用Python提供的type()函数获取变量的类型,type()函数的参数可以传变量值或者是变量类型。
python的数据类型可以分为简单数据类型和高级数据类型,简单数据类型有整数类型、小数类型、字符串类型、布尔类型,高级数据类型有列表、元祖、字典、set集合。
"""
python提供了type()函数获取数据的类型,参数可以传变量类型,也可以传变量值
变量声明时未指定类型,但是python解释器会根据变量的值推导出变量的类型
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 12:01 上午
@since python3.7.4
"""
# 使用type()函数获取100的类型,然后赋值给result
result = type(100)
print(result) # 表示类型<class 'int'>
i = 100
result = type(i)
print(result) # <class 'int'>
flt = 3.14
result = type(flt)
print(result) # <class 'float'>
flag = True
result = type(flag)
print(result) # <class 'bool'>
flag = False
print(type(flag)) # <class 'bool'>
description = "hello python"
result = type(description)
print(result) # <class 'str'>
2.3 读取键盘输入数据
python提供了input函数用于读取用户在控制台使用键盘输入的数据,input读取到的数据默认都是字符串类型,当程序中使用input函数时,程序会暂停,直到用户输入数据,如果想要提示用户输入什么数据,可以在input()函数中传入相应的提示信息,使得程序实现更好的人机交互。
"""
获取键盘输入的数据
python提供了input函数用于获取键盘输入的数据
键盘输入的数据无论是什么类型,input函数获取的数据类型都是字符串
当调用input函数后,程序就会暂停,等待用户从键盘输入数据,数据输入完成后按回车
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 11:36
@since python3.7.4
"""
print("请输入你的年龄") # 输入年龄后按回车
# 获取用户输入的年龄并赋值给age
age = input()
# 获取变量的数据类型
print("age 的类型是%s" % type(age))
# 输出用户输入的年龄数据
print("你输入的年龄是%s" % age)
height = input("请输入你的身高\n")
print("你输入的身高是%s" % height)
2.4 格式化输出
在写helloworld程序时调用了python解释器自带的print()函数输出"hello world"字符串常量到终端上。 而在日常开发中除了字符串以外,还会输出整数、浮点数、布尔类型常量等等。
# 打印常量
# 打印字符串
print("hello python")
# 打印整数
print(10)
# 打印浮点数
print(3.14)
# 打印bool值
print(True)
除此以外还可以打印输出整数、浮点数、布尔型以及字符串变量的值
# 打印字符串变量
desc = "跟磊哥学Python"
print(type(desc))
print(desc)
desc = "跟磊哥学Python,决战人工智能"
print(desc)
同时还可以打印输出表达式运算的结果
# 打印数据运算的结果 //表示整除
print(10 + 20 // 3)
如果输出的字符串中包含某个类型变量的值,就需要使用变量类型对应的格式化操作符转换。
格式化操作符号 | 转换 |
%c | 字符 |
%s | 字符串 |
%d | 有符号十进制整数 |
%u | 无符号十进制整数 |
%o | 八进制整数 |
%x | 十六进制整数(小写字母0x) |
%X | 十六进制整数(大写字母0X) |
%f | 浮点数 |
%e | 科学计数法(小写'e') |
%E | 科学计数法(大写'E') |
%g | %f和%e的简写 |
# 如果输出的字符串包含某个变量的值,就需要使用变量类型对应的格式化操作符替换。
# 整数 格式化操作符的使用
age = 26
print("我的年龄是26岁")
# 整数的格式符 %d会由 age 替换
print("我的年龄是%d岁" % age)
print("我的年龄是%d岁" % 26)
# 字符串 格式化操作符的使用
name = "tony"
# %s会由变量name的值替换
print("我的名字是%s" % name)
# %s会由常量tony替换
print("我的名字是%s" % "tony")
# 输出的字符串有多个变量时,待根据格式符替换的变量使用()包含起来,并且使用,隔开
print("我的名字是%s我的年龄是%d" % (name, age))
height = 178.5
# print默认输出小数的时候保留6位数,如果想保留指定n位小数,在%f的中间加上.n,例如%.1f
print("我的身高是%.1f" % height)
number = 8
# %0nd按照指定的宽度(n)显示数据,不足用0补齐
print("number = %06d" % number)
如果输出的字符串包含多个变量,待根据格式符替换的多个变量使用括号()包含起来,并且变量间使用逗号(,)隔开。括号()中变量的个数、类型和顺序和字符串中的格式符保持一致。
浮点型格式化操作符%f默认打印输出会保留6位小数,如果想要保留指定位数的小数,可以在%f之间使用.n来实现,其中n就是指定的小数位数。
2.5 数据类型转换 当在使用input函数获取用户输入的数据时,由于input读取到的数据类型都是字符串,而字符串在进行算术运算方面有些限制,例如字符串不能进行减法、减法运算等等。此时我们就需要使用python提供的类型转换来实现,例如将一个字符串转换为整数时只需要使用int(字符串)函数即可实现,将一个字符串转换为小数时使用float(字符串)函数即可实现。
"""
Python提供的常用数据类型转换函数
函数名 函数功能
int(x [,base ]) 将x转换为一个整数
float(x ) 将x转换为一个浮点数
complex(real [,imag ]) 创建一个复数,real为实部,imag为虚部
str(x ) 将对象 x 转换为字符串
repr(x ) 将对象 x 转换为表达式字符串
eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象
tuple(s ) 将序列 s 转换为一个元组
list(s ) 将序列 s 转换为一个列表
chr(x ) 将一个整数转换为一个Unicode字符
ord(x ) 将一个字符转换为它的ASCII整数值
hex(x ) 将一个整数转换为一个十六进制字符串
oct(x ) 将一个整数转换为一个八进制字符串
bin(x ) 将一个整数转换为一个二进制字符串
根据输入的手机价格和数量计算应付金额
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 13:59
@since python3.7.4
"""
price = input("请输入购买手机的单价\n")
count = input("请输入购买手机的数量\n")
print("购买手机的单价是%s\n" % price)
print("购买手机的单价是%s\n" % count)
# 此处运行会出错 input读取的数据都是字符串 此处需要使用类型转换才能进行乘法运算,因为字符串和字符串之间不能使用乘法运算
# amout = price * count # TypeError: can't multiply sequence by non-int of type 'str'
flt_price = float(price)
print("f_price 类型是 %s" % type(flt_price))
int_count = int(count)
print("int_count 类型是 %s" % type(int_count))
amout = flt_price * int_count
print("购买手机的应付金额是%.2f" % amout)
除了常用的float和int外,python还提供了其他常用的数据类型转换
函数名 | 函数功能 |
int(x [,base ]) | 将x转换为一个整数 |
float(x ) | 将x转换为一个浮点数 |
complex(real [,imag ]) | 创建一个复数,real为实部,imag为虚部 |
str(x ) | 将对象 x 转换为字符串 |
repr(x ) | 将对象 x 转换为表达式字符串 |
eval(str ) | 用来计算在字符串中的有效Python表达式,并返回一个对象 |
tuple(s ) | 将序列 s 转换为一个元组 |
list(s ) | 将序列 s 转换为一个列表 |
chr(x ) | 将一个整数转换为一个Unicode字符 |
ord(x ) | 将一个字符转换为它的ASCII整数值 |
hex(x ) | 将一个整数转换为一个十六进制字符串 |
oct(x ) | 将一个整数转换为一个八进制字符串 |
bin(x ) | 将一个整数转换为一个二进制字符串 |
2.6 算术运算符 算术运算符主要是完成数据的算术运算,例如加(+)、减(-)乘(*)除(/)、整除(//)、取模(%)、取幂(**)运算。Python中的除法运算结果默认是浮点型,例如 20/3=6.666666666666667,而如果想要获取整除的结果(即计算结果舍弃小数部分)可以使用整除运算符(//)实现
取模即求余数,等价于 被除数/除以除数=商...余数,求最后的余数。 如果一个数取模n等于0,那么这个数一定是n的倍数。例如4%2=0,4就是2的倍数。
如果想要求一个数的n次方,可以使用取幂(**)运算实现,例如2 **3 =8
"""
python常用算术运算符
(+)
减(-)
乘(*)
除(/)
整除(//)、
取模(%)、
取幂(**)
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 13:04
@since python3.7.4
"""
# 常量运算
print("20 + 10 = %d" % (20 + 10))
print("20 - 10 = %d" % (20 - 10))
print("20 * 10 = %d" % (20 * 10))
# 两个整数相除 结果是小数
print("20 / 10 = %d" % (20 + 10))
# 整数与浮点数相除结果是小数
print("20 / 3.0 = %f" % (20 / 3.0)) # 6.666667
# 如果想要整除,使用//来实现 整除运算会舍去小数部分
print("20 // 3 = %d" % (20 // 3)) # 6
# 取模运算 等价于被除数/除数=商...余数,求最后的余数
# %% 用于转义,这里会输出一个%
print("5 %% 2 = %d " % (5 % 2)) # 5 % 2 = 5/2 =2...1
# 如果一个数字取模n等于0,那么这个数一定是n的倍数
print("4 %% 2 = %d " % (4 % 2))
# 取幂运算 2的3次方就是8
print("2 ** 3 = %d" % 2 ** 3)
# 不同数据类型的算术运算
# 字符串与整数、小数不能进行算术运算的加减运算,但是可以和整数进行乘法运算
# print("desc"+3) can only concatenate str (not "int") to str
# print("desc" - 3) # unsupported operand type(s) for -: 'str' and 'int'
print("desc *3 = %s " % ("desc" * 3))
# 但是字符串可以和字符串相加
print("python学习的内容包含" + "python基础" + " web" + " Django" + "人工智能"+"爬虫"+"自动化运维")
# 布尔类型的值可以与数值直接进行运算 当布尔类型的值为True,当作1,False当作0
print("True + 1 = %d" % (True + 1))
print("False + 1 = %d" % (False + 1))
在多种数据类型进行运算时需要注意,字符串和整数、小数不能做加法、减法运算,但是可以和整数做乘法运算,字符串和字符串之间可以使用加法运算,表示字符串连接。布尔类型的值可以与数值直接进行运算 当布尔类型的值为True,当作1,False当作0
2.7 赋值运算符 Python中的赋值运算符使用=表示,赋值运算符是将=右边的值赋值给左边的变量。同时赋值运算符可以和算术运算符组合使用,称为复合运算符。
"""
python赋值运算符
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 13:19
@since python3.7.4
"""
# 赋值运算符
name = "tony"
print(name)
# 赋值运算符和算术运算符组合使用
salary = 50000.0
# salary += 5000.0 等价于 salary = salary +5000.0
salary += 5000.0
print("salary = %.2f" % salary)
salary -= 5000.0
print("salary = %.2f" % salary)
salary *= 5.0
print("salary = %.2f" % salary)
salary /= 5000.0
print("salary = %.2f" % salary)
salary //= 24.0
print("salary = %.2f" % salary)
2.8关系运算符
关系运算符又叫做条件运算符或者比较运算符,主要用于数据的关系运算,例如大于(>)、大于等于(>=),小于(<),小于等于(<=),等于(==)。关系运算符运算的结果是布尔类型的值,即要么是True,要么是False。
"""
关系运算
python常用的关于运算符有 大于(>)、大于等于(>=),小于(<),小于等于(<=),等于(==),关系运算符运算的结果是布尔类型
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 17:23
@since python3.7.4
"""
left = 10
middle = 10
right = 20
print(" left =%d \t middle = %d \t right = %d " % (left, middle, right))
print("left > right ", (left > right))
print("left >= right ", (left >= right))
print("left < right ", (left < right))
print("left <= right ", (left <= right))
print("left == right ", (left == right))
print("\n我是分割线\n")
print("left > middle ", (left > middle))
print("left >= middle ", (left >= middle))
print("left < middle ", (left < middle))
print("left <= middle ", (left <= middle))
print("left == middle ", (left == middle))
2.9 Bug和Debug
人的一生都不是一帆风顺的,编写程序也是一样。 在企业日常程序开发中,往往会遇到许多错误,这些错误可能是业务需求理解错误,也可能是程序编写不当造成的错误,例如之前使用字符串和字符串做加减法运算,当然在初学者学习一门语言时还会犯一些基本的语法错误。我们统一把程序中的错误统称为Bug。
而且通常情况下项目开发完之后由测试进行完整性功能测试、集成测试、压力测试等等,尽量在项目上线前找出程序中的Bug,然后让开发人员修复,解决Bug的过程就称为Debug。
解决Bug的能力是一个程序员的基本修养,在Pycharm中运行程序时提供了Run和Debug两种模式,如果想要发现程序中的Bug,首先在可能出现错误的地方设置断点,然后启动Debug模式,一步一步跟踪程序的运行过程,排查问题。
程序执行到断点对应的行数时会暂停。
还可以在Pycharm提供的debug窗口中查看变量值
如果在调试程序时想要逐行执行代码,可以使用F8快捷键,Alt+F9可以跳转到下一个断点。
如果在调试程序时,程序调用了某个方法,可以使用快捷键F7进入方法。
2.10 条件判断
日常生活中,做许多事情都是有条件的,例如想要结婚,丈母娘可能得要你有车有房才肯把姑娘嫁给你。
在python中,如果想要实现条件判断,可以使用if语句实现,其语法结构为
if 条件表达式:
语句体
其中条件表达式的运算结果是True,就会执行语句体的内容,语句体可以包含多条可执行语句,需要使用Tab空四个后编写语句体。
"""
条件判断
if 关系表达式:
语句体
执行流程:首先判断关系表达式的结果是否为True,如果为True,则执行语句体,语句体中可以包含多种执行语句
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 17:47
@since python3.7.4
"""
string_age = input("请输入你的年龄\n")
int_age = int(string_age)
if int_age >= 18:
print("你已经成年了")
print("该负担起成年人的责任了")
# if语句之外的执行语句
print("outside of if")
if语句只能做一种条件的判断,那如何实现两种分支结构呢?if/else实现即可,其语法结构为
if 条件表达式:
语句体
else:
语句体
if/else的执行流程是如果条件表达式的计算结果为True,则执行if的语句体,条件表达式的计算结果为False,执行else的语句体。
"""
双分支if/else
if 条件表达式:
语句体
else 条件表达式:
语句体
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 18:39
@since python3.7.4
"""
string_age = input("请输入你的年龄\n")
int_age = int(string_age)
if int_age >= 18:
print("恭喜你成年了")
else:
print("你未成年")
print("outside of if/else")
除了单分支、双分支外,if语句还能实现多分支条件判断,其语法结构为
if 条件表达式:
语句体
elif 条件表达式:
语句体
else:
语句体
if/elif/else执行流程
首先判断if的条件表达式是否为True,如果为True的话,执行if对应的语句体,然后结束if/elif/else语句。
否则就从上往下依次执行elif,elif的数量是由业务来决定的,可以有多个elif,一旦elif的条件表达式成立,那么会执行对应elif的语句体,然后结束整个if/elif/else语句。
如果if和elif的条件表达式都是为false,那么最后会执行else的语句体,然后结束整个if/elif/else语句。else语句根据结合业务逻辑来判断是否需要添加。
根据用户输入的分数判断是优秀、良好、中等、及格还是不及格
"""
多分支选择结构
if/elif/else
if 条件表达式:
语句体
elif 条件表达式:
语句体
else:
语句体
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 18:51
@since python3.7.4
"""
string_score = input("请输入你的分数\n")
int_score = int(string_score)
if int_score >= 90:
print("优秀")
elif int_score >= 80:
print("良好")
elif int_score >= 70:
print("中等")
elif int_score >= 60:
print("及格")
else:
print("不及格")
print("outside of if/elif/else")
根据用户输入的整数判断星期
"""
根据用户输入的数字判断星期几
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 19:25
@since python3.7.4
"""
string_number = input("请输入1-7之间的整数\n")
int_number = int(string_number)
if int_number == 1:
print("星期一")
elif int_number == 2:
print("星期二")
elif int_number == 3:
print("星期三")
elif int_number == 4:
print("星期四")
elif int_number == 5:
print("星期五")
elif int_number == 6:
print("星期六")
elif int_number == 7:
print("星期天")
else:
print("你输入的数字非法,请检查")
print("outside of if/if")
if语句适合单分支的业务场景,if/else语句适合双分支的业务场景,if/elif/else语句适合多分支的业务场景。它们都是只要满足条件表达式,就会结束语句。
在复杂的业务场景中,还会用到嵌套的if结构,嵌套的if语法结构为
if 条件表达式:
if 条件表达式:
语句体
嵌套if的执行流程是首先判断外层if的条件表达式运算结果是否为True,如果为True,则会开始执行嵌套if的条件表达式运算,如果为True,则会执行嵌套if的语句体。
使用嵌套if来判断如果性别为boy 并且年龄大于等于22,输出"你到了法定的结婚年龄"
"""
嵌套 if
if 条件的表达式:
if 条件表达式:
语句体
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 19:05
@since python3.7.4
"""
gender = input("请输入你的性别 boy or girl\n")
if gender == "boy":
string_age = input("请输入你的年龄\n")
int_age = int(string_age)
if int_age >= 22:
print("你到了法定结婚年龄")
else:
print("你没有到法定的结婚年龄")
else:
print("你没有到法定的结婚年龄")
print("outside of if/if")
嵌套if和if/elif也可以组合使用,其语法结构为
if 条件的表达式:
if 条件表达式:
语句体
else:
语句体
elif 条件表达式:
if 条件表达式:
语句体
else:
语句体
嵌套if和if/elif的执行顺序 首先执行外层if的条件表达式,如果表达式结果为True,则执行嵌套if的表达式,如果为True,则执行嵌套if的语句体,否则就执行嵌套else的语句体。
如果外层if的条件表达式为False,则执行elif的表达式,如果elif的表达式为True,则执行嵌套的if表达式,如果为True,则执行嵌套if的语句体,否则执行嵌套else的语句体。
"""
嵌套 if和if/elif使用
if 条件的表达式:
if 条件表达式:
语句体
else:
语句体
elif 条件表达式:
if 条件表达式:
语句体
else:
语句体
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 19:05
@since python3.7.4
"""
gender = input("请输入你的性别 boy or girl\n")
if gender == "boy":
string_age = input("请输入你的年龄\n")
int_age = int(string_age)
if int_age >= 22:
print("你到了法定结婚年龄")
else:
print("你没有到法定的结婚年龄")
elif gender == "girl":
string_age = input("请输入你的年龄\n")
int_age = int(string_age)
if int_age >= 20:
print("你已经到了法定结婚年龄")
else:
print("你还没有到法定结婚年龄")
else:
print("你没有到法定的结婚年龄")
print("outside of if/if")
2.11 逻辑运算符
逻辑运算符有逻辑与(and)、逻辑或(or)、逻辑非(not)三个,逻辑运算的结果都是布尔类型。 逻辑与:and 左右两边表达式的结果都为True,逻辑与的结果为True,否则为False 逻辑或:or 左右两边表达式的结果都为False,逻辑或的结果为False,否则为True 逻辑非:表达式的结果为True,not 表达式的结果为False,即取反。
使用逻辑与运算根据用户输入的数据判断是否为高富帅
"""
逻辑运算符
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 20:07
@since python3.7.4
"""
salary = float(input("请输入你的薪水\n"))
height = int(input("请输入你的身高\n"))
score = int(input("请给你的外貌打分\n"))
print("你的薪水是%.2f,你的年龄是%d,你的外貌打分是%d" % (salary, height, score))
if salary >= 20000.0 and height >= 180 and score >= 80:
print("你是高富帅")
else:
print("你不是高富帅")
逻辑或运算
"""
逻辑或运算
or 两边的表达式只要有一个为True,逻辑或的表达式结果就为True
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 20:44
@since python3.7.4
"""
asset = int(input("请输入当前的资产\n"))
salary = int(input("请输入你的薪水\n"))
if asset >= 5000000 or salary >= 50000:
print("你能在二线城市过上美好的生活")
else:
print("你不能在二线城市过上美好的生活")
逻辑非运算
"""
逻辑非
@author liuguanglei ittimelinedotnet@gmail.com
@website ittimeline.net
@version 2019/9/4 20:52
@since python3.7.4
"""
flag = True
print("flag 逻辑非运算的结果是", not flag)