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)中文字符编码的发展史
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536,
注:此处说的的是最少2个字节,可能更多
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
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 # 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
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个数字。
以上就是第一部分的全部内容了。还会有其他的话会继续补充。