• 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个数字。

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

     
  • 相关阅读:
    Asp.net 文件下载,中文文件名出现乱码
    存储过程中执行动态Sql语句
    SQLServer : EXEC和sp_executesql的区别
    C# 从服务器下载文件代码
    在windows 7 上为 sqlserver 2008 启用远程访问
    数字求和
    大道至简第一章读后感
    作业
    SharePoint2013 App 开发中 自定义网站栏,内容类型,列表。
    SharePoint2013 App开发模式
  • 原文地址:https://www.cnblogs.com/dingtou00/p/6554777.html
Copyright © 2020-2023  润新知