zoukankan      html  css  js  c++  java
  • 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个数字。

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

     
  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/dingtou00/p/6554777.html
Copyright © 2011-2022 走看看