Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。
Python 是一种解释型语言:?这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。
Python 是交互式语言:?这意味着,您可以在一个 Python 提示符?>>>?后直接执行代码。
Python 是面向对象语言:?这意味着Python支持面向对象的风格或代码封装在对象的编程技术。
Python 是初学者的语言:Python 对初级程序员而言,是一种伟大的语言,它支持广泛的应用程序开发,从简单的文字处理到 WWW 浏览器再到游戏。
Python 特点
1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。
2.易于阅读:Python代码定义的更清晰。
3.易于维护:Python的成功在于它的源代码是相当容易维护的。
4.一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。
5.互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。
6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。
7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。
8.数据库:Python提供所有主要的商业数据库的接口。
9.GUI编程:Python支持GUI可以创建和移植到许多系统调用。
10.可嵌入:?你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。
什么是字面量?
字面量:在代码中,被写下来的固定的值,称之为字面量。
常用的值类型
?
字符串?
字符串(string),又称文本,是由任意数量的字符如中文、英文、各类符号、数字等组成。所以叫做字符的串。
比如:
“Python语言”
“@#¥*&%”
“QQ号为:365114”
Python中,字符串需要用双引号号(“)包围起来,被引号包围起来的都是字符串。
如何在代码中表达字面量呢?
# 整数字面量
print(666)
# 浮点数数字面量
print(3.1415926)
# 字符串字面量
print("原神启动")
注释:在程序代码中对程序代码进行解释说明的文字。
作用:注释不是程序,不能被执行,只是对程序代码进行解释说明,让别人可以看懂程序代码的作用,能够大大增强程序的可读性。
注释的分类
??单行注释
以#开头,#右边的所有文字当作说明,而不是真正要执行的程序,起辅助说明作用。注意,#号和注释内容一般建议以一个空格隔开
??多行注释
多行注释:以一对三个双引号引起来("""注释内容""")来解释说明一段代码的作用使用方法。
什么是变量
变量:在程序运行时,能储存计算结果或能表示值的抽象概念。简单的说,变量就是在程序运行时,记录数据用的。
??变量名只能包含字母、数字和下划线1。变量名能以字母或下划线打头,但不能以 数字打头。例如,可将变量命名为 message_1,但不能将其命名为 1_message。??变量名不能包含空格,但能使用下划线来分隔其中的单词。例如,变量名 greeting_message 可行,但变量名 greeting message 会引发错误。??不要将 Python 关键字和函数名用作变量名。例如,不要将 print 用作变量名, 因为它被 Python 留作特殊用途。??变量名应既简短又具有描述性。例如,name 比 n 好,student_name 比 s_n 好,name_length 比 length_of_persons_name 好。??慎用小写字母 l 和大写字母 O,因为它们可能被人错看成数字 1 和 0。
我们比较常用的三种数据类型:?
当我们定义了一个数据,如何来验证它的数据类型呢?
这里我们可以使用type()语句来得到数据的类型:
语法:
type(被查看类型是数据)?
几种常用的查看数据类型的方法:?
?演示效果:
变量是用来存放数据定义的,可以看成是存放物品的盒子?,因此变量无类型。
?为什么要转换数据类型?
数据类型之间,在特定的场景下,是可以相互转换的,如字符串转数字、数字转字符串等那么,我们为什么要转换它们呢?
数据类型转换,将会是我们以后经常使用的功能。如∶?从文件中读取的数字,默认是字符串,我们需要转换成数字类型·
?后续学习的input()语句,默认结果是字符串,若需要数字也需要转换
?将数字转换成字符串用以写出到外部系统
?
数字与字符串的转换?
?整数与浮点数的转换
浮点数转换为整数会发生精度的丢失,如果想要详细了解具体原因,可以去了解一下计算机系统基础。
什么是标识符?
在Python程序中,我们可以给很多东西起名字,
比如:
■变量的名字方法的名字
■类的名字,
■等等这些名字,
我们把它统一的称之为标识符,用来做内容的标识。
所以,标识符:是用户在编程的时候所使用的一系列名字,用于给变量、类、方法等命名。
在Python中标识符的命名规则
在 Python 里,标识符由中文,字母、数字、下划线组成。
在 Python 中,所有标识符可以包括英文、数字以及下划线(_),但不能以数字开头。
Python 中的标识符是区分大小写的。
Python中不可以使用关键字。
以下划线开头的标识符是有特殊意义的。以单下划线开头?_foo?的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用?from xxx import *?而导入。
以双下划线开头的?__foo?代表类的私有成员,以双下划线开头和结尾的?__foo__?代表 Python 里特殊方法专用的标识,如?__init__()?代表类的构造函数。
?标识符示例
?变量命名的规范
?字符串是 Python 中最常用的数据类型。我们可以使用引号 (?'?或?"?) 来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。例如:
var1 = 'Hello World!' var2 = "Python Runoob"
思考:如果我想要定义的字符串本身,是包含:单引号、双引号自身呢?如何写?
单引号定义法,可以内含双引号。双引号定义法,可以内含单引号。
可以使用转移字符(\)来将引号解除效用,变成普通字符串。
如果我们有两个字符串(文本)字面量,可以将其拼接成一个字符串,通过+号即可完成,如:
print("IT"+"技术")输出结果:IT技术
不过一般,单纯的2个字符串字面量进行拼接显得很呆,一般,字面量和变量或变量和变量之间会使用拼接,
注意:字符串与字符串之间的拼接才能使用加号,与其他数据类型拼接不能够使用加号。
通过学习字符串的拼接我们会发现:
1.当变量过多时,拼接起来实在太麻烦了。2.字符串无法和数字或其他类型完成拼接。
1.用占位来实现字符串的拼接?
用占位来实现字符串与数字的拼接??
通过上面字符串与数字的拼接我们可以发现不论是字符串还是数字占位用的都是%s,那么我们数字有没有自己的占位符号呢?
?
2.字符串格式化快速写法
?通过语法:f"内容{变量}"的格式来快速格式化
(不限制数据类型,也不关心精度控制,直接输出)
示例:
运行结果:
我们可以使用辅助符号"m.n"来控制数据的宽度和精度
m,控制宽度,要求是数字(很少使用),设置的宽度小于数字自身,不生效。
.n,控制小数点精度,要求是数字,会进行小数的四舍五入。
【示例】
%5d:表示将整数的宽度控制在5位,如数字11,被设置为5d,就会变成:[空格][空格][空格]11,用三个空格补足宽度。
%5.2f:表示将宽度控制为5,将小数点精度设置为2
小数点和小数部分也算入宽度计算。如,对11.345设置了%7.2f后,结果是:[空格][空格]11.35。2个空格补足宽度,小数部分限制2位精度后,四舍五入为.35。
?
前面我们已经知道了解了输出语句print,我们我们如何让输入呢?
因此我们就要了解到新的语句input()语句。
我们前面学习过print语句(函数),可以完成将内容(字面量、变量等)输出到屏幕上。在Python中,与之对应的还有一个input语句,用来获取键盘输入。
数据输出: print
数据输入: input
使用上也非常简单:使用input()语句可以从键盘获取输入。
使用一个变量接收(存储) input语句获取的键盘输入数据即可。
input():括号里面可以加入一句提示语句,等同于print()打印提示语句的效果。
注意:
?input()语句默认输入的数据类型都是字符串类型,我们想要得到其他的数据类型可以自己进行数据类型的转换。
布尔类型就是我们生活中经常提到的事件的真假,它只有两种形态即:True(真)和False(假).
除此之外我们还可以通过比较运算来得到布尔类型的值。
Pyhton中的比较运算符总共有6种
?
基本语法:
输出语句时要注意有缩进。
代码示例
if...elif...else可以用于多条件判断语句。
判断语句的嵌套是指在一个判断语句的分支中再包含一个或多个判断语句。嵌套的判断语句可以是if语句、switch语句等。通过嵌套判断语句,可以根据不同的条件执行不同的程序代码块,从而实现更复杂的逻辑判断和程序流程控制。嵌套判断语句可以多层嵌套,形成多层的条件判断关系。
if..else的嵌套使用案例
Python 编程中 while 语句用于循环执行程序,即在某条件下,循环执行某段程序,以处理需要重复处理的相同任务。其基本形式为:
while 判断条件(condition): 执行语句(statements)……执行语句可以是单个语句或语句块。判断条件可以是任何表达式,任何非零、或非空(null)的值均为true。
当判断条件假 false 时,循环结束。
执行流程图如下
while语句动态实现效果:?
代码示例?
?用while语句实现1-100的累加和
同判断语句的嵌套一样,循环语句的嵌套,要注意空格的缩进。基于空格缩进来决定层次关系。
用while嵌套实现九九乘法表
基本语法:
for循环无法定义循环条件,只能被动取出数据处理?
语法一:
????????range(num):????????获取一个从0开始,到num结束的数字序列(不包含num本身),比如range(5)取得的数据?是:【0,1,2,3,4】
语法二:
? ? ? ? ?range(num1,num2):
????????获取一个从num1开始,到num2结束的数字序列(不包含num2本身),比如range(5,10)取得的数据?是:【5,6,7,8,9】
?语法二:
? ? ? ? ?range(num1,num2,step):
????????获取一个从num1开始,到num2结束的数字序列(不包含num2本身),数字之间的步长以step为准(step默认为1),比如range(5,10,2)取得的数据?是:【5,7,9】
代码示例?
用for循环加上range()语句实现九九乘法表
思考:无论是while循环或是for循环,都是重复性的执行特定操作。在这个重复的过程中,会出现一些其它情况让我们不得不:
1.暂时跳过某次循环,直接进行下一次(continue)
2.提前退出循环,不在继续(break)
?break?语句可以跳出 for 和 while 的循环体。如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
continue?语句被用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。
?
?使用break与continue模拟发放工资
import random
# 公司账户有1w
count = 10000
for Employee in range(1, 21):
num = random.randint(1, 10)
if count > 0:
if num >= 5:
count -= 1000
print(f"向员工{Employee}发放工资1000元,账户剩余{count}")
else:
print(f"员工{Employee}, 绩效分:{num}, 低于5分,不发放工资!下一位!")
continue
else:
print("工资发完了,下个月再来领取吧!")
break
函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。
函数能提高应用的模块性,和代码的重复利用率。你已经知道Python提供了许多内建函数,比如print()。但你也可以自己创建函数,这被叫做用户自定义函数。
定义一个函数
你可以定义一个由自己想要功能的函数,以下是简单的规则:
- 函数代码块以?def?关键词开头,后接函数标识符名称和圆括号()。
- 任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号起始,并且缩进。
- return [表达式]?结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def? 函数名(传入参数):
? ? ? ? 函数体
? ? ? ? return 返回值
2.函数的调用
定义一个函数只给了函数一个名称,指定了函数里包含的参数,和代码块结构。这个函数的基本结构完成以后,你可以通过另一个函数调用执行,也可以直接从Python提示符执行。
语法如下:
函数名(参数)
注意事项:
1.参数如不需要,可以省略。
2.返回值如不需要,可以省略。
3.函数必须先定义后使用。
?传入参数的功能:在函数进行计算的时候,接受外部(调用时)提供的数据。
实现两数之和
# 定义两数相加的函数
def add(x, y):
result = x+y
print(f"{x}+{y} = {x+y}")
# 调用函数
add(5, 6)
add(1, 2)
函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数
参数之间使用逗号进行分隔。
函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值
传入的时候,按照顺序传入数据,使用逗号分隔。
形参和实参是在函数定义和函数调用中使用的两个术语。
形参(形式参数)是在函数定义中使用的变量名称,用来表示函数可以接收的参数。它们在函数体内部起到了类似于普通变量的作用,可以在函数体内使用。
实参(实际参数)是在函数调用时提供的具体数值或变量。它们被传递给函数,并被赋值给函数的形参。实参可以是常量、变量或表达式。
下面是一个简单的示例,说明形参和实参的使用:
def greet(name): # name是形参 print("Hello, " + name) greet("Alice") # "Alice"是实参
在上面的示例中,函数
greet
定义了一个接收一个参数的形参name
。然后,我们通过调用greet("Alice")
来提供一个实参"Alice"
,这样函数就可以打印出"Hello, Alice"。
函数的返回值是函数执行完毕后,将要返回给调用者的结果。在大多数编程语言中,函数可以通过关键字return来返回一个值。返回值可以是任何类型的数据,包括整数、浮点数、字符串、布尔值等。函数的返回值可以被调用者使用,进行一些其他操作或者赋值给一个变量。
当函数没有返回值时,默认返回的是None值(返回空值)。? ? ?
?函数的说明文档通常称为"文档字符串"(docstring),它是在函数定义的开始处使用字符串字面值来提供函数的描述、用法示例、参数说明等相关信息。文档字符串可以被访问和显示,以帮助开发者了解函数的功能和使用方法。
以下是一个具有文档字符串的函数示例:
def add(a, b): """ 返回两个数字的和。 参数: a (int): 第一个数字 b (int): 第二个数字 返回: int: 两个数字的和 """ return a + b
在上面的示例中,三个双引号之间的部分就是函数的文档字符串。它提供了函数的描述、参数说明和返回值说明。
要访问函数的文档字符串,可以使用内置函数
help()
或通过__doc__
属性访问。例如:print(help(add)) # 打印函数的文档字符串 print(add.__doc__) # 打印函数的文档字符串
这将输出函数
add
的文档字符串。编写清晰、详细的文档字符串是良好的编程实践,它可以帮助其他人(包括你自己)理解函数的用途和用法,以及参数的预期类型和返回值。
使用方法如图
在Python中,函数的嵌套调用是指在一个函数的定义或执行过程中调用另一个函数。也就是说,一个函数可以在其内部调用另一个函数。
下面是一个示例,展示了函数的嵌套调用:
def outer_function(): print("这是外部函数") def inner_function(): print("这是内部函数") inner_function() # 在外部函数中调用内部函数 outer_function() # 调用外部函数
在上面的示例中,
outer_function
?是外部函数,它包含了一个内部函数?inner_function
。当调用?outer_function
?时,它会打印出 "这是外部函数" 的消息,并且在内部调用?inner_function
。inner_function
?会打印出 "这是内部函数" 的消息。通过函数的嵌套调用,我们可以在一个函数中封装更多的逻辑,并且可以将代码组织得更加模块化和可读性强。在实际编程中,函数的嵌套调用是一个常见的技巧,可以帮助我们构建更复杂的程序。
什么是变量的作用域?
变量在函数中的作用域是指变量在程序中的可见性和访问范围。通俗的讲就是变量在什么地方可以用,在什么地方不能用,这些地域的限制,就是变量的作用域。
Python中有以下几种变量作用域
? ? ? ? 1.全局作用域(Global scope):全局作用域中定义的变量可以在整个程序中访问,包括函数内部和外部。可以使用?
global
?关键字在函数内部声明一个全局变量。? ? ? ?2. 局部作用域(Local scope):局部作用域中定义的变量只能在所属函数内部访问。这意味着它们对于其他函数是不可见的。
? ? ? ? 3.嵌套作用域(Enclosing scope):嵌套作用域是指在一个函数内部定义的函数。在嵌套函数中,可以访问外部函数的变量,但不能修改它们。
局部变量?
全局变量?
综合案例:模仿ATM
money = 5000000 # 账户初始余额
# 客户输入姓名
name = input("请输入姓名:")
# 查询
def check(show_header):
if show_header:
print("-------查询余额-------")
print(f"您好{name}, 您的账户余额为:{money}元")
# 存款
def saving(num):
global money
money += num
print("--------存款--------")
print(f"{name},您好!您存款{num}元")
check(False)
# 取款
def get_money(num):
global money
money -= num
print("--------取款--------")
print(f"{name},您好!您取款{num}元")
check(False)
def main():
print("--------主菜单-------")
print(f"{name}您好!欢迎来到黑马ATM,请选择操作:")
print("查询余额\t[输入1]")
print("存款\t\t[输入2]")
print("取款\t\t[输入3]")
print("退出\t\t[输入4]")
return input("请输入你的选择:")
while True:
key = int(main())
if key == 1:
check(True)
continue
elif key == 2:
num = int(input("请输入存款金额:"))
saving(num)
continue
elif key == 3:
num = int(input("请输入取款金额:"))
get_money(num)
else:
print("退出程序")
break