条件判断
只有if-else等我语句,Python不支持switch语句
单if语句
if 条件语句:
条件为真时执行的内容
if-else语句
if 条件语句:
条件为真时执行的内容
else:
条件为假时执行的内容
if-elif语句
else if
if 条件语句1:
条件语句1为真时执行的内容
elif
条件语句2:
条件语句2为真时执行的内容
elif ....
else: 所有条件都不满足时执行的内容
语句嵌套
if 条件1:
if 条件2: 执行内容(1和2都满足)
else: 执行内容(满足1不满足2)
else: 执行内容(1和2都不满足)
循环语句
主要解决什么样的问题:
具有重复性、规律性的问题
向前走10步:有明显的循环次数的 - for
向前走,直到碰墙为止:没有明显的循环次数的,但是有结束条件 - while
循环四要素:
循环的开始(从第1步开始;从第1步开始/从起点开始)
循环的继续条件(还没走到第10步;没有碰到墙/就是看距离)
循环体(走的每一步;走的每一步) 循环的步长/间隔/周期/进度(步数的统计;距离的统计)
列表(
数组里面值可以不为同一类型的值 )
序列:存储一堆数据的集合/容器
列表、字符串、元组、集合、字典
序列通用操作
切片是获取序列中的某一个连续子区间。
有这些常见的操作
1.创建问题:
列表
1.存储多个数据 数据不一定都是同一个类型 但是为了方便操作 建议存一样的类型 2.可以通过索引/角标来访问元素
3.可变长的数组 我们后续可以在列表中进行 增 删
4.用一对中括号[]
2.遍历问题:
是通过角标来进行遍历操作
是通过foreach遍历操作
3.最值问题
4.存在性问题
5.翻转问题
排序算法
选择排序: 选择排序:每个数字都要从左到右去进行比较,每次比较都会产生一个该角标的最小值
冒泡排序:
插入排序:会形成左边有序的一个区间
希尔排序:
快速排序
堆排序
归并排序
计数排序:
基数排序
桶排序
查找算法
二分查找:要求数据必须有序,不考虑元素,只考虑位置
插值查找:数据必须是有序的,除了要考虑位置还得要考虑元素的分布情况。插值查找适用于数分布比较均匀的情况。
mid不能大于区间角标值,也不能小于区间最小角标,不能整除,因为结果为0
斐波那契查找
列表对象函数:
对象函数就是区别与内置函数的,内置函数直接调用即可len()max()
对象函数必须通过某一个具体的对象来调用列表。函数名
#append()
#将某一个元素对象添加在列表的表尾
#如果添加的是其他的序列,那么该序列也会被看成是一个数据对象
arr = [1,2,3,4]
arr.append(5)
print(arr)
arr2 = [6,7,8]
arr.append(arr2)
print(arr)
#count()
# 统计列表当中,某一个元素出现的次数
arr = [1,2,3,2,1,,31,23,3,2,3231,3]
print(arr.count(1))
#
#extend()
#在当前列表中,将传入的其他序列的元素添加在表尾
arr1 = [1,2,3]
arr2 = [4,5,6]
arr1.extend(arr2)
print(arr1)
arr1.extend("ABC")
print(arr1)
#
#index()
#查找(从左到右)元素第一次出现的位置(角标)
arr = [1,2,3,4,5,6,7,8]
print(arr.index(4))
print(arr.index(4,5,8)) #[5,8)区间找4的角标
#
#insert(index,)
#在某一个角标处插入一个元素
arr = [1,2,3,4]
arr.insert(2,5)
print(arr)
#
#pop()
#弹栈 :删除最后一个元素,并返回其值
#也可以删除指定角标处的元素
arr = [1,2,3,4]
print(arr.pop())
print(arr)
print(arr.pop(1))
print(arr)
#remove()
#移除指定元素,从左到右第一次出现的
arr = [1,2,3,4,2,3,4,2,3,4]
arr.remove(4)
print(arr)
#
#reverse()
#翻转函数
arr = [1,2,3,4]
arr.reverse()
print(arr)
#
#sort()
#排序
arr = [8,4,2,4,5,6,7,8]
#arr.sort() #默认升序
arr.sort(reverse = true) #降序
print(arr)
arr = ["abc","123123", "dwdff"]
arr.sort(key = len) #以序列的长度为基准进行排序
#
#clear()
#清空
arr = [1,2,3,4]
arr.clear()
print(arr)
#
#copy()
#复制一个列表(浅拷贝:只复制了第一层的地址)
arr1 = [1,2,3,4]
arr2 = arr1.copy()
print(arr1 == arr2) #True 比较的是内容
print(arr1 is arr2) # False 比较的是对象地址
print(arr1)
print(arr2)
arr1[0] = 5
print(arr2[0])
#上述代码在arr1中修改元素,并不影响arr2
arr1 = [1,2,3,[4,5,6]]
arr2 = arr1.copy()
arr2[0] = 7
print(arr1[0])
print(arr2[0])
#上述代码arr中修改元素,影响了arr1
arr2[3] = [9,9,9]
print(arr1[3])
print(arr2[3])
#额外的知识
#del 关键字 删除
arr = [1,2,3,4]
del arr[0] #删除序列中的元素
print(arr)
del arr
print(arr) #删除变量
字符串对象函数
可变对象与不可变对象
列表是可变对象:可以修改列表中的元素,甚至长度
字符串是不可变对象:不可以修改字符串中的元素,包括长度
注意:也就意味着对字符串的修改,一律不是在本身修改,而是创建一个新的字符串
#center()
#指定填充字符,将目标字符进行居中
s1 = "ABC"
s2 = s1.center(10,"#")
print(s1)
print(s2)
#
#count()
#和我们列表的count相似,统计字符串的个数
s1 = "askjcabuhvjbfdcafbvfcdfbvdfc"
print(s1.count"a")
#count 是非贪心统计 贪心统计算6个
s1 = "AAAAAAAA"
print(s1.count("AAA"))
print(s1.count("AAA",2,6))
#
#endswith()
#过滤结束字符串结尾,同样也可以指定区间
s = "jmk.xmh"
print(s.endswith(".xmh"))
#
#find()
#寻找字符串第一次出现的位置
s ="八百标兵奔北坡"
print(s.find("标兵")) # 2 是指标的角标
#
#format()
#格式化输出
name = "响枪"
age = 18
print("我的名字叫{},年龄{}岁".format(name,age))
print(f"我的名字叫{name},年龄{age}岁")
print(f"我的名字叫{name},年龄{age}岁")
print(f"我的名字叫{3 > 2},年龄{2 ** 8}岁")
#
#index()
#寻找字符串第一次出现的位置,同样也可以指定区间
s ="八百标兵奔北坡"
print(s.index("标兵")) # 2 是指标的角标
s = "ABC"
print(s.find("D")) #如果找不到,返回-1
print(s.index("D")) #如果找不到,直接报错
#
#isalnum()
#判断是否是字母或数字字符串 al-alpha字母 num-number 数字
print("abc".isalnum())
print("123".isalnum())
print("abc123".isalnum())
print("abc123^&%&^&".isalnum())
#
#isalpha() 是否是纯字母字符串
#isdecimal()是否是十进制纯数字字符串
#isdigit()是否是纯数字字符串
#isspace()是否是纯空格字符串
#isslower()出现的字母是否是小写字母
print("123abc".lower())
print("123abc".;ower())
#isupper()出现的字母是否是大写字母
#
#join() 将我们字符串列表进行拼接的
arr = ["a","b","c"]
s = "-".join(arr)
print(s)
#
#ljust() 左对齐 人just()右对齐
print("abc".ljust(10,"#"))
print("abc".rjust(10,"#"))#
#lower() 出现的大写字母转小写 upper()相反
print(("hello world123".lower())
#lstrip() 去除左边空格 rstrip()去除右边空格
print(" abc ".lstrip())
print(" abc ".rstrip())
print(" abc ".strip()) #两边都去除连续空格
print(" a b c ",lstrip())
#replace(a,b) 替换 a旧,b新
#
#split()以某一个分割符来切割字符串,结果是一个字符串的列表
#
DEMO53
#关于字符串匹配:kmp算法
#本代码仅非贪暴力解
s1 = input()
s2 = input()
count = 0
i = 0
while i <= len(s1) - len(s2):
if s1[i] == s2[0]:
j = i + 1
for k in range(1,len(s2)):
if s1[j] != s2[k];
i += 1
break
j += 1
else:
count += 1
i = j
slse:
i += 1
print(count)
DEMO54
s1 = input()
s2 = input()
length = len(s2)
while length > 0:
left = 0
right = length -1
while right < len(s2):
s = s2[left: right + 1]
print(s)
if s in s1:
print(s)
exit()# t退出程序
break
left += 1
right += 1
length -= 1
1.13 函数/方法
主要解决的问题:将那些具有独立性功能的,且重复的代码进行封装。
独立性:这一段代码,专门用于处理某一个问题。
函数就是具有一个固定的算法流程,只会根据不同的参数得到不同的结果。
比如素数问题:
Demo35
Python当中,函数的语法格式:
def 函数名(参数列表):
函数体,具体的执行内容
return 返回值
#如果函数不需要返回,则可以不用写return
#return 它仅仅表示结束当前函数,如果有返回值则写上,没返回值可以不写return,默认返回none。