Python语言
设计哲学:
- 优雅
- 简单
- 明确
注:所以python代码对书写格式有严格的要求。
例如:每一行只能完成一个操作,否则会报错。而且python对空格和缩进有严格的要求,不能随意加或减空格。
python特点:
- 完全面向对象的(所以定义变量的时候不用表明变量的类型)
- 有强大的标准库
- 大量的第三方模块
执行python程序的三种方式:
- 解释器python
- 交互式ipython(适用于小的代码,退出无法保存)
- 集成开发环境PyCharm
注:pycharm2.x版本不支持中文,pycharm3.x支持中文
注:python是解释性语言(翻译一行,执行一行),速度慢,但跨平台性好。c/c++是编译性语言(统一编译,一次性执行),速度快,跨平台性差。
基本使用
- 定义变量,输入,输出以及一些基本运算符应用
# 一些基本的运算符应用
ch = input("请输入一个字符串")
print(9/2) # 除法 (数值型和数值型直接运算)
print(9//2) # 除法取整
print(9 % 2) # 取余
print(2 ** 2) # 2的2次方
print(2**64)
print(2*False) # false默认位0
print(ch)
print(ch*3) # 字符串输出3遍(字符串与数值型运算:是将字符串重复输出的次数)
ch = ch + "ok" # 字符串的连接
print(ch)
注:python中定义变量,不用表明其数据类型,直接进行赋值
- 单行,多行的注释
n = input("请输入一个整数") # input默认输入的是字符型
# 强制类型转换int(),float()等
"""
因此我们再进行输入的时候,需要对输入的变量进行强制类型转换
"""
注:
- 单行注释用#,后面位注释内容(#与注释内容之间有一个空格)
- 在代码后面进行注释时,要先空两个空格,之后的与单行注释格式相同
- 代码块的注释用三个引号即可
- 强制类型转换
num = 19
print(type(num))
money = float(input("请输入一个浮点数:"))
number = int(input("请输入一个整数:"))
print("输出强制转换之后的类型: %s" % type(money))
print("输出强制转换之后的类型: %s" % type(number))
注:
- input默认输入的是字符型,所以要进行强制类型转换
- 用int(),float()等函数进行强制转换成相对应的类型
- 可以用type(value)进行查看变量的类型
- 格式化输出
name = "张三"
num = 12
score = 78.50
scale = 50
print("我叫%s ,我的学号是:%04d,我考了%.02f分" % (name, num, score))
print("我超过了%.02f%%" % scale)
注:
- %s是输出字符串
- %d输出有符号的十进制,%04d表示输出整数显示4位,不足的用0补足
- %f输出浮点数,%.02f表示只显示小数点后两位
- %%输出%
- 常见错误
# 常见报错
"""
NameError # 函数名错误
SyntaxError:invalid Syntax # 语法失效(不符合语法错误)
IndentationError:unexpected indent # 缩进错误(不期望出现空格)
"""
程序三大流程
顺序 --从上向下,顺序执行
分支 --根据条件判断,决定要执行的分支
- if else语句
um = 10
if num <= 9:
print("该数比9小%d" % (9-num))
print("该数小于等于9")
else:
print("该数比9大%d" % (num-9))
print("该数大于9")
print("该数为:%d" % num)
注:
- python中的if,else后面都有一个冒号,相当于c里面的()。
- if下面的语句自动缩进4个空格,都为if条件成立下要执行的,else同理。
- 要想在if,else运行完之后执行其他语句,则该语句前不能有任何空格,即顶格进行书写
- elif使用
score = int(input("请输入成绩:"))
if score >= 90:
print("等级: A ")
elif score >= 80: # 相当于c语言的switch
print("等级: B")
elif score >= 70:
print("等级: C")
elif score >= 10:
print("等级: D")
else:
print("不及格")
注:elif是应用于:同时判断多个条件,所有条件是平级。个人觉得,就是c语言里面的switch(),符合那个条件就执行,那个条件下的语句
- if嵌套
"""
火车站安检:
检查是否有票,有票进行开始安检,无票不允许上车
携带的刀是否超过20公分,未超过允许上车,超过不允许上车
"""
has_ticket = False
knife_length = 30
if has_ticket:
print("车票检查通过,准备开始安检")
if knife_length > 20:
print("您的刀太长了,不允许上车")
else:
print("安检通过,允许上车")
else:
print("您没有车票,不允许上车")
注:if嵌套和c语言的使用相同,适用于层级间的关系,只有前面的条件为真,才可以进行判断它的后面的语句。
循环 --让特定的代码重复执行
- while循环
row = 1 # 字符串乘法
while row <= 5 :
print("*" * row)
row += 1
注:相当于单层循环
【运行结果】
- while嵌套循环
row = 1
while row <= 5:
col = 1
while col <= row:
print("*", end="") # print()默认输出换行,加end后在输出内容后不直接换行print("*",end="---")
col += 1
print() # 在一行小星星输出后进行换行
row += 1
注:相当于多重循环,用多重循环来输出上述格式的小星星
- break,continue
注:break,continue与c语言相同,break跳出循环;continue跳出本次循环
函数
- 函数的定义
- 定义格式
def 函数名():
函数封装的代码
······
注:
- def的英文缩写是define的缩写
- 函数名称能代表函数封装代码的功能,方便后继的调用
- 函数名称的命名应符合标识符的命名规则
- 可以有字母,下划线和数字组成
- 不能以数字开头
- 不能与关键字重名
例如:将上面的九九乘法表代码进行修改,用函数输出
def output(): # 定义函数名
row = 1
while row <= 9:
col = 1
while col <= row:
num = col * row
print("%d*%d=%d" % (col, row, num), end="\t") # \t(转义字符加t)
# 在控制台输出一个制表符,协助在垂直方向保持对齐
col += 1
print("")
row += 1
import mll_while嵌套输出九九乘法表 # 导入函数所在的模块(相当于java中的包)
# 通过调用函数输出,因为不再一个模块中,所有前面有模块的调用
mll_while嵌套输出九九乘法表.output()
注:
- 这是两个代码,前一个代码的名字为mll_while嵌套输出九九乘法表,所以后面直接通过output()进行调用。
- def定义函数时,后面有一个“:” 不能丢,后面的代码要有缩进才在函数里。
- 不能将函数的调用放在函数的定义前面。否则回报NameError错误!
拓展Pyc文件(对上述例子的拓展)
我们在浏览文件夹的时候会发现多了一个** _pycache _ ** 的文件,该目录下有一个** mll_while嵌套输出九九乘法表.cpython-37.pyc **,cpython-37表示python解释器的版本。
原因:python在解释源程序分为两步:1>首先处理源代码,编译生成一个二进制字节码
2>再对字节码进行处理,才会生成CPU能够识别的机器码
-
有了模块的字节码文件后,下一次运行的程序时,如果在上次保存的字节码之后没有修改过代码,python将会加载.pyc文件并跳过编译步骤。这样运行的速度就加快了。但是如果你修改了源代码,字节码将自动重新创建。 -
函数的参数
-
定义:在函数名后的小括号中填写参数,多个参数间用 , 分隔
-
作用:增加函数的通用性,针对相同的数据处理逻辑,能够适应更多的数据。
-
在函数内部,把参数当变量使用,进行数据处理
-
在函数调用时,按照参数传递
-
形参和实参:
-
形参:定义函数时,小括号中的参数,是用来接受参数用的,在函数内部作为变量使用
-
实参:调用函数时,小括号中的参数,是用来把数据传递到函数内部用的。
例如:
def compare(num1, num2):
if num1 > num2:
print("%d大于%d" % (num1, num2))
else:
print("%d小于等于%d" % (num1, num2))
compare(10, 2)
注:compare调用时要与前面函数定义要有两行空行,不然下面会有小的波浪线
-
函数的返回值
-
返回值是函数执行完,最后给调用者一个值
-
在函数中用return关键字进行返回结果,而且return后面的代码都不会被执行
-
函数调用一方可以使用变量来接受函数返回的结果
例如:
def compare(num1, num2):
if num1 > num2:
return num1
else:
return num2
result = compare(10, 6)
print("大数为:%d" % result)
- 函数的嵌套使用
- 定义:一个函数中又调用了另一个函数,就叫函数的嵌套
例如:
def print_line(char, times):
print(char * times)
def print_lines(char, times):
"""
打印多行分割线
:param char: 分割线使用的分隔符
:param times: 分割线重复的次数
:return: 无返回值
"""
row = 0
while row < 5:
print_line(char, times)
row += 1
print_lines("*", 3)
- 在模块中使用函数
- 概念:
- 模块就好比是工具包,要想使用其中的工具,就要用import导入,导入后用模块名.变量或者模块名.函数的方式来使用定义过的变量和函数。
- 每一个以.py结尾的源代码文件中都是一个模块
- 在模块中定义的全局变量,函数都是能够提供给外界直接使用的工具
注:模块让写过的代码重复使用,模块名也是一个标识符
如果在给的python文件起名的时,以数字开头时无法在pyCharm中通过导入这个模块
( 在导入11文件的时候就会报错)
综合应用
- 石头,剪刀,布游戏
import random
player = int(input("请出拳 石头(1) 剪刀(2) 布(3):"))
computer = random.randint(1, 3) # 生成随机数n: 1 < = n < = 3
print("电脑出拳:%d, 我出拳:%d" % (computer, player))
if(player == 1 and computer == 2) or (player == 2 and computer == 3) or (player == 3 and computer == 1):
print("我赢了")
elif player == computer:
print("平局")
else:
print("电脑赢了")
【运行结果】
- 输出九九乘法表
row = 1
while row <= 9:
col = 1
while col <= row:
num = col * row
print("%d*%d=%d" % (col, row, num), end="\t") # \t(转义字符加t)
# 在控制台输出一个制表符,协助在垂直方向保持对齐
col += 1
print("")
row += 1
【运行结果】