Python笔记1

编程基础课程:


什么是python?


简单的编程语言python
python环境搭建---:开发环境 vscode,sublime,pycharm
                                运行环境  cpython解释器
python -V测试运行环境

python怎么写代码


1,在终端写代码--代码无法保存
2,写在python文件中 .py      
       通过python python文件名
注释:单行注释   #
          多行注释  '''  ''' ;   """  """
变量:在程序运行的时候,可以发送变化的量
常量:在程序运行的时候,不可以发送变化的量
变量声明
java:变量类型  变量名=变量值
         int age=10
python:变量名=变量值
a,b=1,2

(标识符)
变量名命名规范:

                          1、使用大小写字母,数字,下划线
                          2、不能以数字为开头
                          3、不能使用关键字和保留字
                          4、不能使用python全局中已经用过的
                          5、建议标识符名称具有意义
                          6、建议使用_或者小驼峰命名法
                                find_usergroup_by_username
                                  findUsergroupBYUsername
7、特殊:类:大驼峰命名FindUsergroupBYUsername
                     python中没有常量的关键字的,变量名称全部大写用来表示常量
                      abc=11     ABC=22   PI=3.14
dir():显示对象中存在的方法


python的数据类型:


基本数据类型


数字类型===》整形(int)、浮点型(float)、复数(a+bi)
布尔类型===》true  false   判断条件是否成立的(bool)
字符串类型===》""       ''       ''' '''    """ """ str  三引可以换行   例如 '12'
"i'am ok"    I'm ok
'i\'am ok':通过转义符表面'
\n:换行符
input("提示语")
ord():获取字符的整数表示
chr():把编码转换为对应的字符
type():用来检测变量的数据类型的


复合数据类型===》所有的对象


字典、列表、元组、集合
数据类型转换:自动类型转换:整形  浮点型  布尔类型:非0为真,0为假
                       强制类型转换:
                                            int()\float()\str()
num1+num2=num3
print(a+"+"+b+"="+str(c))===>a+b=c
清屏:import os
          os.system("command")


常见的运算符:


算数运算符: 

+ - * /  //(整除) %(取余) **(平方)


关系运算符: 

 >  <  >=  <=  ==  !=(<>)


逻辑运算符:

 and(两真才真,一假则假) or(一真则真,两假才假) not


所属运算符  

in    not in


is运算符:

is判断内存地址是否相同    ==判断值是否相同


赋值运算符:

  = 、+=、-=、*=、/=、//=、%=、**=
 python中不存在自增自减
(//:整除;/:一定得到小数)


三目运算符:

变量=值1 if条件 else 值2
 age=int(input("请输入你的年龄"))
n="成年了"if age > 18 else "未成年"
 print(n)

位运算符:

计算机底层的运算规则
 & |  ^ ~ <<  >>

|:把两边的二进制各位进行或运算(两假才假)(两0才0,一1则1)
例如:2|3:
          0000 0010
          0000 0011
          -----------
          0000 0011  3
10|11
0000 1010
0000 1011
-----------
0000 1011

&:一假则假(一0则0)

10&11
0000 1010
0000 1011
-----------
0000 1010


^:相反为真(相反为1)

10^11
0000 1010
0000 1011
-----------
0000 0001


~:按位取反 连带符号位

~10
0000 1010

1111 0101(补码)
1111 0100
1000 1011(-11)     ~10==》-11


<<  所有二进制朝左移n位  12<<1(n)  增长2的n次方倍
>>  所有二进制朝右移n位   12>>1     无符号位右移

电脑?数学模型  记录数据===》处理数据
半导体材料===》从一边到另外一边是通电的,反向不通电
一个二极管,对应一个二进制的数(0/1) ---1bit
   1 byte=8个二极管 (8bit)------0~255   256
 
1-----48   00110000
B-----66   01000010
1100001000010

1k   1024B
1M  1024k
1G   1024M


10+11
基于byte
00001010
00001011

负数:最高位作为符号位  0表示正  1表示负
-128~127   256

为了解决负数运算的问题,提出了三个概念:
原码  十进制对应的二进制    1000 0011(-3)
反码  符号位不变,其余位取反  1111 1100
补码  反码+1                        1111 1101

2+ -3
0000 0010(2的原码)
1111 1101(3的补码)
-----------
1111 1111 补码
1111 1110 反码
1000 0001 原码(-1)

3.21
程序控制流程


解决语句与语句之间运行的顺序的问题

顺序:

代码整体的执行顺序  从上到下 从左到右

 

选择:

不同条件下,执行不同的代码
   

      单分支:


          if条件:
           #条件成立时执行的代码
(缩进强调的是在同一个块内缩进量一致    tab键和空格键不要进行混用)

 

     双分支:


          if条件:
              #条件成立时执行的代码
          else:
               #条件不成立时执行的代码(pass关键字保证语法的完整性)


  多分支:


        if  条件1:
              条件1成立时执行的代码
        elif 条件2:
               条件2成立时执行的代码
         .......
        elif条件n:
                条件n成立时执行的代码
        else:
             以上条件都不成立时执行的代码


循环:


     while 条件:
          循环体
3.22

while 条件:


        循环体
else:
       循环正常结束时执行的代码

for循环:主要用于容器的迭代


for 临时变量 in 容器:

3.24

index = .....
while 条件:
       循环体
       #判断的index数值改变

for 临时变量 in 容器:
      代码
range(num1):[0,num1)之内所有的整数
range(num1,num2,step):
range(10,0,-1)


容器

数据结构:


线性表:


数组:

类型一致的,大小固定,连续的内存结构
(python里无数组)

链表:

不一定要内存空间连续,大小不固定

栈:

先进后出

队列:

先进先出

一,python的内置容器:

1.list列表:


   底层使用的是双向列表--线性表--有序的
  (1)如何定义
                 变量名=[ ]
         b=[1,2,3,4,"gouxin",True]  列表里边可以存储不同的数据类型

         list([1,2,3,4])  list("zhangsan")  ---强制转换成列表
    (2)获取列表的长度  len()
      (3)获取每一个元素

(下标:从0开始,从左向右;从右向左,下标从-1开始 -2 -3
                            -1
         [1,2,3,4,"zhangsan"]
          0,1,2,3,4                 )
aa[len(aa)-1]


修改数据:列表名[列表下标]="新的数据"
aa[下标]="......."
”怎么添加数据,删除数据?“

     (4)遍历列表
            for
            while
列表的常见方法:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__',
 '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', 
'__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__',
 '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
 '__repr__', '__reversed__', '__rmul__', '__setattr__','__setitem__', '__sizeof__', '__str__',
 '__subclasshook__', 'append', 'clear','copy', 'count', 'extend', 'index', 'insert',
 'pop', 'remove', 'reverse', 'sort']

增:
append():向列表的尾部追加元素
insert(下标,添加的元素)
列表1.extend(列表2):合并列表的  列表2的数据合并给列表1

删除:
remove(元素)---列表名.remove(”元素“)
pop():通过下标删除元素,不给参数时,删除的是最后一位 -1。会返回删除的元素
clear():清空列表里的数据


查:
index(元素)获取匹配到的第一个元素的索引下标
index(元素,start)从start下标开始查找

count(元素):计数

copy():拷贝 浅拷贝
>>> a = [1,2,3,4]
>>> b = a.copy()
>>> b
[1, 2, 3, 4]

reverse():反转
>>> a.reverse()
>>> a
[4, 3, 2, 1]

sort()
>>> a=[3,6,1]
>>> a.sort()
>>> a
[1, 3, 6]
sort(reverse=True)   sort(reverse=False)
(False从小到大排序,True从大到小排序)

2.set(集合):


底层基于哈希表实现的:不能重复,无序
set()
集合无法进行访问的---无序的

len()
集合怎么遍历:
for


集合常见的方法:
['__and__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__',
 '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__iand__', '__init__', 
'__init_subclass__', '__ior__', '__isub__', '__iter__', '__ixor__', '__le__', '__len__', '__lt__',
 '__ne__', '__new__', '__or__', '__rand__', '__reduce__', '__reduce_ex__', '__repr__', '__ror__',
 '__rsub__', '__rxor__', '__setattr__', '__sizeof__', '__str__', '__sub__', '__subclasshook__', 
'__xor__', 'add', 'clear', 'copy', 'difference', 'difference_update', 'discard', 'intersection', 
'intersection_update', 'isdisjoint', 'issubset', 'issuperset', 'pop', 'remove', 
'symmetric_difference', 'symmetric_difference_update', 'union', 'update']

add(元素)

移除:
pop():任意一个元素被移除
remove(元素)
discard(元素) 区别:要移除的元素不存在时,discard()不会进行报错


intersection():交集
difference():差集
union():并集

3.元组tuple


不可变数据类型。元组是有序的(元组声明后不能再追加数据)
(1,2,3,4)
tuple()

>>> tu1=()
>>> type(tu1)
<class 'tuple'>
>>> tu2=("zhangsan",2,1,3)
>>> tu2
('zhangsan', 2, 1, 3)
>>> tu2[2]
1

访问:元组名[元组下标]

len(元组名)

如果一个元组只有一条数据,那么需要在这条数据后面加上逗号

元组中元素存在可变数据类型,那么更改可变数据中的元素不会报错
>>> tu1=(1,2,3,[5,6,7])
>>> tu1[3][1]="zhangsan"
>>> tu1
(1, 2, 3, [5, 'zhangsan', 7])

4.字典


{}
dict()
dict={”uname“:”zhangsan“,”age“:21,1:21,”sex“:”nan”}

查找数据:
字典名["键名"]
dict1["school"]="huazhu"存在则覆盖,不存在则进行添加
len()
key:value
get(key,默认不存在时则返回):通过key获取值的
keys():获取所有的键
values():获取所有的值

setdefault():添加键值对
del 要移除的项,可以删除任何的变量
dict1.fromkeys((1,2,3,4)):创建key值为1,2,3,4的字典,键值为none


删除:
pop():通过key删除键值对

items():返回键值对
update()

遍历字典
for


二,排序


      1.冒泡


                特点:相邻的两两进行比较
       arr=[1,21,33,42,2,54]
   [21,33,42,2,54,1]
      [33,42,21,54,2,1]
      [42,33,54,21,2,1]
      [42,54,33,21,2,1]
      [54,42,33,21,2,1]
   
   for i in range(0,len(arr)-1):
       for j in range(0,len(arr)-1):
             if arr[j]>=arr[j+1]:
                 arr[j],arr[j+1]=arr[j+1],arr[j]
             else:
                  pass

3.28


一,排序:

为数据进行排序,后期配合其他算法,实现数据的快速查找


1,选择排序:假设一位最小值


[22,1,3,43,24,36]
[1,22,3,43,24,36]
[1,3,22,43,24,36]
[1,3,22,43,24,36]
[1,3,22,24,43,36]
[1,3,22,24,36,43]


2,插入排序:假设第i个之前都是有序的


[22,1,3,43,24,36] i=0
[1,22,3,43,24,36] i=1
[1,3,22,43,24,36] i=2
[1,3,22,43,24,36] i=3
[1,3,22,24,43,36] i=4
(i=4执行后的结果[1,3,22,24,36,43])

二,函数


       函数是什么?一段实现某一特定功能的代码的集合
       本质上实现了代码的高度复用
       函数定义方式:
       def 函数名([形参]):
               一行或者多行的函数体
               [return返回值]
    
       调用函数:函数名加()
 
大O
时间复杂度:O(1) O(logN) O(n) o(n^2)
ps.计算机中logN若无指定则默认以2为底。

空间复杂度

算法的稳定性
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值