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。
除此之外,还有Jython(java python)、RubyPython、IronPython等。都是讲PYTHON代码动态编译成对应语言的字节码,然后在他们的虚拟机或者软件解释器上来运行。
有一个特殊的种类叫做PYPY:它和正常的CPYTHON相比的话PYPY会把所有的代码都转成字节码然后统一给机器码,就是有一个比较长的编译的过程,不过编译完以后下次运行就会很快。(CPYTHON是解释型的,需要将代码一行一行的进行解释执行)
下面图是CPYTHON和PYTHON之间的效率差。
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的字节码。
编码
字符编码也称字集码,是把字符集中的字符编码为指定集合中某一对象,以便文本在计算机中存储和通过通信网络的传递。
ASCII、GB2132
最早美国人使用的字符集编码就是ASCII(American Standard Code for Information)码一共可以表示256个字符。后来随着电脑的普及,别的国家也出现了使用本国字符集编码的需求。来到中国以后,1980年发展出了GB2312通过映射关系来进行。GB2312只包括了6763个汉字,支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886,汉字21003个。2000年的GB18030取代了GBK1.0,收录了27484个汉字。
UNCOIDE
出现了本国特定的编码以后,又出现了新的问题,在国与国之间进行交流的时候,总会出现因为编码问题而导致的各种乱码现象。这样在国与国交流的过程中出现了新的问题,会大概率出现乱码。就出现了整合世界上所有字符的编码:uncoide码。Uncoide由4个字节组成,一共可以表示42E个字符。完全可以满足现有的需求。但是存在一个很严重的问题就是资源的浪费,使用ASCII码来编写的英文文档,在使用了unicode以后,凭空多出了4倍的大小。所以unicode在出现的很长一段时间内还是得不到普及。
UTF-8
Unicode transport format:unicode码传输格式。Utf-8的出现最开始的为了解决unicode在传输过程中资源浪费的现象,就通过一些变长的手段来传输unicode。作者是希望通过unicode→utf-8→unicode的方法来使用utf-8不过在实际生活中,大家更习惯使用utf-8。Utf-8和uncoide之间的转换关系。
PYCHARM
pycharm是一个比较好用的Python的ide,可以帮助程序员更加快速的写代码,并且找到代码中一些常见的错误。我们在使用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,'-'))
浙公网安备 33010602011771号