代码改变世界

python day1笔记:简介、IDE、变量、循环、判断、编码

2017-04-26 10:52  明月照花眠  阅读(224)  评论(0)    收藏  举报

鸡汤部分

运维开发的目的不是把PYTHON换成SHELL脚本。最关键的是要写一个完整的平台。要把PYTHON当成一种新的技能,新的语言来学习,而不是抱着试一试的态度。

学习方法:

1.课上听课是主要的,笔记是次要的。

2.课下的话整理笔记。

3.回家以后不要看视频,就是反复整理笔记。

4.总结完笔记以后就要写博客,将URL附带到作业上。

5.最后一步做作业,作业的话先用中文写流程,然后形成代码。在写流程的时候把小的知识点给拼接上。

 讲课的参考博客:

www.cnblogs.com/wupeiqi/articles/5433893.html

 

 

PYTHON是一种什么语言

python是近几年在国内才火起来的,目前在运维自动化方面比较火,主要是因为在自动化这方面的类库比较多。python是一门高级语言,是相对于C来说的,C的话代码直接转化成机器码,然后在电脑上运行,而Python首先要把代码抛给解释器,然后解释器再生成字节码,最后再生成机器码。

python相较于其他高级语言:

相较于GO来说,在处理高并发请求上比较差,因为GIL锁限制了PYTHON的性能。

相较于JAVA来说,PYTHTON出现的时间相对较短

python的种类

随着PYTHON的推出,那些其他语言公司也有了先见之明,纷纷推出了PYTHON对应自己语言的版本。官方的python是用C语言来实现的,我们一般叫做CPYTHON

除此之外,还有Jythonjava python)、RubyPythonIronPython等。都是讲PYTHON代码动态编译成对应语言的字节码,然后在他们的虚拟机或者软件解释器上来运行。

有一个特殊的种类叫做PYPY:它和正常的CPYTHON相比的话PYPY会把所有的代码都转成字节码然后统一给机器码,就是有一个比较长的编译的过程,不过编译完以后下次运行就会很快。(CPYTHON是解释型的,需要将代码一行一行的进行解释执行)

下面图是CPYTHONPYTHON之间的效率差。

 

PYPY是运行速度快。

 

PYTHON的解释器

我们平常说的下载PYTHON 安装PYTHON,其中的PYTHON主要说的就是PYTHON解释器。PYTHTON解释器有以下几种用法:

1.写文件

写文件的话,一般后缀我们都使用.py文件,方便解释器自寻找,而不用我们自己给脚本指定解释器。在linux环境下,我们还会给头部直接加上解释器的路径,比如/usr/bin/python。这样可以给文件加上执行权限以后,用./xxx.py的方式来执行这个文件。

通常我们在文件的第二行还会指定一下python解释器以什么编码方式,如果不指定的话,python2中默认使用ascii码,python3中默认使用utf-8

2.检查词法

解释器会坚持PYTHON代码的词法,比如会检查缩进是否合乎规定。

3.生成字节码

PYTHON解释器会生成一个叫做PYC的文件,这就是PYTHON的字节码。

编码

字符编码也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通过通信网络的传递。

ASCIIGB2132

最早美国人使用的字符集编码就是ASCIIAmerican Standard Code for Information)码一共可以表示256个字符。后来随着电脑的普及,别的国家也出现了使用本国字符集编码的需求。来到中国以后,1980年发展出了GB2312通过映射关系来进行。GB2312只包括了6763个汉字,支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886,汉字21003个。2000年的GB18030取代了GBK1.0,收录了27484个汉字。

UNCOIDE

出现了本国特定的编码以后,又出现了新的问题,在国与国之间进行交流的时候,总会出现因为编码问题而导致的各种乱码现象。这样在国与国交流的过程中出现了新的问题,会大概率出现乱码。就出现了整合世界上所有字符的编码:uncoide码。Uncoide4个字节组成,一共可以表示42E个字符。完全可以满足现有的需求。但是存在一个很严重的问题就是资源的浪费,使用ASCII码来编写的英文文档,在使用了unicode以后,凭空多出了4倍的大小。所以unicode在出现的很长一段时间内还是得不到普及。

UTF-8

Unicode transport formatunicode码传输格式。Utf-8的出现最开始的为了解决unicode在传输过程中资源浪费的现象,就通过一些变长的手段来传输unicode。作者是希望通过unicode→utf-8→unicode的方法来使用utf-8不过在实际生活中,大家更习惯使用utf-8Utf-8uncoide之间的转换关系。 

PYCHARM

pycharm是一个比较好用的Pythonide,可以帮助程序员更加快速的写代码,并且找到代码中一些常见的错误。我们在使用PYCHARM之前可以进行如下的操作进行初始化:

 1.创建一个project可以自己指定解释器路径和项目路径。

 2.创建一个新的PYTHON文件。

 3.设置文件保存所使用的编码格式

    file -default setting - editor -file encoding,将所有的编码都改成utf-8

     4.配置文件模板

file -default setting - file and code templates。将解释器路径和默认解释器编码都编进去。

     5.设置代码大小

setting -> mouse,勾选change font size(Zoom) with Ctrl+Mouse Wheel

python中的注释

1.Python的注释以#为开头,或者用3个引号将要注释的内容包含起来。
2.多行注释的以3个引号为开头3个引号为结尾。三个引号开头和三个引号结尾的也可以用来打印多行。这里使用单引号和双引号没有区别,所以就是单套双和双套单没有区别。
3.对于类的注释,需要包含一段简明扼要的描述,作者和上一次修改的时间。对于方法的注释,需要包含这个方法的用途,功能,参数以及返回结果。
4.对于那些在行末写有注释的代码,应该对齐注释行来使得方便阅读有些开发人员使用tab来对齐注释,而另外一些人会用空格来对齐。由于tab在不同的编辑器和集成开发环境中会有所不同,所以最佳的方法是使用空格来对齐注释行。
5.方法中加入段落注释,在每一个段落,每一个段落都执行单一的任务;然后在每一个段落开始之前添加注释,告诉阅读代码的人接下来的这段代码是干什么用的。

 

 

变量

PYTHON中数据都是存储在内存当中,然后变量就是记录这些内存地址,方便程序在调用时直接找到这些数据。

变量的命名规则:

1.变量名只能是字母、数字或下划线的任意组合。
2.变量名的第一个字符不能是数字。
3.变量不能有空格,不能有特殊字符。
4.以下关键字是不能声明为变量名(and,as,assert,break,class,continue,def,del….

变量命名的一些约定俗称的规则:
1.不要用一些无意义的字符来进行变量命名,也不要用汉语来当变量名,变量名尽量能一眼看出变量的意义,也方便后边调用。
2.对于多个定语的变量,中间使用下划线分割,或者通过每个单词首字母大写来分隔(驼峰式命名)python当中,我们一般都比较习惯使用下划线来进行分割。
3.  如果所有的字母都是大写字母的话,就默认为常量。

关于不同变量名字赋予了一个值:Python的优化机制会让变量指向同一块内存空间。

用户交互

明文输入

明文输入的话需要使用input来进行操作。

比如 user = input(please insert your username:)

密文输入

密文输入要导入一个getpass模块,而且还不能在pycharm当中进行调试。

import getpass

passwd = getpass.getpass(‘’)

标准输出

使用Print方法即可对后面括号内的内容进行标准输出。

条件语句

python中,解释器会一行一行的读取代码,在某些时候,我们想根据不同的情况分别执行不同的代码,这时候就需要使用到条件判断来帮我们实现这个功能。

格式:

if 条件:

code

elif 条件:

code

……

else

code

条件语句中条件的写法:条件的写法是从头往后看。比如A OR B AND C OR D。判断A是否为True,如果为True,就不继续走了,直接返回True,因为后面是OR,如果是false,就继续走。。。

使用Pycharm进行调试

1.通过DEBUG 打断点,然后单步调试。

2.然后一步步的继续搞。

3.根据变量赋值的内容和跳转解析的顺序来进行调试。

循环语句

while循环

格式:

while 条件:

code

当不满足条件,或者发出break信号的时候,就会退出循环,其余时候会一直进行循环。

for循环

格式:

for val in data:

  code

循环取data数据,赋值给val,然后执行code代码。

 

课后练习题

a. 元素分类

 

            有如下值集合 v1 = [11,22,33,44,55,66,77,88,99,90]

            将所有大于 66 的值保存至字典的第一个key中,将小于 66 的值保存至第二个key的值中。

            即: {'k1': 大于66的所有值, 'k2': 小于66的所有值}

            代码如下

v1 = [11,22,33,44,55,66,77,88,99,90]

v2 = {'k1':[],'k2':[]}

for num in v1:

    if num >=66:

        v2['k1'].append(num)

    else:

        v2['k2'].append(num)

print(v2)  v2 = {'k1': [],'k2':[] }

            

 

b. 功能要求

            v = 2000

            要求用户输入总资产,例如:2000

            显示商品列表,让用户根据序号选择商品,加入购物车

            购买,如果商品总额大于总资产,提示账户余额不足,否则,购买成功。

            goods = [

                {"name": "电脑", "price": 1999},

                {"name": "鼠标", "price": 10},

                {"name": "游艇", "price": 20},

                {"name": "美女", "price": 998},

            ]

            

#!/usr/bin/python

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

goods = [

                {"name": "电脑", "price": 1999},

                {"name": "鼠标", "price": 10},

                {"name": "游艇", "price": 20},

                {"name": "美女", "price": 998},

            ]

thing_buied = {}

 

money = input("欢迎来到oldboy大酒店,请输入您的余额:")

for n in goods:

    thing_buied[n['name']] = 0

if money.isdigit():

    money = int(money.strip())

    money1 =money

    print("商品列表".center(50, '-'))

    for k, v in enumerate(goods):

        print("%s:%s,%s" % (k, v['name'],v['price']))

    while True:

        user_choice = input("按序号购买你需要的商品(exit 退出):")

        if user_choice == "exit":

            break

        if user_choice.isdigit():

            user_choice = int(user_choice.strip())

            if money >= goods[user_choice]['price']:

                money -= goods[user_choice]['price']

                print("%s 已经加入您的购物车"%goods[user_choice]['name'])

                print("您的余额为:",money)

                thing_buied[goods[user_choice]['name']]+=1

            else:

                print("余额不足")

        else:

            print("insert error")

    print("欢迎下次再来,您购买了如下物品:")

 

    for name in thing_buied:

        if thing_buied[name] >0:

            print("%s %s"%(name,thing_buied[name]))

    print("共消费%s"%(money1-money))

else:

    print("insert error")

 

c. 三级菜单

dic = {

    "河北": {

        "石家庄": ["鹿泉", "藁城", "元氏"],

        "邯郸": ["永年", "涉县", "磁县"],

    },

    "河南": {

        "洛阳":["洛阳1","洛阳2","洛阳3"],

        "漯河":["漯河1","漯河2","漯河3"]

    },

    "吉林": {

        "四平": ["梨树县", "五棵松", "白山"],

        "长春": ["净月潭", "世纪城", "啦啦啦"]

    }

}

 

sheng_choice = None

shi_choice = None

xian_choice = None

flag = True

while flag:

    for k,v in enumerate(dic):

        print(k,v)

    user_choice = input("choose your sheng:")

    if user_choice.isdigit() and int(user_choice) < len(dic):

        user_choice = int(user_choice.strip())

        for k,v in enumerate(dic):

            if k == user_choice:

                sheng_choice = v

                for k,v in enumerate(dic[sheng_choice]):

                    print(k,v)

                user_choice = input("choose your shi:")

                if user_choice.isdigit() and int(user_choice) < len(dic[sheng_choice]):

                        user_choice = int(user_choice.strip())

                        for k, v in enumerate(dic[sheng_choice]):

                            if k == user_choice:

                                shi_choice = v

                                for k,v in enumerate(dic[sheng_choice][shi_choice]):

                                    print(k,v)

                                flag = False

 

                else:

                        print("输入错误,返回初始页面".center(50,'-'))

    else:

        print("输入错误,返回初始页面".center(50,'-'))