2023.3.28复习
前面学过的简单知识复习一遍。
input函数使用
input()从键盘输入的数据为字符串类型,但可以转换类型,如下
a = int(input()) #转为int型
print函数的格式化输出
print("%06d %.6f") # 控制输出长度
print("格式化字符串" % 变量1)
print("格式化字符串" % (变量1, 变量2……))
print("%d" %变量 * 10) # 输出10遍
print("%d" %(变量 * 10)) # 输出变量乘以10后的结果
print("*", end="") #控制台输出最后内容后不会换行
print("") # 单纯换行
逻辑运算
and 且
or 或
not 非
# 逻辑运算在python中很常见,有时由于逻辑运算符连接了多个条件语句,会导致语句很长不美观,可以采用分段来写,见下例
import random
print("1代表石头,2代表剪刀,3代表布")
# c代表computer,p代表player
c = random.randint(1,3)
p = int(input())
print("玩家出的是%d 电脑出的是%d" % (p, c))
if c == p:
print("平局")
elif ((c == 1 and p == 3)
or(c == 2 and p == 1)
or(c == 3 and p == 2)):
print("玩家胜")
else:
print("电脑胜")
if语句使用
# if语句不难理解,重要的是注意写代码是格式问题,执行语句与判断条件的缩进。尤其是if嵌套的时候。
if 条件:
执行语句
elif 条件: # elif可以没有,也可以有多个
执行语句
else:
执行语句
import模块
import是python中的工具包,可以使用import调用许多实用工具。
如上面逻辑运算中的 import random
random.randint(1,3) # 就是产生1 2 3这三个整数中的随机一个。
while循环
while 条件语句/计数器:
执行语句 #while循环语句与if语句差不多注意缩进就行
例:求0~100的偶数和
i = 0
result = 0
while i <= 100:
if i % 2 == 0:
result += i
i += 1
else:
i += 1
print(result)
赋值运算符
break与continue循环常用关键字
break
i = 0
result = 0
while i <= 3:
if i == 2:
break
else:
result += i
print(result)
i += 1
# 运行后你会发现只会输出0 和 1 .说明当i=2时跳出循环了。
continue
i = 0
result = 0
while i <= 3:
if i == 2:
i += 1
continue
result += i
else:
result += i
i += 1
print(result)
# 运行输出结果是4(1 + 3),因为当i = 2时,continue直接让程序跳到while条件语句那儿了
循环嵌套
# 直接上例子吧,没啥好说的
row = 1
while row <= 9:
col = 1
while col <= row:
pro = col * row
print("%d ✖ %d = %d" %(col, row,pro),end=" ")
col += 1
row += 1
print("")
转义字符
2023.3.30复习
函数的构造,与调用
def multiplication_table(): # 注意定义函数后的缩进
row = 1
while row <= 9:
col = 1
while col <= row:
pro = col * row
print("%2d ✖ %2d = %2d" %(col, row,pro),end=" ")
col += 1
row += 1
print("")
import function_01
function_01.multiplication_table( ) #需要注意的是,调用函数的文件与构造函数的文件必须在一个根目录下,即属于同等地位的。
调试和函数的文档注释
def say_hello():
print("hello python 1!")
print("hello python 2!")
print("hello python 3!")
say_hello() #把断点设置在这里,分别使用F7和F8调试
print("调试结束了")
F7 可以单步执行代码,如果是函数会进入函数内部,所以用F7调试时,会一行一行的输出hello python。
F8也是单步执行代码,但当它碰到函数是,会认为函数是一行代码,所以会一下子输出三行hello python。
注释:
函数内部可用"“” “”" 来注释,当你想看这个函数的作用时,光标移动到函数位置,用ctrl + q 就可以快速查看。
函数形参实参
函数:把具有独立功能的代码块组织为一个小模块,需要的时候调用。
函数的参数:增加函数的通用性,针对相同数据的处理逻辑,能够适应更多的数据。
形参和实参:定义函数时,小括号中的参数是用来接收参数用的;调用函数时,小括号中的参数是用来把数据传输到函数内部的。
def add(num1, num2): # 这里的num1和num2就是形参
sums = num1 + num2
print(sums)
a = int(input())
b = int(input())
add(a, b)
列表
列表是python中使用最频繁的数据类型,在其它语言里叫数组。
name_list = ["zhangsan", "lisi", "wangwu"] # 列表的定义方式
列表中的方法
用法示例
name_list = ["zhangsan", "lisi", "wangwu"]
name2_list = ["Durant", "Irving", "Curry"]
name3_list = ["10", "25", "4"]
print(name_list[1]) #取值
print(name_list.index("wangwu")) # 取索引
name_list[0] = "张三" #修改
print(name_list[0])
name_list.insert(2,"xiaoming") #insert插入,你输入的数字代表该数据加入列表后的索引
print(name_list)
name_list.append("rose") #append 向末尾插入数据
print(name_list)
name_list.extend(name2_list) # extend将2列表的数据追加到列表
print(name_list)
name_list.remove("张三") # 删除第一个出现的该数据
print(name_list)
name_list.pop() # 删除末尾数据,括号里填索引值可以删除指定索引的数据
print(name_list)
# name_list.clear 清空列表此处注释是因为后面还有用法,你可以自己写一下看看
del name_list[5] # 删除指定索引数据
print(name_list)
print(len(name_list)) #len可以得到列表长度
name_list.count("lisi") #数据在列表中出现的次数
name2_list.sort() #排序
print(name2_list)
name3_list.reverse() #逆序,翻转
print(name3_list)
循环遍历
name_list = ["zhangsan", "lisi", "wangwu"]
for name in name_list:
"""循环遍历过程中,从头到尾每次都会从列表中取出一个数据放在变量name里,
循环体内部可以访问到每一次取出的数据"""
print(name)
元组
元组的定义:元组与列表相似,但是元组中的元素不能修改。
元组是由多个元素组成的序列,用()定义。数据之间也是用“,”分隔,索引亦是从0开始。
tuple = () # 空元组
tuple1 = ("homie",) # 至于一个元素也要有逗号
元组的常用操作
info_tuple = ("rose", 56, 19)
print(info_tuple.index(56)) # 取索引
print(info_tuple[1]) # 取值
print(info_tuple.count("rose")) # 计算某个数据出现的次数
元组应用场景
①函数的参数和返回值,函数可以有多个参数,也可以一次返回多个数据。
②格式化字符串,格式化字符串%后的()里本质就是一个元组。
③保护列表的数据不被修改。
info_tuple = ("rose", 56, 19)
num_list = ["13", "34", "66"]
print("%s 已经 %d 岁了,他打了 %d 年篮球" % info_tuple) # 验证格式化字符串后的括号为一个元组
info_tuple2 =tuple(num_list) # 列表转换为元组
print(info_tuple2)
num2_list = list(info_tuple2) # 元组转换为列表
print(num2_list)
字典
dictionary是除列表以外最灵活的数据类型在python中,字典同样可以用来存储多个数据。通常是用于描述一个对象的相关信息。
与列表的区别:
**·**列表是有序的对象集合
**·**字典是无序的对象集合
定义方式:
james = {
"name": "lebronjames",
"age": 37,
"work": "basketballplayer",
"height": 201
}
# 字典使用键值对存储数据,键只能是字符串,数字或元组。值可以是任何类型。
# 键必须是唯一的
字典的增删改查
james = {
"name": "lebronjames",
"age": 37,
"work": "basketballplayer",
"height": 201
}
james["weight"] = 122 # 增加键值对
print(james)
james["name"] = "勒布朗·詹姆斯" # 如果键值对已经存在,就是修改值
print(james)
james.pop("work") # 删除
print(james)
字典的统计、合并、清空
james = {
"name": "lebronjames",
"age": 37,
"work": "basketballplayer",
"height": 201
}
james2 = {
"weight": 122
}
print(len(james)) # 统计键值对数量
james.update(james2) # 合并字典
print(james) # 注意,被合并的字典中如果包含原字典的键值对,则原键值对会被覆盖
james.clear() # 清空字典
字典的循环遍历
james = {
"name": "lebronjames", #这里把所有值都设成了字符串类型,便于格式化输出
"age": "37",
"work": "basketballplayer",
"height": "201"
}
for k in james:
print("%s %s" % (k, james[k])) # 遍历循环过程取的是键key
字符串定义及常用操作
str1 = "woaidalanqiu !"
python中字符串的内置方法
①判断类型
string.isspace() ,如果 string 中只包含空格,则返回 True
string.isalnum()如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True
string.isalpha()如果 string 至少有一个字符并且所有字符都是字母则返回 True
string.isdecimal()如果 string 只包含数字则返回 True,全角数字
string.isdigit()如果 string 只包含数字则返回 True,全角数字
、⑴
、\u00b2
string.isnumeric()如果 string 只包含数字则返回 True,全角数字
,汉字数字
string.istitle()如果 string 是标题化的(每个单词的首字母大写)则返回 True
string.islower()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True
string.isupper()如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是大写,则返回 True
str1 = " "
str2 = "\u00b2" # 平方
str3 = "一千零一"
print(str1.isspace()) # 判断是否为空
print(str2.isdecimal()) # 只能判断全角数字
print(str2.isdigit()) # 除了全角数字,还能判断unicode 字符串 ,即通过键盘无法直接打出来的例如平方等。
print(str2.isnumeric()) # 除了上述两种外,还能判断中文数字
print(str3.isdecimal())
print(str3.isdigit())
print(str3.isnumeric())
# 需要注意的上述三个方法在判断全角数字时,都不能判断小数
②查找和替换
string.startswith(str)检查字符串是否是以 str 开头,是则返回 True
string.endswith(str) 检查字符串是否是以 str 结束,是则返回 True
string.find(str, start=0, end=len(string))检测 str 是否包含在 string 中,如果 start 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回 -1
string.rfind(str, start=0, end=len(string))类似于 find(),不过是从右边开始查找
string.index(str, start=0, end=len(string))跟 find() 方法类似,不过如果 str 不在 string 会报错
string.rindex(str, start=0, end=len(string))类似于 index(),不过是从右边开始
string.replace(old_str, new_str, num=string.count(old))把 string 中的 old_str 替换成 new_str,如果 num 指定,则替换不超过 num 次
string = "hello world!"
print(string.startswith("hel")) # 判断开头
print(string.endswith("old")) # 判断结尾
print(string.find("llo")) # 查找子字符串的索引,要注意它与index的区别是,index再碰到不存在的字符串时会报错,find则会返回-1.
print(string.replace("world", "python")) # replace不会改变原本字符串
print(string)
③大小写转换
string.capitalize()把字符串的第一个字符大写
string.title()把字符串的每个单词首字母大写
string.lower()转换 string 中所有大写字符为小写
string.upper()转换 string 中的小写字母为大写
string.swapcase()翻转 string 中的大小写
④文本对齐
string.ljust(width)返回一个原字符串左对齐,并使用空格填充至长度 width 的新字符串
string.rjust(width)返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串
string.center(width)返回一个原字符串居中,并使用空格填充至长度 width 的新字符串
poem_list = [
"静夜思",
"李白",
"床前明月光",
"疑是地上霜",
"举头望明月",
"低头思故乡"
]
for poem_str in poem_list:
print(poem_str.center(10)) # center,ljust,rjust 三个在使文本对齐时,fillchar如果没有设置默认都是英文空格,这是可以更改的
⑤去除空白字符
string.lstrip()截掉 string 左边(开始)的空白字符
string.rstrip()截掉 string 右边(末尾)的空白字符
string.strip()截掉 string 左右两边的空白字符
⑥拆分和连接
string.partition(str)把字符串 string 分成一个 3 元素的元组 (str前面, str, str后面)
string.rpartition(str)类似于 partition() 方法,不过是从右边开始查找
string.split(str=“”, num)以 str 为分隔符拆分 string,如果 num 有指定值,则仅分隔 num + 1 个子字符串,str 默认包含 ‘\r’, ‘\t’, ‘\n’ 和空格
string.splitlines() | 按照行(‘\r’, ‘\n’, ‘\r\n’)分隔,返回一个包含各行作为元素的列表
string.join(seq)以 string 作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串
字符串切片
注意:1. 指定的区间属于 左闭右开 型 [开始索引, 结束索引)
=> 开始索引 >= 范围 < 结束索引
* 从 起始
位开始,到 结束
位的前一位 结束(不包含结束位本身)
2. 从头开始,开始索引 数字可以省略,冒号不能省略
3. 到末尾结束,结束索引 数字可以省略,冒号不能省略
4. 步长默认为 1
,如果连续切片,数字和冒号都可以省略
num_str = "0123456789"
print(num_str[2:5]) # 截取2~5位置的字符串
print(num_str[2:]) # 截取2到末尾的字符串
print(num_str[:5]) # 截取开始到5位置的字符串
print(num_str[::2]) # 从开始位置每隔一个字符截取字符串
print(num_str[2:-1]) # 截取从2到末尾-1的字符串
print(num_str[-2:]) #截取末尾两个字符
print(num_str[::-1]) # 逆序
公共方法
一.python内置函数
注意:del的两种方式是指,del既可以用作关键字如: del a[1] ,也可以作为函数del(a[1]).
关于比较,python3.x中使用的是比较符。
dict1 = {
"height" : 180,
"weight" : 120
}
dict2 = {
"height" : 199,
"weight" : 150
}
list1 = [2, 3, 4]
list2 = [3, 4, 5]
str1 = "hello"
str2 = "Hello"
print(str1 < str2) # "h" > "H"
print(list1 < list2)
print(dict1 < dict2) #比较运算符不适用于两个字典之间的比较
二.运算符
三.完整的for循环
TODO注释的功能
在开发时,有一时无法实现的功能但又要提前调试或怎样时,可以用TODO提醒自己,在pycharm等开发工具中,它比普通注释要更醒目些。
if sel in ["1", "2", "3"]:
if sel == "1":
pass
# TODO 新增名片功能
2023.4.15 新知识学习
在函数内部修改一个全局变量
num = 10
def num_pr1():
num = 99 #这里的是局部变量 改变不了全局变量num的值
print("num_pr1中的值为 %d" %num)
def num_pr2():
print("num_pr2中的值为 %d" %num)
num_pr1() # 输出为99 但这里的num是局部变量
num_pr2() # 输出为10 输出的是全局变量num的值
而在num = 99 上面加一行代码
global num # 这就会使得函数内部的num变成了全局变量,这样两个输出就都为99了。
tips:在python开发中,一些公司要求全局变量命名以g_或gl_开头,就是为了更好的阅读代码
函数的参数与返回值
交换两个数
a = 100
b = 6
# 交换两个数字
# 1.使用临时变量
c = a
a = b
b = c
print(a)
print(b)
# 2.不使用临时变量
a = a + b
b = a - b
a = a - b
# 3.python 专有利用元组
(a,b) = (b,a)
print(a,b)