python基础超详细82条(含小练习)

Python 笔记(简单记录)

1、

用input进行输入,不管输入的是什么最后输出的类型都是字符串

如果再用spam/10会得到报错信息

2、对浮点数取整用int()

3、else语句不包含条件

4、一旦有一个elif为true其他elif语句会自动跳过

5、while循环块在执行完最后一条语句之后会返回到while的判断中,知道while的结果为false就不再继续执行while了

6、if not name这句话本来就表示如果输入的name为空字符串

7、range(12,16)

他的范围是12,13,14,15不包含最后一个数字

Range(0,10,2)最后一个数字代表步长

又由于不包含最后一个数字10,所以他是从0开始数到8

即0,2,4,6,8

可以用负数作为步长只是这种是不断减少

Range  (101)就是从0到100这101个数

8、from random import *这个语句和import random都是导入random模块,但是使用前者的形式在调用random模块中的函数的时候不需要random.的前缀。但是使用完整的前缀的名称会让代码更好读,所以最好用普通形式的import语句。

9、sys.exit()能提前结束程序。要提前导入sys模块

10、局部作用域不能使用其他局部作用域内的变量

11、如果需要在一个函数内修改全局变量需要global语句,例如

12、

一旦执行了except就不会继续执行完try里面后面的语句,例如一旦判断除数是零了就不会再去执行print(spam(1))

Collatz序列不断调用同一个函数

#笔误:反——>返

13在python中使用列表

  • 1)
  •  [... for ... if ...]:这是一个列表推导式的语法结构,它会根据循环和条件判断的结果创建一个新的列表。

因此,整个表达式的结果是:遍历str_input字符串,对于每个字符,如果它是字母,就将其转换为小写,然后将这些小写字母组成一个新的列表cleaned_chars。非字母字符将被忽略

2)

join()方法,其作用是将一个可迭代的对象(在这里是列表cleaned_chars)中的所有元素连接起来,形成一个字符串。

cleaned_chars = ['h', 'e', 'l', 'l', 'o']  # 假设这是之前通过某种方式得到的列表

cleaned_str = ''.join(cleaned_chars)  # 使用join()方法连接列表中的元素

print(cleaned_str)  # 输出 'hello'

3)

  • [::-1]:这是一个切片语法,:操作符表示切片操作,-1表示步长为-1,这意味着从字符串的最后一个字符开始,向第一个字符方向进行切片。

cleaned_str[::-1]会创建一个新字符串,它是cleaned_str的倒序字符串

14常用切片操作

以下所有的stop和start指的都是下标

  1. 基本切片:seq[start:stop]
    • 从索引start开始到索引stop结束,但不包括stop。
    • 如果start或stop被省略,则默认从序列的开始或结束。

my_list = [0, 1, 2, 3, 4, 5]

print(my_list[1:4])  # 输出 [1, 2, 3]

  1. 负索引切片:seq[start:stop]
    • 使用负索引从序列的末尾开始计数。

print(my_list[-3:-1])  # 输出 [3, 4]

  1. 步长切片:seq[start:stop:step]
    • step参数指定切片的步长。

print(my_list[0:6:2])  # 输出 [0, 2, 4]

  1. 反转序列:seq[::-1]
    • 使用-1作为步长来反转序列。

print(my_list[::-1])  # 输出 [5, 4, 3, 2, 1, 0]

  1. 复制序列:seq[:]
    • 不带任何参数的切片操作可以用来复制整个序列。

my_list_copy = my_list[:]

print(my_list_copy)  # 输出 [0, 1, 2, 3, 4, 5]

  1. 提取序列的一部分:seq[start:] 或 seq[:stop]
    • 只提供start或stop中的一个,另一个默认到序列的开始或结束。

print(my_list[2:])  # 输出 [2, 3, 4, 5]

print(my_list[:3])  # 输出 [0, 1, 2]

  1. 带步长的切片:seq[::step]
    • 只提供step参数,start和stop默认到序列的开始和结束。

print(my_list[::2])  # 输出 [0, 2, 4]

这些切片操作不仅适用于列表,也适用于字符串、元组

15输出列表的元素和对应的下标

你可以使用内置的enumerate()函数来同时输出列表的元素及其对应的下标

16动态规划法写斐波那契数列

16以阶梯形状输出九九乘法表

Python中,f"" 或者 f' ' 是一种字符串格式化的语法,称为格式化字符串字面量formatted string literals),也常简称为f-strings。这种字符串字面量是在Python 3.6及以后的版本中引入的。

f-strings 允许你在字符串字面量中嵌入表达式,并在运行时动态地计算和替换这些表达式。嵌入的表达式需要放在花括号 {} 内。

只有写end=“\t”才能输出阶梯型不然是按行输出,如下:

Print里面可以用f函数也可以不用

17找素数的方法

1)最快方法

2)很慢

3)输出所有素数

18明天基本数据类型

类重写多态

Python常规操作,大写字母小写字母,输出带不带空格

18,列表的下标为-1就是从最后一个元素开始;列表的下标为-2就是从倒数第二个元素开始

用len获取列表的长度,即列表中元素的个数

A[1,2,3]

Len(a)

19、+ 连接两个列表 *号用于复制

20、del函数用来删除列表中的某个元素,用列表的下标实现

21

使用str(len(a)+1)来显示对应的列表的的个数

这里用来显示你输入的是第几只猫的名字

22、range(len(a))这句话将迭代a的所有下标,无论他包含几项

23、多重赋值

24、方法和函数是一回事,只不过调用方法的时候要加个点

例如spam.Index(‘hello’)

而函数是直接可以用

每种数据类型都有它自己的一组方法

25、sort是当场对列表进行排序,不能记录器返回值

Spam=spam.sort()是错的

26、注意len返回的是列表中的元素个数,random.randint(0,9)实际的范围是真的到9,不减一的话会报超出列表范围的错

27、字符串是类似于列表的

列表中的len,in ,not in也可以用于字符串

28、字符串是不可被更改的,列表可以被更改,这是区别

想改变字符串只能创造出一个新的

29、元祖与列表的区别是,元祖用圆括号列表用方括号,另外元祖不可变

30、强制转换

31、引用

将一个列表赋值给一个变量时,实际是将列表的“引用”赋值给了该变量,引用是一个值指向某些数据,列表引用是指向一个列表的值。具体见书P75和P76

A和b都是对这个列表的引用,所以改变b之后a也跟着改变。A幅值给b之后只是把引用赋值给了b没有把列表赋值过去

32、传递引用

返回None是因为他本身没有返回值

这样就可以了

这说明尽管spam和addd是两个变量但是都指向的是同一个列表。函数传递的是引用

33、不只是复制引用:

使用copy和deepcopy

字典列表通用

Spam和cheese指向的是不同列表

Copy.copy()创建了一个新的列表

如果原来的spam中含有好几个列表,就用copy.decopy()

34、【】是一个空列表,类似于‘’

35、join情景再现。Join是str的方法,可用于连接列表

36python有判断继承关系的函数

Isinstance用于检查实例

Issubclass用于检查类继承关系

(上图来源于Python学习(七)面向对象 ——继承和多态 - feesland - 博客园 (cnblogs.com)

37 python中用

一个杠_ 表示受保护属性:外部不可以访问,只能在类的内部和子类访问

两个杠表示私有属性__:不应该在类的外部被访问,可以在类的方法中被访问,子类不可以访问

和封装属性类似,在类内部需要封装的方法前面加上双下划线 “__”。在外部调用的时候就会报错

如果我非要在外部调用双划线的方法:单画线加类名

(上图来源于Python入门基础教程:继承、封装、多态 (非常详细)_python封装继承多态-CSDN博客

由此可见:
Python 的封装并不是真正意义上的外部无法调用,与java PHP等语言不同,Python调用封装的属性或方法,需要在方法和属性前加_类名

38属性装饰器&方法装饰器

@property装饰器用于定义属性的访问器,它会将属性定义为一个只读属性。当外部代码试图修改这个属性时,会触发一个AttributeError异常。

@属性名.setter装饰器用于定义属性的修改器,它可以让外部代码修改这个属性的值。当外部代码试图读取这个属性时,会触发一个AttributeError异常。

(上图来源于 ​​​​​​Python入门基础教程:继承、封装、多态 (非常详细)_python封装继承多态-CSDN博客

39

python的封装是为了隐藏细节

封装的目的是隐藏类的实现细节,只暴露必要的接口给外部使用。如果一个属性或方法被公开为可访问的,那么它将变得容易受到攻击和滥用。例如,如果一个类的__init__()方法可以接受任意数量的参数,那么任何人都可以构造恶意对象并调用该方法。

通过将属性或方法定义为私有,我们可以确保只有类内部的对象才能访问它们。这有助于保护类的实现细节,防止不必要的干扰和错误。此外,封装还有助于提高代码的可维护性和可重用性,因为它可以将类的实现细节隐藏起来,使代码更加清晰和易于理解。

子类的封装属性以及方法不会覆盖父类的封装属性或方法

40

以下这段代码是错的

  1. 子类初始化的时候不能直接初始化,要用父类初始化。

Def __init__(self,name)

Super().__init__(self,name,age)

2Baba输出woof的时候,要用print因为,原函数只是返回没有打印

改正如下:

40重写

子类对继承的父类的某个方法或属性不满意,可以在子类对其(方法体)0进行重新编写,重写后的方法可以通过super().xxx()调用父类中被重写的方法

这句话输出了bb和woof,并没有因为重写之后函数多了一个打印使得无法再次通过print打印出woof

41如果dog类继承animal这个类,在创建一个class dage(animal,dog)这个类,会报错。不能这样用

42对kity来说他animal和people都有speak,但是他离animal近就用animal的方法。

这样改就不会报错了,分别继承两个无关的类

43在python中object是所有类的父类

Object有一个__str__()方法用于返回一个对于对象的描述

44

截图这种不叫多态:多态一定是发生在子类与父类之间的。子类重写了父类的方法

45这种是多态

还可以这样实现多态(一定确保有父子关系):

46字典

与列表一样字典是多种元素的集合,但不像列表有下标,字典的索引被称为:键

键及其关联的值成为“键----值”

Mycat={‘size’=’big’,’color’=’orange’}

Print(Mycat{‘size’})

字典可以用整数值作为‘键’

字典中的表项不是排序 放置的

与键值的顺序无关,只要内容一样就一样

47字典中的三个方法

Keys(),values(),items()三个可以用于for循环

For k in eggs.keys():

           Print(k)

其他类似

查看字典中是否存在键或值,可以用in如 if 1hao in eggs.keys():

48当不知道字典当中有什么键值的时候可以用get()

如:

49直接打印eggs发现原来的1hao不会变成kity,setdefault会在没有那个键的时候再原来的字典中添加键和值,但是如果原来的字典中有输入的键就不会重新添加,而且输入的值夜不会取代原来的值

实际应用:

50 pprint()

完成漂亮的打印

貌似没啥用,可能用错了

51

字典的嵌套,注意用的是v.get(‘键’,‘值’),因为v在这里他自己就是一个字典

52 字符串的操作

如果一句话当中有单引号,那这句话就要用双引号引用。

以下是转义字符:

\n 换行符

\t 制表符

\\ 表示反斜杠

\’表示单引号

\”表示双引号

53

原始字符串前加r,也就是单引号里有啥就输出啥

54 三重引号

1、就是可以换行输出

2、多行注释

55、常用字符串方法

解释:第二句话前面有空格,因为\n和spam2 之间有逗号

以下两种为修改后的情况

常用方法 isupper()和islower()其他isXXXX的都是用来判断的

startswitch()和endswitch()用来判断是否以啥开头以啥结束

Join()和split()

Join()用于连接字符串和字符串列表成为一个孤单的字符串

Split()用于删掉不想要的,但是最后胡出现的还是【】

Rjust(),ljust(),center()方法对齐文本,通过加空格来对齐

左对齐

右对齐

不通过空格版:

Center()

Strip(),lstrip(),rstrip()删除空白字符

删两边 删左边 删右边

56 、windows系统中路径用反斜杠而不是斜杠

57、打开文件用open

Fielpath=‘文件路径’

With open(filepath)as file1:

           Neirong=file1.read()获取全部内容

Filename=‘文件名字’

With open(filename)as file2:

           Hang=file2.readlines()#按行读取

           Hang1=file2.rstrip()

           Hang2=file2.lstrip()

           Hang3=file2.strip()

58

OrderedDict这个方法是collections中的,需要导入,它与其他字典的区别是,他能记住导入顺序。如下直接输出发现它是列表嵌套字典

59字典的打印

60将实例用作属性

将类的一部分作为独立的一部分提取出来

定义一个新的类但是不继承任何类,

两个类里面的属性互不影响,Xin只是对Die类的补充,注意调用的时候

61类中的方法可以对属性中的值进行递增

62

给形参指定默认值的时候等号两边不要有空格!

对函数中的关键字实参也遵循之中约定!

不加也不会报错,但这就是约定

63

使用as给模块指定别名

64

from模块import特定函数

65将函数存储在模块就是新建立一个.py文件然后写几个函数

例如有个pizza.py文件

Import pizza

然后在main中调用其中的函数即可

pizza.make_pizza()

66、定义一个函数以元祖和字典为形参

单星元祖,双星字典

下面这种情况是因为元祖啥都能装,就把a和b都当成装在里面的内容了,

而字典中没接收到内容:

下面这样传参会报错

直接传字典也报错

这样也报错

这样也不对

这样也报错:

哈哈直接传就对了

函数4这样做就对了,写双星就默认传进去的是字典

Func2也对了

Python会先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。如果要让函数接受不同类型的实参,需要在函数定义中将接纳任意数量的形参放在最后

67禁止函数改变列表,可以向函数传一个复制品

如上,记住列表是【】不是{ }

68

删除列表中的特定值用remove

一次只能删一个

但是可以用循环就都删了

While ai in c:

           c.remove(‘ai‘)’

69 pop删除列表最后一个元素,一次删一个

用循环可以多次删除

还可以这样用,注意向一个列表当中添加项要用append

70

用键名取找字典中的每一项

嵌套:列表嵌套字典

71按顺序遍历字典中的所有键

72删除键值对

删除键值对,要用del语句删除对应的键

73、修改字典中的键值对,用键名

字典是一种动态结构可以随时添加键值对

74、

确定列表是否为空

直接if加列表名就行

75修改元祖变量

给元祖变量赋值是合法的

元祖是比列表简单的数据结构,如果需要存储一组值在程序的整个生命周期内都不变,可使用元祖

但是如果像列表那样一个元素一个元素的改就报错了

76

注意  列表.reverse()是将列表反向打印,不是按照字母顺序反向打印

77

Sorted()对列表进行临时排序

Sort()是永久性对列表进行排序

78 pop可以删除列表最后一个元素并且你还可以使用它

如果想弹出特定位置的元素

比如:列表.pop(0)      列表.pop(99)

79

Remove是删除特定元素

80

相比于列表和元组,字典的性能更优,特别是对于查找、添加和删除操作,字典都能在常数时间复杂度内完成。

集合并不支持索引操作,因为集合本质上是一个哈希表,和列表不一样。所以,下面这样的操作是错误的,Python 会抛出异常。

要判断一个元素在不在字典或集合内,我们可以用 value in dict/set 来判断(对于字典,只能使用key in dict 来判断)。

而对于集合,其排序和前面讲过的列表、元组很类似,直接调用 sorted(set) 即可,结果会返回一个排好序的列表。

假设列表有 n 个元素,而查找的过程要遍历列表,那么时间复杂度就为O ( n ) O(n)O(n)。即使我们先对列表进行排序,然后使用二分查找,也会需要O ( log n ) O(\log n)O(logn)的时间复杂度,更何况,列表的排序还需要O ( n log n ) O(n\log n)O(nlogn)的时间。

如果我们用字典来存储这些数据,那么查找就会非常便捷高效,只需O ( 1 ) O(1)O(1)的时间复杂度就可以完成。

字典的内部组成是一张哈希表,你可以直接通过键的哈希值,找到其对应的值。

81

#判断是否为回文
is_palindrome = cleaned_str == cleaned_str[::-1]

82字符串的公共片段

def fun_1(list_input):

    """

    接收一个列表(仅由数字构成),返回该列表的最小元素以及对应元素的索引

    :param list_input: 输入的列表

    :return: 最小元素,对应元素的索引

    """

    min_value = min(list_input)

    min_index = []

    for index, value in enumerate(list_input):

        if value == min_value:  # 如果当前值等于最小值

            min_index.append(index)  # 将当前索引添加到索引列表中

    return min_value, min_index

def fun_2(list_input):

    """

    接收一个数字列表,返回该列表的所有非零元素的乘积,特殊情况:如果列表中没有非零元素,返回1

    :param list_input: 输入的列表

    :return: 返回非零元素的乘积

    """

    product = 1

    non_zero_found = False  #是否找到了非零元素

    for number in list_input:

        if number != 0:  # 如果当前元素非零

            product *= number

            non_zero_found = True  # 标记找到了非零元素

    if not non_zero_found:  # 如果没有找到非零元素

        return 1

    else:

        return product  # 返回乘积

def fun_3(str_input):

    """

    输入一个字符串数组,返回这些字符串从头开始的公共部分,如果没有,则返回空字符串""

    :param str_input: 输入的字符串数组

    :return: 返回的字符串

    """

    if not str_input:

        return ""

    prefix = str_input[0]

    for string in str_input[1:]:

        while not string.startswith(prefix):

            prefix = prefix[:-1]

            if not prefix:

                return ""

    return prefix

def fun_4(str_input):

    """

    将输入的字符串删除所有非字母字符并全转为小写,转换后的字符串如果前往后读和后往前读一致则返回true,否则返回false

    :param str_input: 输入的字符串

    :return: 前后阅读一致则返回true,否则为false

    """

#小写

    cleaned_chars = [char.lower() for char in str_input if char.isalpha()]

    #重组

    cleaned_str = ''.join(cleaned_chars)

    #判断是否为回文

    is_palindrome = cleaned_str == cleaned_str[::-1]

    return is_palindrome

list=[1,2,3,4]

print(fun_1(list))

print(fun_2(list))

#array=["abc","abb","abcd","b"]

#array=["abc","abb","abcd"]

array=["Abc","cba"]

print(fun_3(array))

print(fun_4(array))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值