Pyhton 入门学习第一部分:简介、字符编码、用户输入以及循环语句

声明:本文章是基于老男孩IT教育中Alex老师所上的课程的总结,所用内容全部引用自于Alex老师的课程以及他的博客http://www.cnblogs.com/alex3714/  在此十分感谢Alex老师的精彩课程,能够让我这个小白走上Python的学习道路。

一、Python简介

1、Pyhton起源

   python的创始人为吉多·范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多·范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。

2、Python的语言特点

    python是一门动态解释型的强类型定义语言。

   动态类型语言:在运行期间才会做数据类型检查的语言。

   解释型语言:不会提前将所有代码转化成机器语言再来执行,而是在程序要执行到某一条命令的时候,通过解释程序把源代码转化成二进制代码来执行。解释一条,执行一条,解释一条,执行一条...(事实上,在编译型语言和解释型语言方面,两者的界限在一些新兴的语言上面体现的越来越模糊。比如JAVA,它在执行程序之前会进行一次预编译,生成介于机器码和JAVA源代码之间的中介代码,再比如说C#,会先生成net代码,然后由net解释系统来执行)

    特点:兼容性好,速度要比编译型语言慢一些

 强类型定义语言:强制数据类型定义语言。一个变量,元旦指定了某个数据类型,那么如果不经过强制的数据类型的转化,那么数据类型就永远不会改变。

  特点:速度稍慢,但是严谨性高

3、Python的用途

云计算、WEB开发、科学运算、人工智能、系统运维、警容、图形GUI等

4、Python的优缺点

   优点:1)简单易懂,易入门,易深入。

           2)开发效率高,主要是由于有强大的第三方库,可以直接下载调用。

           3)可移植性:经过改动,python能够被移植到其他许多平台上工作。

           4)可扩展性:可以把部分程序用C/C++程序进行编写,然后再Python当中使用它。

           5)可嵌入性:可以把Python嵌入C++程序,从而向程序用户提供脚本功能。

   缺点:1)速度慢。相对C语言和JAVA而言,而速度相差其实是在零点几秒左右。

           2)本身是解释型语言,代码是不能加密的,都是以明文形式存放的。

           3)线程不能利用多CPU问题??#我也不太懂其实。

5、关于python2和3系列

   当2008年推出Python3时候,发现和原来的Python2系列是不兼容的,这就意味着如果要升级成Python3,之前使用Python2的平台需要对几乎所有的代码进行重新调整,因此为了过渡,就有了一个Python2.6的过渡版本。可能现在使用比较广泛的还是Python2的版本,但是Python官方也发表声明了,Python2.7最多只会支持到2020年,并且不会再有新的Python2.8的版本推出了希望用户尽可能的转移到Python3.4+系列。到目前为止,已经是Python3.6了。

6、简介之后是进入正式的学习,在这之前要有一个仪式。老男孩IT教育的Alex老师告诉我们,学习每种语言都需要有这么一个仪式,就是如下:

1 print("hello world!"

二、变量和字符编码

1、变量定义:用于储存结果并且方便后期调用的这么一个东西。

2、在Python2当中呢在使用变量之前需要对变量进行声明。但在python3当中就不用了。直接赋值就行。

3、变量名的赋值:

1 name=("dingtou")
2 name2=name
3 print(name2,name)

 4、变量的命名规则

    1)变量只能是字母、数字或下划线的任意组合(不能有空格和特殊字符)

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

    3)以下关键字为程序的保留字段,不能声明为变量名:

         ['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']

    4)变量命名要尽量一目了然,用一些单词什么的,不要随意找些字母。复杂的话可以通过添加下划线来解决,比如:gf_of_oldboy;常量的变量名要全部大写:PIE=

5、字符编码

   1)关于二进制

        电脑的运行缩小到最小的层次,实际上是电路,那么电路最后接收到的消息实际上是只有两种:通电和不通电,也就是我们常说的0和1.

   Alex老师用了很形象的烽火台的例子进行了解释。一根烟可以表示两种情况,点上表示1个敌人,不点表示没有敌人;两根烟表示三种情况,00表示没有敌人,10表示1个敌人,01表示两个敌人,11表示3个敌人;当来了3个以上敌人时再加一根烟,000、100、010、110、001、101、011、111分别表示0~7个敌人,以此类推,二进制就是如图所示。

128 64 32 16 8 4 2 1
1 1 1 1 1 1 1 1

那么一共能有2^8种情况。例如随意挑一个数字,213,则可以表示为:11010101

2)关于ASCII码

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

ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

  ASCII码的开发者最初用了127个,剩下的128—255个用于其他国家的语言,但是呢中文不够用,于是之前开发者留下的这块空地呢就用来建立了一个索引,通过索引至另外的表,对整个内容进行了进一步的扩展。

3)中文字符编码的发展史

   

1980年 GB2312 7445个字符
1995年 GBK 218886
2000年 GB18030 27484
WINDOWs平台必须支持GB18030
手机、MP3等一般只支持GB2312
从ASCII一次向下兼容
为了统一各个国家
Unicode 在计算机上用的字符编码
 
ASCII 一个字符占一个字节 8个比特位 1bytes
Unicode 一个字符统一占2个字节 2bytes
可动态变化长度的字符编码集:所用英文字符用UTF-8 存英文 以ASCII码存 占1个字节
中文 Unicode 3个字节
4)关于Unicode
   

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

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

python3 的字符集默认支持中文!!所以不用做上述改正。!!UTF-8
 
三、用户输入
1、关于注释
    1)单行注释:前面加一个 #
1 #print("hello world!" )

    2)多行注释,'''被注释内容'''

1 '''
2 name=("dingtou")
3 name2=name
4 print(name2,name)
5 '''

   3)多说一点

     上面这个两个'''除了用来表示多行注释,还能进行多行打印。比如

   

1 msg='''
2 name=("dingtou")
3 name2=name
4 print(name2,name)
5 '''
6 print(msg)

2、多字符串输出

   1)%s的使用

      

 1 name=input("name:")
 2 job=input("job:")
 3 salary=input("salary:")
 4 info='''
 5 ---------info of %s-----------
 6 name:%s
 7 job:%s
 8 salary:%s
 9 '''%(name,name,job,salary)
10 print(info)

上述代码中,通过%s可以实现输入内容的同一打印。其中,%s代表只接受字符串string

%d代表只能接受数字--》可用于帮助检测输入的数据类型

%f表示浮点。

那么问题来了,我们多加一栏age,为了保证age栏输入的确实是数字,可以加上%d(第9行所示)

 1 name=input("name:")
 2 job=input("job:")
 3 age=input("age:")
 4 salary=input("salary:")
 5 info='''
 6 ---------info of %s-----------
 7 name:%s
 8 job:%s
 9 age:%d
10 salary:%s
11 '''%(name,name,job,age,salary)
12 print(info)

当运行上面的代码时,最后的结果是TypeError: %d format: a number is required, not str

  原因在于,前面age处默认输入的格式就是字符串,可以通过代码

1 print(type(age))

来打印数据类型。所以为了保证输入的确实是整数,我们需要对数据进行强制的格式化。

1 age=int(input("age:"))

这样就可以了。

2)format的使用

   

 1 name=input("name:")
 2 job=input("job:")
 3 age=int(input("age:"))
 4 salary=input("salary:")
 5 info2='''
 6 ---------info of {_name}-----------
 7 name:{_name}
 8 job:{_job}
 9 age:{_age}
10 salary:{_salary}
11 '''.format(_name=name, _job=job,_age=age,  _salary=salary)
12 print(info2)

一种如上述代码所示,要注意的是与之前的%s不同,这里边倒数第二行,format前面是要有个.的。还有一种通过format的实现方法,如下图所示:只要按顺序写就好了。

 1 name=input("name:")
 2 job=input("job:")
 3 age=int(input("age:"))
 4 salary=input("salary:")
 5 info3='''
 6 ---------info of {0}-----------
 7 name:{1}
 8 job:{2}
 9 age:{3}
10 salary:{4}
11 '''.format(name,name,job,age,salary)
12 print(info3)

但是呢这个用了1、2、3来表示,容易搞乱,所以不太建议用这个。

3、非明文密码的输入

  如果想要保证输入密码的时候是不显示出来的,可以调用python里边的getpass模块。

1 import getpass
2 username=input("username:")
3 password=getpass.getpass("password:")
4 print(username,password)

但是呢这个在Pycharm里边是运行不了的,只能在python当中运行。

四、表达式if...else...

  1、密码和用户名匹配的输入

 1 _username='dingrenpeng'
 2 _password='abc123'
 3 username=input("username:")
 5 password=input("password:")
 7 if _username==username and _password==password:
 8     print("Welcome user {name} to log in...".format(name=username))
 9 else:
10     print("invalid username or password")
几个注意点:
1)先赋值储存
2)if后边一定要加: else后边也一定要加:
3)if 和后边的print属于母程序和子程序的关系,自动会缩进
4)除了上述关系,其余的都需要顶!d=====( ̄▽ ̄*)b格写。
5)format前面要是句号.而不是逗号,
6)=是用来赋值的,==两个等号在一起是等于
7)如果出现IndentationError,那么就是缩进错误。
2、猜年龄
   
 1 # Author DingRenpeng
 2 age_of_oldboy=64
 3 print(type(age_of_oldboy))
 4 guess_age=int(input("guess age:"))
 5 if guess_age==age_of_oldboy:
 6     print("Bingo!")
 7 elif guess_age>age_of_oldboy:
 8     print("younger~~")
 9 else:
10     print("elder")

这里边用到了elif(就是else if),这就设置了三种情况。

另外要注意,默认input输入的都是字符串,需要转化成数字。

另外,=用于赋值,==才是等于。

 

五、循环语句

1、while loop

  1)最基本的

1 # Author DingRenpeng
2 count=0
3 while True:
4     print("count:",count)
5     count+=1# count=count+1
6     if count==1001:
7         break 

上述程序通过while进行循环,利用count来进行计数,当count到1001,也就是循环了1001次的时候退出循环,Break就是退出循环用的。

  2)回到那个猜年龄的游戏

 1 age_of_oldboy=64
 2 count=0
 3 while True:
 4     if count==3:
 5         print("you have been lost!")
 6         break
 7     count=count+1
 8     guess_age=int(input("guess age:"))
 9     if guess_age==age_of_oldboy:
10         print("Bingo!count:",count)
11 
12     elif guess_age>age_of_oldboy:
13         print("younger~~count:",count)
14     else:
15         print("elder~~count:",count)

通过添加高亮的那段程序,能够实现:只能猜3次,如果3次还猜不中,退出。

实际上上面那段是有问题的。因为那一行应该放在后边,否则第3次即使猜对了,也会显示说:You have been lost!。所以正确的应该是下边,而且不用while true,直接设定,while count<3

 1 # Author DingRenpeng
 2 age_of_oldboy=64
 3 count=0
 4 while count<3:
 5     guess_age=int(input("guess age:"))
 6     if guess_age==age_of_oldboy:
 7         print("Bingo!")
 8         break
 9     elif guess_age>age_of_oldboy:
10         print("younger~~")
11     else:
12         print("elder~~")
13     count=count+1
14 else:#这里有个简便方法
15    print("You have been lost,fuck off...")

while..else一气呵成。

2、for loop

1 for i in range(1,10,2):
2     print("loop",i)

1,10表示数字范围,2表示数字间隔。

如果上述while循环用for来替代,那么就不用count来计数了。

3.关于任意玩

还是那个猜年龄的游戏,若果想要说3次之后问问人家,还要不要继续猜,想要的话继续,不想要的话退出,那就要可以把count清零。

 1 age_of_oldboy=64
 2 count=0
 3 while count<3:
 4     guess_age=int(input("guess age:"))
 5     if guess_age==age_of_oldboy:
 6         print("Bingo!")
 7         break
 8     elif guess_age>age_of_oldboy:
 9         print("younger~~")
10     else:
11         print("elder~~")
12     count=count+1
13     if count==3:
14         contine_to_play=input("Do you want to keep trying?")
15         if contine_to_play!='n':
16             count=0
17 #如果想要继续,则count会清零。  另外只要按回车就能继续,这个很有意思,很巧妙。还有不等于:用!=表示。
18         else:
19             break
4、关于continue语句
continue:跳出本次循环,进入下一次循环
break:结束整个循环
1 for i in range(0,10):
2     if i<3:
3         print("loop",i)
4     else:
5         continue
6     print("YO!")

要注意,continue是不会结束=整个循环的。

5、关于循环套循环

1 for i in range(0,10):
2     print("------------",i)
3     for j in range(10):
4        print(j)
5        if j>5:
6            break

如果运行上述代码,则能够实现两层循环,共能打印10*6=60个数字。

以上就是第一部分的全部内容了。还会有其他的话会继续补充。

 

 

 
posted @ 2017-03-15 20:06  丁头零零  阅读(362)  评论(0编辑  收藏  举报