龙听期货论坛's Archiver

龙听 发表于 2024-3-4 16:27

Python-核心语法

一、变量

1.1 定义

可变的量,x="hello",这里x就是一个变量。

1.2 变量名规则

变量名由字母(a-z, A-Z)、数字(0-9)和下划线(_)组成

变量名不能以数字开头

变量名是区分大小写的

在此基础上,也约定了一些变量名的命名规范(非硬性要求,是程序员们的一种约定俗成的规则,使得可读性更高):

普通变量一般用小写字母

最好不要用单词加数字的方式来命名变量,尤其是没有意义的随机数字

有两种风格的变量名:单词之间用下划线隔开;每个单词的首字母使用大写字母(也称为驼峰命名法)

1.3 关键字

命名时要避免使用关键字

[img]http://p.algo2.net/2024/0304/06eedac0b2f84.png[/img]

同时也要避免使用方法来命名,如print

1.4 变量赋值

变量可以重复使用,也可以修改。Python的声明和赋值在同一行代码完成。

如:[code]name="Rabbit"[/code]先定义了一个名为"name"的变量,然后给它赋值为"Rabbit"。变量必须要先声明,才能使用。否则会报错。[code]NameError: name 'xxx' is not defined[/code]在变量定义完成后,我们可以随意读取、修改它的值,如:[code]# 定义name变量,赋值为"Rabbit"
name = "Rabbit"
print("Dear", name)
# 修改变量的值为"Carrot"
name = "Carrot"
print("Dear", name)[/code]如果同时定义三个变量,并且都赋值为1,可以:[code]a = b = c = 1[/code]给a,b,c分别赋值为1,2,3,可以:[code]a,b,c = 1,2,3[/code]也可以直接交换几个变量的值:[code]# 定义两个变量,其中a=1, b=2
a, b = 1, 2
# 进行交换,现在a=2, b=1
a, b = b, a[/code]1.5 变量的销毁(不是很重要的样子)

一般无需手动的去销毁变量,Python的垃圾回收机制会帮我们处理掉那些不再使用的变量,如果我们想刻意销毁删除某个变量,可以使用del关键字[code]del name[/code]销毁后,这个变量就像没有定义过一样,再使用它的话就会产生异常。

二、数据类型

Python中,变量不区分类型,但是变量的值有类型。

2.1 数据类型

数值型

整型 int

浮点型 float

——整型和浮点型可以相互运算,只要有浮点型参与运算,结果就是浮点型

字符串

字符串放在引号中

当字符串中需要显示引号本身,又怕与字符串的引号搞混,这时可以使用反斜杠\来进行转义——例如 \"的意思就是这里的引号就是引号本身,不具有其他的特殊作用[code]print("Rabbit: \"Let me eat.\"")
# 输出的结果是:Rabbit: "Let me eat."[/code]Python既可以使用双引号又可以使用单引号,所以如果我们想要在字符串中显示引号,也可以不用转义,直接使用单引号定义字符串,这样字符串中的双引号就会显示为双引号本身了[code]print('Rabbit: "Let me eat."')
# 输出的结果是:Rabbit: "Let me eat."[/code]如果要定义的字符串很长,编写的时候可以使用反斜杠\来连接多行,例如:

[img]http://p.algo2.net/2024/0304/6734c2c9885d5.png[/img]

[img]http://p.algo2.net/2024/0304/d555ca122c3b2.png[/img]

输出的时候还是会显示为一整行

当然如果特别长呢,也可以使用三引号(三对双引号 或者 三对单引号 都可以)

[img]http://p.algo2.net/2024/0304/2a91aa476b8a3.png[/img]
[img]http://p.algo2.net/2024/0304/38eb1b2e5430d.png[/img]

布尔值(True and False)——关键字,不能定义为变量名

空值(None)

None也是关键字

作用:如想定义一个变量,但是赋值与类型都没决定,可以先赋值为None

None被print输出是显示为字符串None[code]temp = 'None'
print(temp)
# 输出结果为:None[/code]2.2 类型转换

2.2.1 布尔值转换

内置函数bool()——把其他值转换为布尔值

对于数值类型,所有的非零值转换为True, 只有零值才转换为False

对于任何非空的字符串,转换为布尔值都是True

空值None转换为布尔值永远都是False[code]# Some examples
print("bool(1)=", bool(1))
print("bool(-1)=", bool(-1))
print("--对于非0数值,转换结果都为True")
print("bool(0)=", bool(0))
print("--0值转换结果为False")
print("bool('')=", bool(''))
print("--空字符串转换结果为False")
print("bool(None)=", bool(None))
print("--空值转换结果为False")
print("bool('abc')'=", bool('abc'))
print("--字符串转换结果为True")
print("bool(' ')=", bool(' '))
print("--只包含一个空格的字符串,转换结果为为True")[/code][img]http://p.algo2.net/2024/0304/c351787e159bf.png[/img]

2.2.2 字符串转换

内置函数str()——把其他类型转换为字符串

True, False, None 这三个值转换为字符串就是它们的单词本身,实际上在实际编程中,我们很少需要把它们转换成字符串来使用。

对于数值类型,也可以用str()将它们转换为字符串

float()——把一个带小数点的字符串转换为float类型[code]# some example
print("str(True)=", str(True))
print("str(False)=", str(False))
print("str(None)=", str(None))
print("Rabbit is ", str(18))
print("--这里不进行强制转换的话,也不会出错,因为print函数会自动将数值先转换成字符串再输出")[/code][img]http://p.algo2.net/2024/0304/2a55ec7c9c758.png[/img]

2.2.3 数值转换

内置函数int()——把一个整数字符串转换为int类型

数值的前后带有空格也可以成功转换

带有符号的数字也可以成功转换

float()——把一个带小数点的字符串转换为float类型

int类型和float类型之间也可以相互转换——注意float在被转换为int的过程中,它的小数部分精度将被丢弃,只取整数部分——如果想要四舍五入的来转换,要使用函数round[code]# some example
num = "1"
print(num + 1)
# 这里会报错,因为num是个字符串,不能将字符串和数值进行相加[/code][img]http://p.algo2.net/2024/0304/21f9411c4ea06.png[/img][code]# some example

print(int(num)+1)
# 把一个整数字符串转换为int类型,结果为2

print(int(" 100 "))
# 数值的前后带有空格也可以成功转换,结果为100

print(int("-1"))
# 带有符号的数字也可以成功转换,结果为-1

print(int("+1"))
# 带有符号的数字也可以成功转换,结果为1

print(float("3.14"))
# 把一个带小数点的字符串转换为float类型,结果为3.14

# int类型和float类型之间也可以相互转换
print(int(3.14)) # 结果为3
print(int(9.9)) # 结果为9,只取整数部分,舍弃小数部分。
print(float(100)) # 结果为100.0

# 四舍五入的将浮点数转换为整数
print(round(9.9))  #结果为10
print(round(9.5))  #结果为10
print(round(9.49)) #结果为9

# round函数可以指定保留小数点后几位
print(round(3.1415926, 2)) # 四舍五入并保留小数点后两位,结果为3.14
print(round(3.1415926, 3)) # 四舍五入并保留小数点后三位,结果为3.142

# 布尔值也可以转换为int或float
print(int(True)) # 结果为1
print(int(False)) # 结果为0
print(float(True)) # 结果为1.0
print(float(False)) # 结果为0.0[/code]三、运算符

3.1 算数运算符

[img]http://p.algo2.net/2024/0304/7b1ec39c863d4.png[/img]

注意

当我们使用单斜杠除法运算符时,即使除数和被除数都是整数,它的返回结果也是一个浮点数。

对于取模运算,可以先理解为余数,还是有一些不同的,需要注意的几点如下:

当两个数能整除时,取模运算的结果为0
当0<a<b时,a % b = a,比如 3 % 8 的结果是3
当两个数中有负数时,公式:a % b 就相当于a -(a // b) * b
0不能作为除数,也不能用来取模

3.2 使用算数运算符操作字符串

字符串在Python中也可以“运算”[code]# 拼接字符串
print("hello " + "world")
# 拼接5个apple,用加法
print("apple"+"apple"+"apple"+"apple"+"apple")
# 拼接5个apple,也可以乘以5,表示重复拼接5次
print("apple" * 5)[/code]使用加号拼接字符串时需要注意,不能将字符串与数值一起相加。需要先将数值转换为字符串。[code]print("apple" + str(200))[/code]3.3 赋值运算符

等于号 =

[img]http://p.algo2.net/2024/0304/0ffa1edb9781a.png[/img]

常用的是加法赋值和减法赋值

3.4 比较运算符

比较运算符是用来运算布尔值的, 将两个值放在一起比较,最后得到True或者False。

[img]http://p.algo2.net/2024/0304/426dd2ded61f7.png[/img][code]# some example
print(100 == 100)  # True
print(100 == "abc")    # False
print(1 != 2)  # True
print(2 != 2)  # False
print(3 > 3)   # False
print(3 >= 3)  # True
print(2 < 3)   # True
print(2 <= 3)  # True
print(100 == "100")    # False -- 数值100 和字符串"100"是不相等的,注意容易出bug
print(100 == 50 * 2)   # True -- 数学上相等
print(str(100) == "100")   # True -- 都是字符串
print(1.0 != 1)    # False -- 数学上是相等的
print(int(1.9) == 1)   # True -- int直接去掉小数部分[/code]3.5 逻辑运算符

[img]http://p.algo2.net/2024/0304/5c3188af2ec2b.png[/img]

and, or, not 也是三个常用关键字

----延伸,逻辑运算符 可以和 赋值操作组合,让代码更老练,例如:

a = 0 or 100 是返回100的,因为0为False,100为True,所以返回True的值
b = 1 or 100 是返回1的,因为1为True,后边是or,就不会再往后执行了

四、流程控制

4.1 条件判断

4.4.1 if…else…[code]# 判断奇偶数-通过取模运算判断num是否能被2整除
num = 3
if num % 2 == 0: # if 和 else语句后要写冒号
    print(num, "是一个偶数") # if 冒号后的语句需要严格缩进
else:
    print(num, "是一个奇数")
print("程序结束") # 没有缩进,不在else语句下,所以一定会执行,不根据条件判断[/code]4.4.2 elif[code]# 判断成绩
# 60以下 不合格
# 60-90 合格
# 90以上 优秀
# 快捷键-- 可以使用ctrl + / 进行多行注释

score = 59
if score < 60 :
    print("您的成绩不及格")
elif score <90: # 增加了一个条件,elif只能用在if判断之后,else之前
    print("您的成绩合格")
else:
    print("您的成绩优秀")[/code]4.4.3 if 条件嵌套[code]# 判断成绩
# 60以下 不合格
# 60-70 合格
# 70-90 良好
# 90以上 优秀

if score >= 60:
    if score < 70:
        print("您的成绩合格")
    elif score <90:
        print("您的成绩良好")
    else:
        print("您的成绩优秀")
else:
    print("你的成绩不及格")[/code]嵌套循环可以嵌套无数层,但通常我们都建议尽量减少嵌套的层数,以增加代码的可读性。

4.4.4 与逻辑运算符组合[code]# 与逻辑运算符组合
age = 17
if age >= 18 and age <60:
    print("你已经不是个孩子了,赶紧去工作吧")
else:
    print("你还是个孩子")
# 更简洁的写法
if 18 <= age < 60:
    print("你已经不是个孩子了,赶紧去工作吧")
else:
    print("你还是个孩子")[/code]4.45 自动类型转换

if 和 elif 的后面总是跟着一个表达式,这个表达式的结果必须是True或者False,如果表达式运算出来的结果不是一个布尔值,则会自动将结果转换为布尔值,无论它是什么类型的值。转换的结果遵循我们之前学过的布尔转换规律。[code]# count=0 转化为了false,结果返回条件不成立;若count=1则返回条件成立
count = 0
if count:
    print("条件成立")
else:
    print("条件不成立")

# 0值、None 和空字符串转换为布尔值后都是False
# 应用:例如我们去数据库获取一些数据,返回结果为result,可以用if result来判断result是否有值,而不会使用result == None这种写法
result = None
if result:
    pass # pass是Python的关键字,它表示什么也不做
else:
    print("什么收获都没有")[/code]0值、None 和空字符串转换为布尔值后都是False

4.2 循环

4.2.1 while循环[code]lap = 0
while lap < 10:  # 循环条件
    lap += 1
    print("我跑完了第" + str(lap) + "圈")  # 循环体
print("跑步结束")[/code][img]http://p.algo2.net/2024/0304/4a46e697b07c7.png[/img]

4.2.2 for循环

for循环可以用来遍历序列,序列指的是一个可迭代的有序的集合,比如字符串就是一个序列[code]seq = 'hello'
for i in seq:
    print(i)[/code]输出结果:

[img]http://p.algo2.net/2024/0304/7929f48f28294.png[/img]

也可以用for循环来打印一连串的数字,这里需要用到一个新的内置函数:range[code]for i in range(3):
    print(i)[/code]range函数的作用就是提供一个从0到4的迭代器,而for可以遍历这个迭代器。

我们的序列都是0开始的,range(n)输出n个数也就是0 ~ n-1

将上个例子中的while循环,改用for+range来写:[code]for lap in range(10):
    print("我跑完了第"+str(lap+1)+"圈")  # 注意range从0开始,所以记得+1[/code]for循环更简洁

4.2.3 嵌套循环[code]# 打印一个长方形
# 指定宽和高
width, height = 10, 5
# 循环是里边的先执行,所以把宽放里边,外侧先便利高度
for _ in range(height):
    for i in range(width):
        print("*", end="")  # end表示在打印完指定的内容后,在结尾再打印一个指定的字符串,默认为换行符"\n",传递一个空字符串表示打印完星号以后不再添加任何输出内容
    print()  # print函数没有任何参数,会输出一个换行符[/code][img]http://p.algo2.net/2024/0304/bd77941413ac3.png[/img][code]# 打印一个直角三角形
for i in range(5):
    for _ in range(i+1):
        print("*",end="")
    print()[/code][img]http://p.algo2.net/2024/0304/b53d7b84d5bad.png[/img]

for 后边的变量名i 其实换成别的也都是可以的[code]# 打印九九乘法表
# range(1,10)的意思是从1开始,输出9个
for i in range(1,10):
    for j in range(1,i+1):
        print(str(j) + "*" + str(i) + "=" + str(j*i), end=" ")
    print()[/code]4.2.4 break和continue

在循环内部,临时略过某次循环或者跳出整个循环需要用到continue 和 break。

重新来看我们while循环的第一个例子(跑十圈那个)

continue的作用是可以将本轮循环剩余的代码跳过去,直接回到循环条件开始的地方[code]lap = 0
while lap < 5:  # 循环条件
    lap += 1
    if lap == 2:
        continue
    print("我跑完了第" + str(lap) + "圈")  # 循环体
print("跑步结束")[/code][img]http://p.algo2.net/2024/0304/a74ac43b72006.png[/img][code]# 10以内所有奇数相加的结果
total = 0
for i in range(10):
    if i % 2 == 0:
        continue
    # 能够执行到这里的都是奇数
    total += i
    # total = total + 1
    print(i, end="")
    if i == 9:
        continue
    print(" + ", end="")
print(' =', total)[/code][img]http://p.algo2.net/2024/0304/897726a534b04.png[/img][code]# 如果想计算20以内的呢? 我们可以把range里的值定义为变量,便于修改参数

total = 0
max = 20
for i in range(max):
    if i % 2 == 0:
        continue
    # 能够执行到这里的都是奇数
    total += i
    # total = total + 1
    print(i, end="")
    if i == max-1:
        continue
    print(" + ", end="")
print(' =', total)[/code][img]http://p.algo2.net/2024/0304/213ed5e4c6b0d.png[/img]

break用来打断整个循环并跳出[code]s = "238.9237834829"
# 打印出整数部分
for i in s:
    if i == '.':
        break
    print(i, end="")[/code]continue 和 break 的区别:

continue是跳过本轮的循环,但是整个循环还要继续下一轮;

break是跳出整个循环;

continue和break只能在循环内部使用;

4.3 演示:智能密码锁程序[code]# 设置初始密码
password = '123'
while True:
    pwd = input('请输入您的密码:\n')
    if not pwd:
        break
    confirm_pwd = input('请再次输入您的密码:\n')
    if pwd == confirm_pwd:
        password = pwd
        break
    print('您两次输入的密码不一致,请重新输入')
print('您的初始密码已设置为:',password)

print("进入开锁程序")
# 开锁
failed_time = 0
while True:
    input_pwd = input('请输入您的密码:\n')
    if password in input_pwd:  # 判断输入的密码中是否包含密码,关键字in表示如果在指定的序列中找到值返回 True,否则返回False
        print('开锁成功')
        break
    else:
        failed_time += 1
        if failed_time >= 3:
            print('输入错误超过3次,请联系主人')
            break
        print('您输入的密码有误,请重新输入')[/code]原文:[url]https://zhuanlan.zhihu.com/p/413311556[/url]

页: [1]