zoukankan      html  css  js  c++  java
  • Day1

    本节内容

    1、 Python简介 
    2、安装
    3、第一个程序(hello world)
    4、解释器
    5、编程语言的分类
    6、注释
    7、变量
    8、中文的问题
    9、运算
    10、输入/输出
    11、流程控制/if/for/while 
    12、数字+字符串+格式化
     
     
     
    今日目标:
      实现用户登录、三级菜单
     
     

    1、 Python简介

    1.1 python的由来

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

      Python社区的人赋予他“仁慈大君” 的称号,这一称号直接来自英国肥皂剧《Monty Python飞行马戏团》。Guido当初之所以选中Python作为语言的名字,是因为他太喜欢这部肥皂剧了。

          

      

    1.2 python的现状

           
         
     

    1.3 python 的特点

      引用一段《python基础教程》开场白:

      编写C程序就像一群人拿着剃刀在刚打过蜡的舞场内跳快舞

                                                   ------Walidi Ravens

      C++:难学更难用,设计如此

                                                        ------匿名

      在很多方面,Java就是C++ 

                                                  ------Michael Feldman

      现在请看一种前所未有的表演......

                                         ------Monty Python的表演《飞行的马戏团》

     
    任何编程语言都有缺点,Python也不例外:
    第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能直接执行的机器码,所以非常快。
    第二个缺点是,线程不能利用多CPU问题,这是Python被人诟病最多的一个缺点,GIL即全局解释器锁。是计算机程序设计语言解释器用于同步线程的工具,使得任何时刻仅有一个线程在执行,Python的线程是操作系统的原生线程。在Linux上为pthread,在Windows上为Win thread,完全由操作系统调度线程的执行。一个python解释器进程内有一条主线程,以及多条用户程序的执行线程。即使在多核CPU平台上,由于GIL的存在,所以禁止多线程的并行执行。关于这个问题的折衷解决方法,我们在以后线程和进程章节里再进行详细探讨。
    第三个缺点就是代码不能加密。
     

    1.4 Python主要应用领域

    • WEB/客户端 开发: 豆瓣、Youtube 、Quora 、BitTorrent、dropbox 、Gmail、Google Maps
    • 云计算:OpenStack
    • 爬虫:搜索引擎、网站比价、买火车票
    • 游戏: EVE online 、Civilization IV
    • 科学运算、人工智能: 典型库NumPy, SciPy, Matplotlib, Enthought librarys,pandas
    • 系统运维: 运维人员必备语言
    • 金融:量化交易,金融分析,在金融工程领域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作为动态语言的Python,语言结构清晰简单,库丰富,成熟稳定,科学计算和统计分析都很牛逼,生产效率远远高于c,c++,java,尤其擅长策略回测
    • 图形GUI: PyQT, WxPython,TkInter

     

    1.5 Python在一些公司的应用 

    • 谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬虫、Google广告等项目都在大量使用Python开发
    • CIA: 美国中情局网站就是用Python开发的
    • NASA: 美国航天局(NASA)大量使用Python进行数据分析和运算
    • YouTube:世界上最大的视频网站YouTube就是用Python开发的
    • Dropbox:美国最大的在线云存储网站,全部用Python实现,每天网站处理10亿个文件的上传和下载
    • Instagram:美国最大的图片分享社交网站,每天超过3千万张照片被分享,全部用python开发
    • Facebook:大量的基础库均通过Python实现的
    • Redhat: 世界上最流行的Linux发行版本中的yum包管理工具就是用python开发的
    • 豆瓣: 公司几乎所有的业务均是通过Python开发的
    • 知乎: 国内最大的问答社区,通过Python开发(国外Quora)
    • 春雨医生:国内知名的在线医疗网站是用Python开发的
    • 除上面之外,还有搜狐、金山、腾讯、盛大、网易、百度、阿里、淘宝 、土豆、新浪、果壳等公司都在使用Python完成各种各样的任务。

     1.6 如何学好python

    2、Python开发必备环境

       

    2.1 如何获取python

    https://www.python.org/downloads/ 

    2.2 如何安装

    windows:

     

     linux:

    查看默认Python版本
    python -V
      
    1、安装gcc,用于编译Python源码
        yum install gcc
    2、下载源码包,https://www.python.org/ftp/python/
    3、解压并进入源码文件
    4、编译安装
        ./configure
        make all
        make install
    5、查看版本
        /usr/local/bin/python2.7 -V
    6、修改默认Python版本
        mv /usr/bin/python /usr/bin/python2.6
        ln -s /usr/local/bin/python2.7 /usr/bin/python
    7、防止yum执行异常,修改yum使用的Python版本
        vi /usr/bin/yum
        将头部 #!/usr/bin/python 修改为 #!/usr/bin/python2.6
    

    3、第一个python程序 Hello World!

    在什么地方写一个python程序?

    3.1 使用python交互程序

    3.2 使用文件

    windows:

    推荐Notepad++ ,不要用Word和Windows自带的记事本。Word保存的不是纯文本文件,而记事本会自作聪明地在文件开始的地方加上几个特殊字符(UTF-8 BOM),结果会导致程序运行出现莫名其妙的错误!

    linux:

    # vim hello.py
    # python hello.py
    Hello World!

    上一步中执行 python hello.py 时,明确的指出 hello.py 脚本由 python 解释器来执行。

    如果想要类似于执行shell脚本一样执行python脚本,例: ./hello.py ,那么就需要在 hello.py 文件的头部指定解释器,如下:

    #!/usr/bin/env python
    #The first code
    print "hello,world"

    ps:执行前需给予 hello.py 执行权限,chmod 755 hello.py

    解释器:

    Python在执行时,解释器会将.py文件中的源代码编译成Python的byte code(字节码),然后再执行这些编译好的byte code。

    对比下其它语言的hello world

     C++
     C
     JAVA
     PHP
     RUBY
     Go

    3.3 使用IDE---pycharm(windows)

    补充知识:编译型语言和解释型语言

    编译型语言

    需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。

    优点:编译器一般会有预编译的过程对代码进行优化。 因为编译只做一次,运行时不需要编译,所以编译型语言的程序执行效率高 。可以脱离语言环境独立运行。

    缺点:编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,不同的操作系统之间移植就会有问题,需要根据运行的操作系统环境编译不同的可执行文件。

    代表语言:C、C++、 Pascal、Object-C以及最近很火的苹果新语言swift

    解释型语言

    解释性语言的程序不需要编译,相比编译型语言省了道工序,解释性语言在运行程序的时候才逐行翻译。

    优点:有良好的平台兼容性,在任何环境中都可以运行,前提是安装了解释器(虚拟机)。灵活,修改代码的时候直接修改就可以,可以快速部署,不用停机维护。

    缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

    代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby

    混合型语言

    既然编译型和解释型各有缺点就会有人想到把两种类型整合起来,取其精华去其糟粕。就出现了半编译型语言。比如C#,C#在编译的时候不是直接编译成机器码而是中间码,.NET平台提供了中间语言运行库运行中间码,中间语言运行库类似于Java虚拟机。我个人认为抛开一切的偏见C#是这个星球上最好的编程语言。可惜微软的政策限制了C#的推广。

    Java先生成字节码再在Java虚拟机中解释执行。

    严格来说混合型语言也属于解释型语言。

     

    4、注释

      单行注视:#  被注释内容

      多行注释:""" 被注释内容 """

    # 井号可以注释单行代码
    """
    3个双引号或者单引号
    可以注释多行内容
    """
    

      

    5、变量和数据类型  

    变量可以用来存储数据和被程序调用,它由名字和值两部分组成,可以把它想象成一个容器,容器的名字和值会被保存在内存中。

    #_*_coding:utf-8_*_
     
    name = "Alex Li"    
    age = 18
    sales = 4432.67 / 1.20   
    

      

     

    变量定义的规则:

    • 变量名只能是 字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
      ['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']
    变量的赋值
    name = "Alex Li"
     
    name2 = name
    print(name,name2)
     
    name = "Jack"
     
    print("What is the value of name2 now?")
    

      

    6、输入/输出

    输出:

    在print()括号中加上字符串,就可以向屏幕上输出指定的文字。

    print('hello, python')  

    print()函数也可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出:

    name = “france”
    print(“my name is :”,name)  

    print()会依次打印每个字符串,遇到逗号“,”会输出一个空格。

    输入:

    Python提供了一个input(),可以让用户输入字符串

    7、中文的问题

    #!/usr/bin/env python
      
    print "你好,世界"
    

     
    错误原因:python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ASCII码),但ASCII不支持中文。

    字符编码:

     字符编码英语:Character encoding)、字集码是把字符集中的字符编码为指定集合中某一对象(例如:比特模式、自然数序列8位组或者电脉冲),以便文本计算机中存储和通过通信网络的传递。常见的例子包括将拉丁字母表编码成摩斯电码ASCII。其中,ASCII将字母、数字和其它符号编号,并用7比特二进制来表示这个整数。通常会额外使用一个扩充的比特,以便于以1个字节的方式存储。

    ASCII

     ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。ASCII规范标准在1967发表,最后一次更新则是在1986年。至今为止共定义了128个字符。

    GB2312/GBK/GB18030 

    GB 2312 是中国国家标准简体中文字符集,全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局在1981年发布实施。GB 2312标准共收录6763个汉字。

    GBK即汉字内码扩展规范。共收入21886个汉字和图形符号。

    GB 18030与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。

    各国语言编码

    http://blog.csdn.net/miqi770/article/details/43935273

    Unicode

    Unicode(中文万国码、国际码、统一码、单一码)是计算机科学领域里的一项业界标准。它对世界上大部分的文字系统进行了整理、编码,使得电脑可以用更为简单的方式来呈现和处理文字。

    Unicode伴随着通用字符集的标准而发展,同时也以书本的形式[1]对外发表。Unicode至今仍在不断增修,每个新版本都加入更多新的字符。目前最新的版本为2016年6月21日公布的9.0.0[2],已经收入超过十万个字符(第十万个字符在2005年获采纳)。Unicode涵盖的数据除了视觉上的字形、编码方法、标准的字符编码外,还包含了字符特性,如大小写字母。

    UTF-8

    UTF-88-bit Unicode Transformation Format)是一种针对Unicode的可变长度字符编码,也是一种前缀码。它可以用来表示Unicode标准中的任何字符,且其编码中的第一个字节仍与ASCII兼容,这使得原来处理ASCII字符的软件无须或只须做少部分修改,即可继续使用。因此,它逐渐成为电子邮件网页及其他存储或发送文字的应用中,优先采用的编码。

    UTF-8使用一至六个字节为每个字符编码(尽管如此,2003年11月UTF-8被RFC 3629重新规范,只能使用原来Unicode定义的区域,U+0000到U+10FFFF,也就是说最多四个字节)

    改正:应该显示的告诉python解释器,用什么编码来执行源代码,即:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
      
    print "你好,世界" 

     

    8、流程控制之if ... else

    场景一、用户登陆验证

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    # 提示输入用户名和密码
      
    # 验证用户名和密码
    #     如果错误,则输出用户名或密码错误
    #     如果成功,则输出 欢迎,XXX!
     
     
    #!/usr/bin/env python
    # -*- coding: encoding -*-
      
    import getpass
      
      
    name = raw_input('请输入用户名:')
    pwd = getpass.getpass('请输入密码:')
      
    if name == "alex" and pwd == "cmd":
        print("欢迎,alex!")
    else:
        print("用户名和密码错误")

    场景二、猜年龄游戏

    在程序里设定好你的年龄,然后启动程序让用户猜测,用户输入后,根据他的输入提示用户输入的是否正确,如果错误,提示是猜大了还是小了

      

    外层变量,可以被内层代码使用
    内层变量,不应被外层代码使用

    12、表达式for loop

    最简单的循环10次

    1
    2
    3
    4
    5
    6
    #_*_coding:utf-8_*_
    __author__ = 'Alex Li'
     
     
    for in range(10):
        print("loop:", i )

    输出:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    loop: 0
    loop: 1
    loop: 2
    loop: 3
    loop: 4
    loop: 5
    loop: 6
    loop: 7
    loop: 8
    loop: 9

    需求一:还是上面的程序,但是遇到小于5的循环次数就不走了,直接跳入下一次循环

    1
    2
    3
    4
    for in range(10):
        if i<5:
            continue #不往下走了,直接进入下一次loop
        print("loop:", i )

    需求二:还是上面的程序,但是遇到大于5的循环次数就不走了,直接退出

    1
    2
    3
    4
    for in range(10):
        if i>5:
            break #不往下走了,直接跳出整个loop
        print("loop:", i )

    13、while loop   

     有一种循环叫死循环,一经触发,就运行个天荒地老、海枯石烂。

    海枯石烂代码

    1
    2
    3
    4
    5
    count = 0
    while True:
        print("你是风儿我是沙,缠缠绵绵到天涯...",count)
        count +=1
        

    其实除了时间,没有什么是永恒的,死loop还是少写为好 

    上面的代码循环100次就退出吧

    回到上面for 循环的例子,如何实现让用户不断的猜年龄,但只给最多3次机会,再猜不对就退出程序。

      

      

    作业一:博客

    作业二:编写登陆接口

    • 输入用户名密码
    • 认证成功后显示欢迎信息
    • 输错三次后锁定
    作业三:多级菜单
    • 三级菜单
    • 可依次选择进入各子菜单
    • 所需新知识点:列表、字典

     

  • 相关阅读:
    JVM深入理解(四)-内存模型【上】
    JVM深入理解(三)-加载与字节码执行
    JVM深入理解(二)-结构与内存管理
    初级正则表达式
    光弧,高亮
    substr,subString,split,slice,replace的区别
    SpringBoot配置SSLUnable to start ServletWebServerApplicationContext due to multiple ServletWebServerFa
    79:Python开发-sqlmapapi&Tamper&Pocsuite
    76:Python开发-内外网收集Socket&子域名&DNS
    77:Python开发-批量Fofa&POC验证&SRC提取
  • 原文地址:https://www.cnblogs.com/francis818/p/5692358.html
Copyright © 2011-2022 走看看