- UID
- 2
- 积分
- 2874604
- 威望
- 1387331 布
- 龙e币
- 1487273 刀
- 在线时间
- 13155 小时
- 注册时间
- 2009-12-3
- 最后登录
- 2024-11-24
|
Python-核心语法
一、变量
1.1 定义
可变的量,x="hello",这里x就是一个变量。
1.2 变量名规则
变量名由字母(a-z, A-Z)、数字(0-9)和下划线(_)组成
变量名不能以数字开头
变量名是区分大小写的
在此基础上,也约定了一些变量名的命名规范(非硬性要求,是程序员们的一种约定俗成的规则,使得可读性更高):
普通变量一般用小写字母
最好不要用单词加数字的方式来命名变量,尤其是没有意义的随机数字
有两种风格的变量名:单词之间用下划线隔开;每个单词的首字母使用大写字母(也称为驼峰命名法)
1.3 关键字
命名时要避免使用关键字
同时也要避免使用方法来命名,如print
1.4 变量赋值
变量可以重复使用,也可以修改。Python的声明和赋值在同一行代码完成。
如:先定义了一个名为"name"的变量,然后给它赋值为"Rabbit"。变量必须要先声明,才能使用。否则会报错。- NameError: name 'xxx' is not defined
复制代码 在变量定义完成后,我们可以随意读取、修改它的值,如:- # 定义name变量,赋值为"Rabbit"
- name = "Rabbit"
- print("Dear", name)
- # 修改变量的值为"Carrot"
- name = "Carrot"
- print("Dear", name)
复制代码 如果同时定义三个变量,并且都赋值为1,可以:给a,b,c分别赋值为1,2,3,可以:也可以直接交换几个变量的值:- # 定义两个变量,其中a=1, b=2
- a, b = 1, 2
- # 进行交换,现在a=2, b=1
- a, b = b, a
复制代码 1.5 变量的销毁(不是很重要的样子)
一般无需手动的去销毁变量,Python的垃圾回收机制会帮我们处理掉那些不再使用的变量,如果我们想刻意销毁删除某个变量,可以使用del关键字销毁后,这个变量就像没有定义过一样,再使用它的话就会产生异常。
二、数据类型
Python中,变量不区分类型,但是变量的值有类型。
2.1 数据类型
数值型
整型 int
浮点型 float
——整型和浮点型可以相互运算,只要有浮点型参与运算,结果就是浮点型
字符串
字符串放在引号中
当字符串中需要显示引号本身,又怕与字符串的引号搞混,这时可以使用反斜杠\来进行转义——例如 \"的意思就是这里的引号就是引号本身,不具有其他的特殊作用- print("Rabbit: \"Let me eat.\"")
- # 输出的结果是:Rabbit: "Let me eat."
复制代码 Python既可以使用双引号又可以使用单引号,所以如果我们想要在字符串中显示引号,也可以不用转义,直接使用单引号定义字符串,这样字符串中的双引号就会显示为双引号本身了- print('Rabbit: "Let me eat."')
- # 输出的结果是:Rabbit: "Let me eat."
复制代码 如果要定义的字符串很长,编写的时候可以使用反斜杠\来连接多行,例如:
输出的时候还是会显示为一整行
当然如果特别长呢,也可以使用三引号(三对双引号 或者 三对单引号 都可以)
布尔值(True and False)——关键字,不能定义为变量名
空值(None)
None也是关键字
作用:如想定义一个变量,但是赋值与类型都没决定,可以先赋值为None
None被print输出是显示为字符串None- temp = 'None'
- print(temp)
- # 输出结果为:None
复制代码 2.2 类型转换
2.2.1 布尔值转换
内置函数bool()——把其他值转换为布尔值
对于数值类型,所有的非零值转换为True, 只有零值才转换为False
对于任何非空的字符串,转换为布尔值都是True
空值None转换为布尔值永远都是False- # 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")
复制代码
2.2.2 字符串转换
内置函数str()——把其他类型转换为字符串
True, False, None 这三个值转换为字符串就是它们的单词本身,实际上在实际编程中,我们很少需要把它们转换成字符串来使用。
对于数值类型,也可以用str()将它们转换为字符串
float()——把一个带小数点的字符串转换为float类型- # some example
- print("str(True)=", str(True))
- print("str(False)=", str(False))
- print("str(None)=", str(None))
- print("Rabbit is ", str(18))
- print("--这里不进行强制转换的话,也不会出错,因为print函数会自动将数值先转换成字符串再输出")
复制代码
2.2.3 数值转换
内置函数int()——把一个整数字符串转换为int类型
数值的前后带有空格也可以成功转换
带有符号的数字也可以成功转换
float()——把一个带小数点的字符串转换为float类型
int类型和float类型之间也可以相互转换——注意float在被转换为int的过程中,它的小数部分精度将被丢弃,只取整数部分——如果想要四舍五入的来转换,要使用函数round- # some example
- num = "1"
- print(num + 1)
- # 这里会报错,因为num是个字符串,不能将字符串和数值进行相加
复制代码- # 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
复制代码 三、运算符
3.1 算数运算符
注意
当我们使用单斜杠除法运算符时,即使除数和被除数都是整数,它的返回结果也是一个浮点数。
对于取模运算,可以先理解为余数,还是有一些不同的,需要注意的几点如下:
当两个数能整除时,取模运算的结果为0
当0<a<b时,a % b = a,比如 3 % 8 的结果是3
当两个数中有负数时,公式:a % b 就相当于a -(a // b) * b
0不能作为除数,也不能用来取模
3.2 使用算数运算符操作字符串
字符串在Python中也可以“运算”- # 拼接字符串
- print("hello " + "world")
- # 拼接5个apple,用加法
- print("apple"+"apple"+"apple"+"apple"+"apple")
- # 拼接5个apple,也可以乘以5,表示重复拼接5次
- print("apple" * 5)
复制代码 使用加号拼接字符串时需要注意,不能将字符串与数值一起相加。需要先将数值转换为字符串。- print("apple" + str(200))
复制代码 3.3 赋值运算符
等于号 =
常用的是加法赋值和减法赋值
3.4 比较运算符
比较运算符是用来运算布尔值的, 将两个值放在一起比较,最后得到True或者False。
- # 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直接去掉小数部分
复制代码 3.5 逻辑运算符
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…- # 判断奇偶数-通过取模运算判断num是否能被2整除
- num = 3
- if num % 2 == 0: # if 和 else语句后要写冒号
- print(num, "是一个偶数") # if 冒号后的语句需要严格缩进
- else:
- print(num, "是一个奇数")
- print("程序结束") # 没有缩进,不在else语句下,所以一定会执行,不根据条件判断
复制代码 4.4.2 elif- # 判断成绩
- # 60以下 不合格
- # 60-90 合格
- # 90以上 优秀
- # 快捷键-- 可以使用ctrl + / 进行多行注释
- score = 59
- if score < 60 :
- print("您的成绩不及格")
- elif score <90: # 增加了一个条件,elif只能用在if判断之后,else之前
- print("您的成绩合格")
- else:
- print("您的成绩优秀")
复制代码 4.4.3 if 条件嵌套- # 判断成绩
- # 60以下 不合格
- # 60-70 合格
- # 70-90 良好
- # 90以上 优秀
- if score >= 60:
- if score < 70:
- print("您的成绩合格")
- elif score <90:
- print("您的成绩良好")
- else:
- print("您的成绩优秀")
- else:
- print("你的成绩不及格")
复制代码 嵌套循环可以嵌套无数层,但通常我们都建议尽量减少嵌套的层数,以增加代码的可读性。
4.4.4 与逻辑运算符组合- # 与逻辑运算符组合
- age = 17
- if age >= 18 and age <60:
- print("你已经不是个孩子了,赶紧去工作吧")
- else:
- print("你还是个孩子")
- # 更简洁的写法
- if 18 <= age < 60:
- print("你已经不是个孩子了,赶紧去工作吧")
- else:
- print("你还是个孩子")
复制代码 4.45 自动类型转换
if 和 elif 的后面总是跟着一个表达式,这个表达式的结果必须是True或者False,如果表达式运算出来的结果不是一个布尔值,则会自动将结果转换为布尔值,无论它是什么类型的值。转换的结果遵循我们之前学过的布尔转换规律。- # 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("什么收获都没有")
复制代码 0值、None 和空字符串转换为布尔值后都是False
4.2 循环
4.2.1 while循环- lap = 0
- while lap < 10: # 循环条件
- lap += 1
- print("我跑完了第" + str(lap) + "圈") # 循环体
- print("跑步结束")
复制代码
4.2.2 for循环
for循环可以用来遍历序列,序列指的是一个可迭代的有序的集合,比如字符串就是一个序列- seq = 'hello'
- for i in seq:
- print(i)
复制代码 输出结果:
也可以用for循环来打印一连串的数字,这里需要用到一个新的内置函数:range- for i in range(3):
- print(i)
复制代码 range函数的作用就是提供一个从0到4的迭代器,而for可以遍历这个迭代器。
我们的序列都是0开始的,range(n)输出n个数也就是0 ~ n-1
将上个例子中的while循环,改用for+range来写:- for lap in range(10):
- print("我跑完了第"+str(lap+1)+"圈") # 注意range从0开始,所以记得+1
复制代码 for循环更简洁
4.2.3 嵌套循环- # 打印一个长方形
- # 指定宽和高
- width, height = 10, 5
- # 循环是里边的先执行,所以把宽放里边,外侧先便利高度
- for _ in range(height):
- for i in range(width):
- print("*", end="") # end表示在打印完指定的内容后,在结尾再打印一个指定的字符串,默认为换行符"\n",传递一个空字符串表示打印完星号以后不再添加任何输出内容
- print() # print函数没有任何参数,会输出一个换行符
复制代码- # 打印一个直角三角形
- for i in range(5):
- for _ in range(i+1):
- print("*",end="")
- print()
复制代码
for 后边的变量名i 其实换成别的也都是可以的- # 打印九九乘法表
- # 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()
复制代码 4.2.4 break和continue
在循环内部,临时略过某次循环或者跳出整个循环需要用到continue 和 break。
重新来看我们while循环的第一个例子(跑十圈那个)
continue的作用是可以将本轮循环剩余的代码跳过去,直接回到循环条件开始的地方- lap = 0
- while lap < 5: # 循环条件
- lap += 1
- if lap == 2:
- continue
- print("我跑完了第" + str(lap) + "圈") # 循环体
- print("跑步结束")
复制代码- # 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)
复制代码- # 如果想计算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)
复制代码
break用来打断整个循环并跳出- s = "238.9237834829"
- # 打印出整数部分
- for i in s:
- if i == '.':
- break
- print(i, end="")
复制代码 continue 和 break 的区别:
continue是跳过本轮的循环,但是整个循环还要继续下一轮;
break是跳出整个循环;
continue和break只能在循环内部使用;
4.3 演示:智能密码锁程序- # 设置初始密码
- 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('您输入的密码有误,请重新输入')
复制代码 原文:https://zhuanlan.zhihu.com/p/413311556 |
论坛官方微信、群(期货热点、量化探讨、开户与绑定实盘)
|