py语法基础理解

条件判断

只有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.翻转问题

排序算法

选择排序: 选择排序:每个数字都要从左到右去进行比较,每次比较都会产生一个该角标的最小值

92bac74aa3154fed94c12ed778a2fde3.png

冒泡排序:

7858a3567db642cfbeea971c9501a444.png

插入排序:会形成左边有序的一个区间

ca8b63455fc64485be5413be3fe4550a.png

希尔排序:

快速排序

堆排序

归并排序

计数排序:

b7f436d1652b48428f870cb6727aceb5.png

基数排序

桶排序

查找算法

二分查找:要求数据必须有序,不考虑元素,只考虑位置

插值查找:数据必须是有序的,除了要考虑位置还得要考虑元素的分布情况。插值查找适用于数分布比较均匀的情况。

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)  #删除变量

0140aa3e7a7a4a98a301a7c57f68be9f.png

10f5a2e67764472a868a4fe4e8d691a9.pnge3fc5357ffb242c69cfee72d10592476.png

字符串对象函数

可变对象与不可变对象

列表是可变对象:可以修改列表中的元素,甚至长度

字符串是不可变对象:不可以修改字符串中的元素,包括长度

注意:也就意味着对字符串的修改,一律不是在本身修改,而是创建一个新的字符串

#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。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陈好运17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值