一、编程与编程语言

 python是一门编程语言,学习python之前,先搞明白三个问题。编程的目的?什么是编程语言?什么是编程?

    1、编程目的?

        计算机的发展就是为解放人力,机器是死的,所以人必须找到一种能够被机器识别的表达式从而把自己的思想按照这个表达方式传递机器,完成机器可以自发的工作。

    2、什么编程语言?

        上面所说的表达方式指的就编程语言,那我们学习英语来几个栗子:学习英语需要学习单词、语法,最后要将单词按照语法格式写成作文;同样的道理,学习python也是学习关键字(if while for and or)、语法,最后达到编程的目的;  

    3、什么编程?

        按照某种编程语言的语法风格写程序,程序在未执前就是一对普通文件。   


二、编程语言的发展及分类

    PS:在这里将程序员比作奴隶主,将计算机比作奴隶       

    第一阶段:机器语言(即站在奴隶角度说计算机能听懂的话,直接用二进制编程,直接操作硬件)

        优点:执行效率快

        缺点:学习难度大,开发效率低

    第二阶段:汇编语言(站在奴隶角度说计算机能听懂的话,用一些英文标签来代替一串特定的意义的二进制,还是直接操作硬件)

        优点:执行效率快,不如机器语言快

        缺点:学习难度大,开发效率低,比机器语言降一个难度

    第三阶段:高级语言(站在奴隶主的角度说人话,机器无法理解,所以需要翻译,翻译有分为两类:编译和解析)

        编译型(C):相当于百度翻译,翻译一次,拿着该翻译的结果去执行。

                优点:执行效率高

                缺点:开发效率低

        解释型(Python):相当于同声传译,一边解释一边执行。

                优点:开发效率高

                缺点:执行效率低

    以上三个阶段的 执行效率、开发效率、学习难度依次排序如下:

        执行效率:从高到低(机器语言>汇编语言>高级语言)

        开发效率:从低到高(机器语言<汇编语言<高级语言)

        学习难度:从难到易(机器语言>汇编语言>高级语言)

    PS:执行效率不是影响,开发效率才是王道


三、写程序的两种方式

    1、交互式:(在python解释器中直接执行的命令)即时调试

    2、非交互式:(执行文件)python3 C:\test.py


四、变量

    1、什么是变量?

        变指的是“变化”,量指的反映某种状态  

    2、为什么要有变量?

        程序执行的本质就是一系列状态的变化,变是程序执行的直接体现,所以我们需要有一种机制能够反映或者说是保存下来程序执行时状态以及状态的变化。

    3、如何定义变量?

        在程序的内存空间为变量开一个小房间,挂上变量名(相当于门牌号,指向值所在的空间)

    语法:变量名=变量值

        name='test'    password='test123'

    4、变量名的命名规则? 

        1)变量名只能是 字母、数字或下划线的任意组合

        2)变量名的第一个字符不能是数字

        3)关键字不能声明为变量名[

    5、定义的方式?

        1)驼峰式:TestValue=20(大小写结合) 

        2)下划线:Test_Value=20

            PS:不好的定义变量名方式

                (1)变量名为中文、拼音

                (2)变量名过长

                (3)变量名词不达意

        3)定义变量会有:id,type,value

            (1)等号比较的是value值

            (2) is比较的是id号(id号不是内存地址  但是反映了在内存中的位置)

        强调: 1、id相同,意味着type和value必定相同

                  2、value相同type肯定相同,但id可能不同

    6、变量的修改与内存管理(引用计数与垃圾回收机制)

       python中对于没有引用的内存数据有自动回收机制,判断是否有引用的方法是看变量所在的内存空间是否挂有变量名。


五、常量

    常量即指不变的量,如圆周率π 3.141592653...,在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

 

六、Python程序被执行的过程(重点!!!)

    举栗子:在Windows的python3环境下启动一个C:\test.py文件,具体过程如下

    1、先启动python3.exe

    2、把C:\test.py从硬盘读入内存

    3、解释执行文件内容(识别python语法)   

   

七、产生一个变量的三要素(重点!!!)

    举栗子:定义一个变量name='Test'   

    1、变量值:用变量名取变量值

        print(name) 

    2、变量值的类型:表示不同的状态应该用不同类型的值去表示(数字:年龄,字符串:名字)

        print(type(name))

    3、变量值的id号:

        print(id(name))   

  PS:判断值value是否相等:== 

         判断内存位置id是否相等:is

         对于两个value相等的变量,变量值长度短的时候它们的id号是一样的,变量值长度长的时候它们的id号是不一样的,这个没有明确的界限;


八、程序与用户交互

    1、交互式输入

        之前,我们去银行取钱,有专门的银行业务员让我们把自己的账号密码输入给他,然后他去进行验证,验证成功后,将取款金额告诉他。现在各个银行都为客户提供一台ATM机(就是一台计算机),让ATM机跟用户交互,从而取代人力。机器毕竟是死的,所以就需要编写程序来它运行,这就要求我们的编程语言中能够有一种能与用户交互,接收用户输入数据的机制。

    注意:在python3中,input:用户输入任何值,都存成字符串类型

             在python2中,input:用户输入什么类型,就存成什么类型;raw_input:等于python3的input(用户输入任何值,都存成字符串类型)

    2、注释

        增加代码的可读性,让别人知道你写的代码是干什么用的。

        代码注释分单行和多行注释, 单行注释用#,多行注释可以用三对双引号""" """

        代码注释的原则:

            1)不用全部加注释,只需要在自己觉得重要或不好理解的部分加注释即可

            2)注释可以用中文或英文,但不要用拼音

    3、文件头

        #!/usr/bin/python

        # -*- coding: utf-8 -*-

    

九、基本数据类型

    1、什么是数据?为何要有多种类型的数据?

        数据即变量的值,如age=18,18则是我们保存的数据。

        变量的是用来反映/保持状态以及状态变化的,毫无疑问针对不同的状态就应该用不同类型的数据去标识

    2、数字类型

        1)int整型

        定义:age=10 #age=int(10)

        用于标识:年龄,等级,×××号,qq号,个数

        2、float浮点型

        定义:salary=3.1 #salary=float(3.1)

        用于标识:工资,身高,体重,

    3、字符串类型

        定义:str=' '|" "|''' ''' (在引号(单引号,双引号,三引号)里定义的一堆字符)

            PS:那单引号、双引号、多引号有什么区别呢? 

                单双引号木有任何区别,只有下面这种情况需要考虑单双的配合===>   msg = "My name is Egon , I'm 18 years old!"

                多引号什么作用呢?作用就是多行字符串必须用多引号 

        状态:描述性的内容,比如名字,性别,国籍

        备注:字符串呢只能进行"相加"和"相乘"运算(字符只能跟字符串之间进行+或者*)

            注意1:字符串相加的效率不高

                字符串1+字符串3,并不会在字符串1的基础上加字符串3,而是申请一个全新的内存空间存入字符串1和字符串3,相当字符串1与字符串3的空间被复制了一次,

            注意2:只能字符串加字符串,不能字符串加其他类型

    4、列表类型

        定义:[]方括号内,用逗号分隔开,存放多个任意类型的元素

        状态:有序存放多个值

            # info=['egon',18,'male',['欧德博爱','education',70]] #info=list([...])=

            # print(info[3])

    5、字典类型

        背景:存放一个人的信息:姓名,性别,年龄;字典即可以存放多个任意类型的值,又可以硬性规定值的映射关系的类型,比如key=value。

        定义:{}花括号内,用逗号分割key:value,   value可以是任意类型但是key必须不可变类型

        状态:存放多个值

            # info={ 'name':'egon', 'age':18, 'sex':'male', 'company':{'name':'欧德博爱','type':'education','emp_count':70} }

            # print(info['company']['type'])

    6、布尔类型(True,False)

        定义:即判断一个条件成立时,用True标识,不成立则用False标识。

        状态:成立,不成立,用来做逻辑运算判断

            #age=38

            #print(age > 18)

    补充个重点:可变类型和不可变类型

        1、可变类型:在id不变的情况下,value可以变,则称为可变类型,如列表,字典

        2、不可变类型:value一旦改变,id也改变,则称为不可变类型(id变,意味着创建了新的内存空间)

    

十、格式化输出

    程序中经常会有这样场景:要求用户输入信息,然后打印成固定的格式,比如要求用户输入用户名和年龄,然后打印如下格式:My name is xxx,my age is xxx.

    很明显,用逗号进行字符串拼接,只能把用户输入的名字和年龄放到末尾,无法放到指定的xxx位置,而且数字也必须经过str(数字)的转换才能与字符串进行拼接。

    这就用到了占位符,如:%s、%d

        %s字符串占位符:可以接收字符串,也可接收数字

        %d数字占位符:要注意d%只能接收数字

        name=input('your name: ')

        age=input('your age: ')  #python3中用户输入18,会存成字符串18,无法传给%d

        print('My name is %s,my age is %s' %(name,age)) 


十一、基本运算符

    运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算

    1、算数运算(+ - * / % // **)

    2、比较运算(== != <> > < >= <=)返回True或者False

    3、赋值运算(= += -+ *= /= %= **= //= )   

    4、逻辑运算(and or not)返回True或者False

    5、身份运算is

        备注:is比较的是id


十二、流程控制之if...else

    逻辑运算,就是按照不同的条件做出不同的反映;

    if语句的格式:

        if expression:

          statement1()

        else:

          statement2()  


十三、while循环

    1、语法

        while 条件:    

            循环体

        如果条件为真,那么循环体则执行,执行完毕后再次循环,重新判断条件。。。

        如果条件为假,那么循环体不执行,循环终止

    2、死循环(只要条件一直为True,循环就一直继续)

    3、循环嵌套与tag

    tag=True

    while tag:

            ........

            while tag:

                tag=False

    4、break与continue

        break用于退出本层循环
        continue用于退出本次循环,继续下一次循环

    5、while与else

    在Python 中还有个while ...else 语句,while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句

    count = 0

    while count <= 5 :

            count += 1

            print(count)

    else:

            print("循环正常执行完啦")

    print("-----out of while loop ------")