python学习笔记1--初识python

    人生苦短,必须性感,要想性感,先学python!

    我是一个90后入行两年多的运维,现供职于一家游戏公司,现在我手里最大的项目有三个运维人员,共有4000多台服务器。面对这么庞大的服务器数量,自动化运维工具必然少不了(着重夸一下ansible,简直强大的不要不要的,爱死了),公司也开发了一些运维平台或者资产管理平台,但随着业务的发展壮大,现有的业务平台对业务的支持渐渐的跟不上脚步,只能东拼西凑。

    作为一个运维人员,shell脚本还是要写的,但是越写越觉得shell脚本的局限,很多事情用shell脚本实现效率较低,而且随着运维业务搬上页面,shell脚本写的cgi程序也显得越来越吃力,当初用shell写出一些接口cgi的时候还感觉自己很牛X,其实到后来才发现自己真的是见识短浅,好多问题还是没法得到完美的解决。所以自然而然的想到了我大python。

    扯了这么多,其实说白了,就是想学会python好让我升值加薪,出任CEO,迎娶白富美,走上人生巅峰,想想还有点小激动呢~

--------------------------------------------------------------------------扯淡到此为止-------------------------------------------------------------------------

    一、环境准备

   版本:python3.5

   系统:Linux/Unix/Windows/MacOS

         由于我是一个运维,所以没有特殊说明的情况下,都使用linux系统,不要问我为什么不用windows,这也是情怀。

 

    二、先写一个Hello Word!这叫情怀!

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
print("hello world")
#!/usr/bin/env python3    这句话的意思是声明程序的解释器是python3
# -*- coding:utf-8 -*-    这句话是声明字符编码,关于字符编码的部分,在下文中会详细记录
print("hello world")      这就是我大python的输出语句了,在python2.x的版本中,输出使用print语句,例如:print 'hello world'

    三、关于变量和常量

    关于变量和常量的定义,此处不再多说。

    python中定义变量的方法如下:

name = 'coder zhang'
age = 18
handsome = True

    变量名可以包括字母、数字、下划线,变量不能以数字开头,变量名不能是python中的关键字,如:if,else,while等。

    一般情况下,变量命名可以用以下两种方式:

    1、小写字母加下划线

        name_of_you

    2、使用驼峰法命名

       NameOfYou

       nameOfyou

     使用固定的格式命名变量可以增加代码的可读性,使代码更加规范,逼格更高。

     关于常量,就是指在代码中写死的量,在程序执行过程中这个值不会改变,习惯上常量用大写字母表示:

     PIE = 3.141592653

 

    四、字符编码

    由于计算机使用二进制来进行运算,所以,当需要在计算机中表示字符,字母,符号等等的时候,二进制直接表示就没法实现了,所以,聪明的人类发明了字符编码,即规定某数字代表某字符,这样的对应规则就称为字符编码。

    ASCII,此编码是计算机最早诞生时使用的字符编码,使用1字节来存储字符,最多可以表示255个字符,显然,这已经足够显示所有的英文字母以及常用符号了,所以,目光短浅的美国佬就觉得这些已经足够了,当年搞IPv4的哥们儿估计也是这么想的,呵呵。

    GB 2312,此字符编码是为了表示中文,GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;同时,GB 2312收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

    GBK 1.0,此字符编码向下兼容GB 2312,共收录了21003个汉字。

    GB 18030,此字符编码有两个版本:GB18030-2000和GB18030-2005。GB18030-2000收录了27533个汉字,GB18030-2005收录了70244个汉字

    Unicode,为了统一各国的字符编码方式,Unicode应运而生,这个字符编码收录了所有的地球符号,也是老牛逼了,但是此字符编码使用2字节来保存,这就意味着磁盘保存同样的文件,与ASCII相比,会多出一倍的存储空间,很明显,这很浪费。

    UTF-8,这是一项伟大的发明,是的,没错。在UTF-8中,0-127号的字符用1个字节来表示,使用和US-ASCII相同的编码。这意味着1980年代写的文档用UTF-8打开一点问题都没有。只有128号及以上的字符才用2个,3个或者4个字节来表示。因此,UTF-8被称作可变长度编码。很明显,这种字符编码,完美的统一了各国的各种字符编码,并且并没有浪费过多的磁盘空间,

    在python3.x中,默认使用的就是UTF-8的字符编码,但在python2.x中并不是这样,所以在代码开头要写上字符编码的声明:

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

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

 

    五、注释

    单行注释:

    python中使用#作为单行注释

    多行注释:

    使用一对'''或"""作为注释,多行注释还可以用于打印多行的情况,如:

info = '''
name:coder zhang
age:18
job:IT
'''
print(info)

运行结果如下:

name:coder zhang
age:18
job:IT

 

    六、用户输入

    python3用于接收用户输入的方法是:

    input('xxxxxx')

  在python2中,除了input()方法外,还有一个raw_input()方法,但该方法在python3中改为了input(),python2中input()这个方法实在蛋疼,所以被搞掉了:

    python2中的raw_input()方法和python3中的input()方法完全一样,其会将所有的输入都作为字符串来接收,但是python2中的input()方法会保留用户输入的数据类型,例如,在python2中你想要输入一个字符串zhangsan,使用raw_input()方法时,用户可以直接输入zhangsan,而使用input()方法时,用户必须输入"zhangsan",就是说用户必须用引号将输入的内容引起来才行,显然,这是一种脑子长包的做法。

Python 2.7.10 (default, Oct 23 2015, 19:19:21) 
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.5)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> name = input('Name:')
Name:zhangsan
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<string>", line 1, in <module>
NameError: name 'zhangsan' is not defined
>>> name = input('Name:')
Name:"zhangsan"
>>> print name
zhangsan
>>> 

 

    综上所述,在python2中,尽量不要使用input()方法,而用raw_input()方法,在python3中就直接用input()就好了,因为你也没别的选择。

    由于python中input()方法会把用户输入统一按照字符串来处理,所以在必要的时候,我们需要对用户的输入做强制的类型转换:

    int():强制转换为整型

    str():强制转换为字符串类型

 

    七、格式化输出

    python中格式化输出有三种方式:

    1、%s %d %f占位符格式化输出

    2、{word1} {word2} ... .format{wrod1=value1,word2=value2,...}

    3、{0} {1} ... .format{value0,value1,...}

name = input("Name:")
age = int(input("Age:"))
job = input("Job:")

print("age typt", type(age))  #type()方法用来打印数据类型

#占位符方式格式化输出
info1 = '''
----------------INFO1 OF %s-----------------
Name:%s
Age:%d
Job:%s
''' % (name,name,age,job)

print(info1)

#指定变量名称与值的格式化输出 info2
= ''' ----------------INFO2 OF {Name}----------------- Name:{Name} Age:{Age} Job:{Job} ''' .format(Name=name,Age=age,Job=job) print(info2)
#指定变量位置的格式化输出 info3
= ''' ----------------INFO3 OF {0}----------------- Name:{0} Age:{1} Job:{2} ''' .format(name,age,job) print(info3)

 

    八、流程控制

    python中使用强制缩进来区分流程控制,如果本身是父级的语句一定要顶格写。

    1、if、if ... else、if ... elif ... else判断

    2、while循环

    3、for循环

    用下述代码来记录上述三种流程控制结构:

#本段代码实现一个简单的猜数字的功能,用户有三次机会,当猜对是退出程序,猜错3次后让用户选择是否继续,继续则再次拥有三次尝试机会
age = 34 retry = 3 times = 0
#while循环方式
while times < retry: guess_age = int(input("Please input your number:")) if guess_age == age: print("Yes,you got it!!") break elif guess_age > age: print("Guess smaller!") times += 1 other_chance = retry - times print("You have only {times} times!".format(times=other_chance)) else: print("Guess bigger!!") times += 1 other_chance = retry - times print("You have only %d times!" % other_chance) if times == retry: continue_tag = input("Do you want continue?(Y/N)") if continue_tag == "Y": times = 0 else: print("Good Bye!!")

#for循环方式
for
times in range(retry): guess_age = int(input("Please input your number:")) if guess_age == age: print("Yes,you got it!!") break elif guess_age > age: print("Guess smaller!") times += 1 other_chance = retry - times print("You have only {times} times!".format(times=other_chance)) else: print("Guess bigger!!") times += 1 other_chance = retry - times print("You have only %d times!" % other_chance) else: print("Good Bye!!")

 

 

    python在循环部分不同于其他语言的地方在于其能在循环结构中使用else语句,意为当循环结束后,执行else部分的语句,这个设定简直棒呆!

 

    九、两个方法,range()、getpass()

    1、range()方法:

        range()方法可以生成一个数值序列,如下代码生成一个0-4的数列:

for i in range(5):
    print(i)

 

       range()方法默认从0开始,其可以设置起始数字以及步长:

#设置以数字1为起始值
for
i in range(1,10): print(i)
#运行结果如下:

1
2
3
4
5
6
7
8
9

for i in range(0,10,2):
    print(i)
#运行结果如下:

0
2
4
6
8

 

      从上述结果我们可以看出,range()方法在输出时会包含数值的起始值,但却不包括数值的结束值。

    2、getpass()方法

        getpass()方法可以用于用户在输入密码时不显示明文,使用该方法前需要先导入getpass模块:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
import getpass

username = input('Please input your username:')
passwd = getpass.getpass("Password")

print(username,passwd)

 

posted @ 2016-07-24 18:45  没有手艺的手艺人  阅读(165)  评论(0编辑  收藏  举报