常用语法与高级数据类型
注意: python代码的书写格式需要非常规范,目前所学 ex.
- 单行注释的文字内容与 # 之间需要空出一个格
- 如果在一行代码后面写注释,注释的 # 符号需要与代码间隔两个空格
- 每句代码占一行,不能把多个语句写在一行中,程序会报错
- 运算符与运算符两边的 数字/变量 之间需要有空格
- 同层次的语句必须有相同的缩进空白,单个语句需要顶格
- if elif else while for def等的大括号均用:代替,同等缩进位于一层
这大概也是python设计哲学的体现:优雅、明确、简单
下面的细节部分详见代码注释
(1)运算符以及查看变量类型
# 下面是运算符以及类型部分
price = 8.5
money = 365
print(9 // 2)
print((9 - 2 // 1 + 3) % 4 / 3) # 0.6667
print(type(price)) # type(value)可以查看变量的类型
print(type(money))
int_ = 2 ** 32 # 2^32
print(type(int_))
long_ = 2 ** 64
print(type(2 ** 64)) # python2.x对int long 有区分 , python3.x没有区分
# print(2 ** 1000) # python的计算能力非常强
print(price * False)
name_1 = "My "
name_2 = "Name"
name_2 = name_1 + name_2 # 和C++类似,python也可以使用+进行两个字符串的拼接
print(name_2)
print(name_2 * 2) # 显示为My NameMy Name, python可以通过 * 号输出多个相同字符/字符串
(2) 格式化输出与强制输入类型转换
# 格式化输出与强制输入类型转换
# password = int(input("请输入密码:")) # 输入原型为str,强制类型转换为int类型
password = "123456"
print(type(password))
print("type of %s:%s" % (password, type(password))) # 多个输出,类比于C语言的格式控制符,注意多个变量用()括起来
price = 5.05
print("price = %f(%.2f), after transform:%.2f%%" % (price, price, price))
# 上面:全部显示、小数点后两位、两个%可以输出为百分号
price = int(price)
print("共6位整数,不足位数用0补齐:%06d\n" % price)
(3)判断语句的使用
# 判断语句的使用
age_1 = 23
age_2 = -1
if age_1 >= 18 and age_2 >= 18:
# and取并,or取或,not取非
print("你们的年龄分别是:%03d岁,%03d岁,你们都已经成年" % (age_1, age_2))
print("欢迎欢迎,热烈欢迎!")
elif age_1 <= 0 or age_2 <= 0:
print("are you kidding me?")
else:
print("你还未成年!")
print("此处一定会执行")
is_employee = True
if not is_employee: # 判断非
print("False", end = "") # end默认为换行,这样写会使两个输出紧挨
else:
print("True", end = " ")
(4)while 循环以及随机数
# 随机数以及循环
import random # import导入工具包,感觉就像是写了一个C++类之后封装,然后就可以使用它的方法,后面再思考
i = 1
cnt = 0
cnt = float(cnt)
while i <= 100000:
if random.randint(0, 65535) <= 32767:
cnt += 1
i += 1
print("the probability for value under a half:\n%.3f %%" % (cnt / 1000)) # 利用随机数验证中心极限
# break和continue用法可想而知
(5)函数
注意:
- 使用def function_name():定义函数,
定义好函数以后,只表示这个函数封装好了一段代码而已,如果不主动调用函数,函数是不会主动执行的。 - 需要事先定义一个函数才能够调用,如果把函数定义放到调用之后,python会报错
- 使用import导入工具包,从而可以使用其中的函数
- 一个函数的定义与其上面代码需要间隔两行
代码:
hm_02_MySecond.py
def sum_2_num(num1, num2):
"""函数的注释这样写,使用Ctrl+Q可以从调用处查看函数注释"""
return num1 + num2
调用
num1 = 3
num2 = 4
import hm_02_MySecond
result = hm_02_MySecond.sum_2_num(num1, num2)
print("%d + %d = %d" % (num1, num2, result))
(6)模块
模块是 python 程序架构的一个核心概念
- 模块 就好比是 工具包,要想使用这个工具包,就需要用关键字import导入
- 每一个以扩展名py结尾的python源代码都是一个模块
- 在模块中定义的 全局变量、函数 都是模块能够提供给外界直接使用的工具
上面的代码已经体现了模块的用法,这里不再赘述。
另外,如果对一个方法不知道它的作用,可以将鼠标放在该方法上,按Ctrl+Q即可查看注释
高级数据类型
1.列表list(在其他编程语言中也叫做数组)
初始化ex.:name_list = [“123”, “456”, “789”]
方法:
使用 ipython3 查看,使用.Tab即可看到列表的全部方法
增删改查
name_list = ["zhangsan", "lisi", "wangwu"]
temp_list = ["sunwukong"]
# 和C++类似,同样可以采用下标索引index
# 查
print(name_list.index("zhangsan")) # 返回找到的第一个索引
# 改
name_list[1] = "zhaoliu"
# 增
name_list.append("wangxiaoer") # 尾部追加
name_list.insert(1, "xiaomei") # 指定位置插入
name_list.extend(temp_list) # 将另一列表内容完全追加到自身
# 删
name_list.remove("wangwu") # 删除掉"wangwu", 只删除遇到的第一个
name_list.pop() # 默认弹出列表末尾元素
name_list.pop(3) # 删除指定索引的元素
del name_list[1] # 从内存上删除,作用同上
name_list.clear() # 清空列表
统计与排序
name_list = ["zhangsan", "zhangsan", "lisi", "wangwu"]
# 统计
length = len(name_list) # 返回列表的长度
cnt = name_list.count("zhangsan") # 返回指定元素数量
# 排序
name_list.sort() # 升序排列
name_list.sort(reverse=True) # 降序排列
name_list.reverse() # 元素翻转
2.元组tuple(值固定,可存储多种类型)
元组中可以存放不同数据类型,且元组中的值是不可变的。
初始化ex.:
info_tuple = (“zhangsan”, 18, 1.75)
相关操作
info_tuple = ("zhangsan", 18, 1.75)
print(info_tuple[0]) # 索引
print(info_tuple.index(18)) # 查找元素索引
print(info_tuple.count("zhangsan")) # 统计元素个数
for my_info in info_tuple: # 使用迭代遍历
print(my_info)
在开发中的应用场景:
- 作为函数的 参数 和 返回值,一个函数可以接收任意多个参数,或者 一次返回多个数据
- 格式化字符串,格式化字符串后面的()本质上就是一个元素
- 让列表不可被修改,以保护数据安全
列表与元组的相互转换
info_tuple = list(name_list)
list_name = tuple(info_tuple)
3.字典dictionary(无序,键-值对应,灵活)
可以类比于C++的映射,字典就是键和值相对应,一个键对应一个值。
键作为索引,值用来存储。
另外,值 可以是任意类型,但是 键 只能使用字符串、数字或元组。
xiaoming = {"name": "小明",
"age": 18,
"is_boy": True,
"high": 1.75}
增删改查
xiaoming_dict={"name": "xiaoming",
"is_boy": True}
# 增
xiaoming_dict["age"] = 18
# 改
xiaoming_dict["age"] = 20
# 删
xiaoming_dict.pop("name")
# 查
print(xiaoming_dict["age"])
和list类似,使用clear清空,len(dict_name)测量长度,而合并操作为:
dict_name.update(temp)
迭代遍历
for it in xiaoming_dict:
print("%s - %s" % (it, xiaoming_dict[it]))
注:列表与字典可以嵌套使用,就像是一个对象数组,里面包含每个对象的属性
4.字符串
单引号双引号均可用来表示字符串。
一种情况:str2 = '我的外号是"大西瓜"'这种情况下,为了避免识别符号出错,采用单双引号结合的表示方法。
相关操作
say_hi = "hello hello"
print(say_hi.count("hello")) # 返回子字符串的个数
print(len(say_hi)) # 返回字符串的长度
print(say_hi.index("hello")) # 返回找到的第一个子字符串的位置
tips:
如果一个字符串中包含\n(只作两个单个字符理解而不是换行符),一般情况下需要使用转义字符/,而在python字符串中,可以通过在字符串前加r的方式来使字符串自动转化为原始格式,‘r’ means raw
string = "\nmy_string"
print(string) # 输出: (换行)my_string
string = r"\nmy_string"
print(string) # 输出: \nmy_string
5.公共方法
函数 | 描述 | 备注 |
---|---|---|
len(item) | 计算容器中元素个数 | |
del(item) | 删除元素 | 两种方式 |
max(item) | 返回容器中元素最大值 | 如果是字典,只对key进行比较 |
min(item) | 类比max | |
cmp(item1, item2) | 类比C++的strcmp()返回值 | Python3.x取消了此函数 |
切片
原型:string[start: end: step]
- 切片方法只适用于 字符串、列表、元组
- 切片从大切出小字符串
- 开始索引与结束索引均可省略(默认从头/到尾),但冒号不能省略;默认0step=1,此冒号可省
- 最后一个元素的索引为-1,但如果指定则访问不到最后一个元素,如果采用默认(空)即可访问到
如何通过切片获取逆序的列表?
语句:list_name[::-1]
另外,我测试了一下发现,如果一个列表进行切片的end大于len,得到的切片仍然是到end。
运算符
+*in /not in比较运算符均可适用于列表、元组、字符串
另外,in /not in同样适用于字典,只判断key是否存在
完整的for循环语句
for 变量 in 集合:
循环体代码
else:
没有通过break退出循环,则执行该部分
实例
可用于判断是否检索到想要检索的元素(之前的编程中我会采用flag来判断),这里如果检索到便跳出,不执行else里面的语句,否则会提示查无此值–这样更为方便。