Python3.5学习之旅一

本节内容:

1、Python介绍

2、Hello World程序   

3、变量\字符编码

4、用户输入

5、if-else语句

6、循环语句

 

一、Python介绍

Python是一种动态解释性的强类型定义语言,主要应用在云计算,WEB开发,科学运算、人工智能,系统运维和金融等领域。

1、Python的优缺点

优点:

  • 简单,易懂。
  • 开发效率高,Python具有非常强大的第三方库。
  • 高级语言。
  • 可移植性——开源本质。
  • 可扩展性——可以把一段关键代码运行地更快或希望某些算法不公开,可把部分程序用C或C++编写,然后在Python程序中使用。
  • 可嵌入性。

缺点:

  • 速度相对较慢。
  • 代码不能加密。如果项目要求源代码必须是加密的,则不能使用Python。
  • 线程不能利用多CPU问题。

2、Python解释器

当我们编写Python代码时,我们得到的是一个包含python代码的以.py为扩展名的文本文件,要运行代码,就要靠Python解释器来执行.py文件。

以下为几种常用的Python解释器。

  • CPython——使用最广的Python解释器

  • IPython

  • PyPy

  • Jython

  • IronPython

3、Python 2 与 3的区别

In summary : Python 2.x is legacy, Python 3.x is the present and future of the language

Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is under active development and has already seen over five years of stable releases, including version 3.3 in 2012, 3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only available by default in Python 3.x.

具体而言,Python 3 相较 2 的优势体现在 3 支持 Unicode support,也就是说,在Python 3 中不必再为繁杂的字符编码而烦恼,例如 3 可以直接写中文!

还有一个不同之处就是某些库在 3 中有了变化,具体如下:

old new
_winreg winreg
             ConfigParser configparser
copy_reg copyreg
Queue queue
SocketServer socketserver
markupbase _markupbase
repr reprlib
test.test_support test.support

二、Hello World程序   

下面演示用Python编写helloworld程序,这里我使用的开发工具是pycharm。   

1 __author__ = 'Sunny Han'
2 print("Hello World!")

由此可见Python的简洁明了。

 

三、变量\字符编码 

1、变量——为了存放东西以便之后的调用

eg: 

name="han shuo"

 

这里的name为变量名,han shuo为变量name的值。

变量定义应遵循一定的规则;

  • 变量名只能是字母、下划线或数字的任意组合。
  • 变量的第一个字符不能是数字。
  • 关键字不能充当变量名:'and','as','assert','break','class','continue','def','del','elif','else','except','exec','finally','for','from','global','if','import','in','is','lambda','not','or','pass','print','raise',return','try','while','with','yield'.
  • 定义变量名一定要有一定的含义,尽量不要胡编乱造,比如说这里我们想定义一个变量来代表Jake的年龄,我们写变量名“age_of_Jake”要好过变量名“ageofjake”。

变量的赋值:

eg:

1 name="han shuo"
2 print("my name is",name)
3 name2=name
4 print(name2)
5 name="kobe"
6 print(name,name2)

以下为执行后的结果:

my name is han shuo

han shuo
kobe han shuo

 为什么name值改成kobe后name2没有变化呢?这是因为name2指向的是之前name的值“han shuo”,而不是name自身,故name值变化后,name2并不会发生相应的变化。

 注:python中没有常量的概念,若想表示常量,要将变量名全部大写。

        eg:PIE=3.14159

2、字符编码

 python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)。ASCII主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。为了显示中文,程序员设计了用于简体中文的GB2312和用于繁体中文的big5

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

GB2312 支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的 GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

从ASCII、GB2312、GBK 到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

有的中文Windows的缺省内码还是GBK,可以通过GB18030升级包升级到GB18030。不过GB18030相对GBK增加的字符,普通人是很难用到的,通常我们还是用GBK指代中文Windows内码。

 显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多

UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)。

eg:如果是输入以下代码的话,会报错,因为默认的ASCII无法表示中文。

__author__ = 'Sunny Han'
name="你好,世界!"
print(name)

 

 所以此处要告诉Python解释器要用什么编码来执行源代码。如下:
# -*- coding: utf-8 -*-
__author__ = 'Sunny Han'
name="你好,世界!"
print(name)

 这样就能显示出结果了。

注释:

        当行注视:# 被注释内容

  多行注释:""" 被注释内容 """  (三引号)

 四、用户输入

 1、简单输入方法:

 
__author__ = 'Sunny Han'
username=input("username:")
password=input("password:")
print(username,password)

 输入密码时,如果想要不可见,需要利用getpass 模块中的 getpass方法,即:

__author__ = 'Sunny Han'
import getpass
username=input("username:")
password=getpass.getpass("password:")

print(username,password)

 

 2、相对复杂一些的输入输出过程
 eg1:
__author__ = 'Sunny Han'
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")
info='''
 ----------------info of %s-----------
 name:%s
 age:%s
 job:%s
 salary:%s
 '''%(name,name,age,job,salary)
print(info)

 注意这里的age变量默认类型为字符串,假如将 age:%s改为age:%d(即整数类型),之前的age=input("age:")也应改为age=int(input("age:")),即将age变量强制转为整型变量。

具体如下:

name=input("name:")
age=int(input("age:"))
job=input("job:")
salary=input("salary:")
info='''
 ----------------info of %s-----------
 name:%s
 age:%d
 job:%s
 salary:%s
 '''%(name,name,age,job,salary)
print(info)

 

 接下来以同样的例子介绍另一种用户输入的方法,如下:
eg2:
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")


info='''
-----------info of {_name}-----------
Name:{_name}
Age:{_age}
Job:{_job}
Salary:{_salary}
'''.format(_name=name,
       _age=age,_job=job,
       _salary=salary)
print(info)

 eg3:

__author__ = 'Sunny Han'
name=input("name:")
age=input("age:")
job=input("job:")
salary=input("salary:")
info='''
---------info of {0}----------
Name:{0}
Age:{1}
Job:{2}
Salary:{3}
'''.format(name,age,job,salary)
print(info)

 

上例和eg1的执行结果是一样的。

五、if-else语句

 以下举两个例子来说明if-else语句的用法 
1、如何实验判断用户名和密码的正确与否,代码如下:
 
__author__ = 'Sunny Han'
_username="han"
_password="123456"

username=input("username:")
password=input("password:")
if username==_username and password==_password:               #and是“并”的意思,意思是当前后两个条件都成立的时候才成立
    print("Welcom user {name} login...".format(name=username))#在这里换行时会自动缩进,如果手动改成顶格,会报错“IndentationError"缩进错误
else:                                                         #所有代码如果自己的级别就是最高的,比如这里的else,那么就应该顶格写
    print("invalid username or password!")                   

 

 2、如何判断某人年龄代码如下:

__author__ = 'Sunny Han'
age_of_jake=56

guess_age=int(input("guess_age:"))#这里默认输入的类型为字符型变量,故要强制转换字符类型,将其变成整型变量
if guess_age<age_of_jake:
    print("think bigger!")
elif guess_age==age_of_jake:#这里的elif相当于C语言中的elseif
    print("yes,you got it.")
else:                          #尤其要记住在编写代码时,要在所有的if else elif 语句后面加上冒号:
    print("think smaller...")

 

六、循环语句 

 1、while循环语句

(1)先简单举一个while语句的例子,如下:

__author__ = 'Sunny Han'
count=0
while True:
    print("count:",count)
    count +=1
    if count==5:
        break

 代码运行结果如下:

我们可以看到上述代码实现了依次输出0到5的功能。

 

 (2)在之前猜年龄代码的基础上再加一个输入次数的限制,并用while语句实现,如下:
__author__ = 'Sunny Han'
age_of_jake=56
count=0    #计数器
while count<3:
    guess_age=int(input("guess_age:"))
    if guess_age<age_of_jake:
        print("think bigger!")
    elif guess_age==age_of_jake:
        print("yes,you got it.")
        break           #这里的break是结束循环,也就是说即便是没有输入够三次,也会结束循环,不会执行最后一个else语句
    else:
        print("think smaller...")
    count +=1        #相当于count=count+1

else:
    print("you have tried too many times! ")

 这里实现了只允许输入三次的限制,这里要注意break的用法和意义。

 如果说在以上基础上在加入一个环节——是否想继续猜年龄,我们可以进一步优化代码如下:
 
__author__ = 'Sunny Han'
age_of_oldboy=56
count=0
while count<3:
    guess_age=int(input("guess_age:"))
    if guess_age<age_of_oldboy:
        print("think bigger!")
    elif guess_age==age_of_oldboy:
        print("yes,you got it.")
        break
    else:
        print("think smaller...")
    count +=1
    if count==3:
        continue_confirm=input("do you want to keep guessing?")
        if continue_confirm!="n":
            count=0             #这里的令count重新等于0,就是说让代码重新回到其实部分(重新猜)
        else:
            break

 2、for循环语句

 (1)简单示例如下:
__author__ = 'Sunny Han'
for i in range(0,10,2): #这里的0代表起始点,10代表终止点,2代表步长(步长默认为1)
    print("loop",i)     #循环输出0,2,4,6,8

 (2)接下来我们举一个嵌套循环的例子,如下:

 
__author__ = 'Sunny Han'
for i in range(0,10): 
    print("---------",i)
    for j in range(5):        #这里和if else一样,一定记得在for语句后加冒号:
        print(j)

 上述代码实现了每输出一个i,都会输出5个j。

 3、continue语句

 这里我们利用一个简单的for语句,来练习使用continue语句。代码如下:
 
__author__ = 'Sunny Han'
for i in range(0,10):
   if i<5:
     print("loop",i)        #在这里如果i<5,会直接输出i
   else:
      continue              #相应的,当i增加到大于5的话,会执行continue语句,也就是会结束本次循环,而不是全部终止循环
   print("hehe..")

 对上述代码进行调试后发现,即便当i>5时,代码仍会继续进行循环,i=6,7,8,9,10直到走完全部循环。

 但若将这里的continue改为break,从调试结果中我们就很明显能看到当执行到i大于等于5时,就直接跳出整个循环了,而continue只是跳出本次循环,这就是continue语句和break语句的不同之处。
 
 
 
posted @ 2018-11-20 17:18  Achilles_Heel  阅读(567)  评论(2编辑  收藏  举报