zoukankan      html  css  js  c++  java
  • Python学习-01-初始Python

    Python基础知识总结

    一、前期

    1.1解释型语言和编译型语言

    编译型语言在程序执行之前,有一个单独的编译过程,将程序翻译成机器语言,以后执行这个程序的时候,就不用再进行翻译了。

    解释型语言,是在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。

    C/C++ 等都是编译型语言,而Java,C#,Python等都是解释型语言。

    1.2动态类型语言和静态类型语言

    动态类型语言:指在运行期间才去做数据类型检查的语言。在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python,Ruby,shell等就是一种典型的动态类型语言。

    静态类型语言:它的数据类型是在编译期间检查的。在写程序时,要声明所有变量的数据类型。C/C++是静态类型语言的典型,其他的还有C#,JAVA等。

    1.3强类型定义语言和弱类型定义语言

    强类型定义语言:如果一个变量被指定了某个数据类型,如果不经过强制转换,那么它就永远是这个数据类型了。举个例子:如果你定义了一个整型变量a,那么程序根本不可能将a当做字符串类型处理。除非,你强制性的改变它的类型。强类型定义语言是类型安全的语言。如C、Python。

    弱类型定于语言:数据类型可以被忽略的语言,与强类型定义语言相反,一个变量可以赋予不同数据类型的值。如shell。

    强类型定义语言在速度上可能略逊于弱类型定义语言,但是强类型定于语言具有严谨性,能够有效的避免许多错误。

    二、Python历史、优缺点、解释器

    2.1历史

             1989年,为了打发圣诞节假期,Guido开始写Python语言的编译器。Python这个名字,来自Guido所挚爱的电视剧 Monty Python’s Flying Circus。他希望这个新的叫做Python的语言能符合他的理想:创造一种C和shell之间,功能全面,易学易用,可拓展的语言。

             1991年,第一个Python编译器诞生。它是用C语言实现的,并能够调用C语言的库文件。从一出生,Python已经具有:类,函数,异常处理,包含表和词典在内的核心数据类型,以及模块为基础的拓展系统。

             Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.

    1999年 Python的web框架之祖——Zope 1发布

    Python 2.0 - 2000/10/16,加入了内存回收机制,构成了现在Python语言框架的基础

    Python 2.4 – 2004/11/30, 同年目前最流行的WEB框架Django 诞生

    Python 2.5 - 2006/09/19

    Python 2.6 - 2008/10/1

    Python 2.7 - 2010/07/03

    Python 3.0 - 2008/12/03

    Python 3.1 - 2009/06/27

    Python 3.2 - 2011/02/20

    Python 3.3 - 2012/09/29

    Python 3.4 - 2014/03/16

    Python 3.5 - 2015/09/13

    Python 3.6 2016/12/23

    2014年11月,Python2.7将在2020年停止支持的消息被发布,并且不会在发布2.8版本,建议用户尽可能的迁移到3.4+    Python最初发布时,在设计上有一些缺陷,比如Unicode标准晚于Python出现,所以一直以来对Unicode的支持并不完全,而ASCII编码支持的字符有限。例:对中文支持不好Python3相对Python早期的版本是一个较大的升级,Py3在设计的时候没有考虑向下兼容,所以很多早期版本的Python的程序无法再Py3上运行。为了照顾早期的版本,推出过渡版本2.6——基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数。2010年继续推出了兼容版本2.7,大量Python3的特性被反向迁移到了Python2.7,2.7比2.6进步非常多,同时拥有大量3中的特性和库,并且照顾了原有的Python开发人群。

    2.2 Python2还是Python3?

    py2.7是2.x系列的最后一个版本,已经停止开发,不再增加新功能。2020年终止支持。所有的最新的标准库的更新改进,只会在3.x的版本里出现。Guido决定清理Python2.x ,并且不再兼容旧版本。

    最大的一个改变就是使用Unicode作为默认编码。Pyhton2.x中直接写中文会报错,Python3中可以直接写中文了。从开源项目看,支持py3的比例已经大大提高,知名的项目一般都支持py2.7和py3+。

    py3比py2更规范统一、去掉了没必要的关键字Python3.x还在持续改进。

        所以推荐大家使用Python3.x。

    2.3Python 解释器

             当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件。要运行代码,就需要Python解释器去执行.py文件。由于整个Python语言从规范到解释器都是开源的,所以理论上,只要水平够高,任何人都可以编写Python解释器来执行Python代码(当然难度很大)。事实上,确实存在多种Python解释器。

    CPython:这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。也是按照Python后,默认的解释器。

    IPython:是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。

    PyPy:是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术,对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。

    Jython:是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

    IronPython:IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

    小结:Python的解释器很多,但使用最广泛的还是CPython。如果要和Java或.Net平台交互,最好的办法不是用Jython或IronPython,而是通过网络调用来交互,确保各程序之间的独立性。

    2.4Python的优缺点

    2.4.1优点

             1)Python的定位是“优雅”“明确”“简单”,所以Python程序看上去总是简单易懂,初学者学Python,不但入门容易,而且将来深入下去,可以编写那些非常复杂的程序。

             2)开发效率非常高,Python有非常强大的第三方库,基本上你想通过计算机实现任何功能,Python官方库里都有相应的模块进行支持,直接下载调用后,在基础库的基础上在进行二次开发,大大降低开发周期,避免重复。

             3)高级语言,当你用Python语言编写程序的时候,你无需考虑如何管理你的程序使用的内存一类的底层细节。

             4)可移植性,由于它的开源本质,Python已经被移植在许多平台。如果在编程中,小心地避免使用依赖于系统的特性,那么你的所有Python程序无需修改就几乎可以在市场上所有的系统平台上运行。

             5)可扩展性,如果你需要你的一段关键代码运行的更快或者希望某些算法不公开,你可以把你的部分程序用C或者C++编写,然后在你的Python程序中使用它们。

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

    2.4.2缺点

    1)速度慢,Python的运行速度相比于C和JAVA要慢。一般执行速度,比C慢10倍。

    2)代码不能加密,Python是解释性语言,它的源码都是以明文形式存放的,如果要加密,就不要用Python实现。

    3)线程不能利用多CPU问题,即Python的多线程不能利用多核优势。一个Python解释器进程内只有一条主线程,以及多条用户程序的执行线程。即使在多核CPU上,由于Python的GIL(全局解释器锁,Global interpreter Lock)的存在,也禁止多线程的并行执行。

    2.5Python安装

    2.5.1下载安装包

    https://www.python.org/downloads/release/python-361/

    2.5.2安装

    直接安装,python3.6会自动给我们添加路径

    2.5.3 安装pycharm5.0.3

    2.5.4破解pycharm5.0.3

    https://jingyan.baidu.com/article/455a9950baf5bea167277877.html 百度经验

    2.5.5汉化pycharm5.0.3

    http://www.sd173.com/html/3458.html

    三、python的基本语法

    3.1变量与字符编码

             什么是变量,变量的功能?变量用来存东西的,Python属于动态类型语言,直接使用就可以了,无需申请。

             变量赋值,比如a=1,就定义了变量a,并且给a赋值为1

             变量命名规则:

    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,ralse,return,try,while,with,yield.

    常量,一般用大写字母表示。但是Python中没法定义常量。

    变量a=变量b,表示a和b都指在同一个空间,修改变量a的值,不会影响变量b的值。

    字符编码:

    最开始:ASCII  255  占用1字节

    1980年,GB2312,表示7000多个中文字符

    1995年,GBK1.0,表示20000+中文字符

    2000年,GB18030,表示27000+中文字符

    Unicode,2个字节

    Utf-8,英文1个字节,中文三个字节

    Python2,默认不支持中文,使用需添加:#-*-coding: utf-8 -*-

    Python3默认支持中文。

    注释:当行注释#;

          多行注释:”””注释内容”””(Python中,单引号和双引号含义一样)

    3.2输入输出

    3.2.1输入

             Python的输入,用的input()函数。默认输入的都是字符串。

             name=input(“what is your name?”)

    其中“”之间的为提示内容。

    如果你想让输入的是整形数据,就需要用强制性类型转换。

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

    再输入时候,我们可能会遇到输入密码的情况,那么如何隐藏输入内容呢?

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

    3.2.2输出

    Python 输出,用的是print()函数。

    #格式化输出:方法1:
    name=input("what is your name?")
    age=int(input("age:"))
    job=input("job:")
    salary = input("salary:")
    info='''
    -------info of %s  ---------
    Name:%s
    Age :%d
    Job :%s
    Salary: %s
    ''' %(name,name,age,job,salary)
    print(info)
    #格式化输入方法2:
    name=input("what is your name?")
    age=int(input("age:"))
    job=input("job:")
    salary = input("salary:")
    info2='''
    -------info of {_name} ---------
    Name:{_name}
    Age :{_age}
    Job :{_job}
    Salary: {_salary}
    ''' .format(_name=name,
                _age=age,
                _job=job,
                _salary=salary)
    print(info2)
    #格式化输出,方法3
    name=input("what is your name?")
    age=int(input("age:"))
    job=input("job:")
    salary = input("salary:")
    info3='''
    -------info of {0} ---------
    Name:{0}
    Age :{1}
    Job :{2}
    Salary: {3}
    ''' .format(name,age,job,salary)
    print(info3)

    3.3分支

    Python中分支语句需要注意的事情:用缩进代替括号  强制 缩进,省掉格式符,清晰,所有代码都要顶格写。

    使用时候:注意冒号“:”。

    """
    #分支结构 
    单分支结构
    双分支结构
    if 条件:
        语句
    else:
        语句
    多分支:
    if 条件:
        语句
    elif 条件:
        语句
    elif ……
    
    else:
        语句
        
    分支的嵌套:
    if  条件:
        语句
        if 条件:
            语句
    else:
        语句
    """
    分支的结构

    1)、if …else 语法格式举例

    求两个数的最大值

    a=int(input("请输入一个整数:"))
    b=int(input("请输入一个整数"))
    if a>b:
        print(a)
    else:
        print(b)
    

      

    if elif  else 语法格式

    a=int(input("请输入一个整数:"))
    b=int(input("请输入一个整数:"))
    c=int(input("请输入一个整数:"))
    if b <= a >= c:    #   b>=a>=c and c>=a>=b
        print(a)
    elif a <= b >= c:
        print(b)
    else:
        print(c)
    求三个数的最大值
    #猜数字
    #随机生成一个数(1-100),输入一个数,如果是5,
    # 输出猜对了 ,如果猜小了,就输出猜小了,
    # 如果猜大了,就输出猜大了
    from random import randint
    a=randint(1,100)
    b=int(input("请输入一个整数:"))
    if a == b :
        print("猜对了")
    elif b>a:
        print("大了大了。。。。。。")
    else:
        print("小了小了。。。。")
     1 #实现用户登录
     2 import re
     3 import getpass
     4 name=input("Please input username:")
     5 passwd=getpass.getpass("Please input passwd:")
     6 f=open('user.txt')
     7 for line in  f.readlines():
     8     #print(line,end='')
     9     if(name==re.split(":",line)[0]):
    10         if(passwd==re.split(":",line)[1]):
    11             if(1==int(re.split(":",line)[2])):
    12                 print("Welcome,login success!")
    13             else:
    14                 print("The user is locked!")
    15         else:
    16             print("The password is wrong!")
    17 else18      print("The username is not exist!")
    19 
    20 f.close()
    实现用户登录的例子
    1 daxiong:daxiong123:1
    2 zhangsan:zhangsan123:0
    3 lisi:lisi123:0
    4 wangwu:wangwu123:1
    user.txt

    3.4循环

    Python中循环一般使用while和for。循环要注意break语句和continue语句。其中break,表示终止当前循环,continue表示终止本次循环。

    注意:

    """
    #循环结构
    while 条件:
    循环体
    """

    1)while True:(死循环)

    2)条件判断循环:

     1 age_of_oldboy = 56
     2 
     3 count = 0
     4 while count <3:
     5     guess_age = int(input("guess age:") )
     6     if guess_age == age_of_oldboy :
     7         print("yes, you got it. ")
     8         break
     9     elif guess_age > age_of_oldboy:
    10         print("think smaller...")
    11     else:
    12         print("think bigger!")
    13     count +=1
    14     if count == 3:
    15         countine_confirm = input("do you want to keep guessing..?")
    16         if countine_confirm != 'n':
    17             count =0
    18 #代码 源自于老男孩视频
    条件判断循环

      3)while…else语句

      表示while条件不成立,执行else语句。

    while 条件:
    语句
    else:#当条件不满足的时候,执行else语句
    语句

      举例:

      

    age_of_oldboy = 56
    
    count = 0
    while count <3:
        guess_age = int(input("guess age:") )
        if guess_age == age_of_oldboy :
            print("yes, you got it. ")
            break
        elif guess_age > age_of_oldboy:
            print("think smaller...")
        else:
            print("think bigger!")
        count +=1
    else:
        print("you have tried too many times..fuck off")
    #源自于老男孩视频
    while...else

      

      4) for循环

    for 变量 in 取值范围:
    循环体

             首先介绍range()函数,表示生成一个序列。默认步长为1。

      (range(10)= 0 1 2 3 4 5 6 7 8 9)

      range(10)等价于range(0,10,1)

      range(0,10,3)=(0,3,6,9)

      

    1 for i in range(10):
    2     print(i)
    for 循环举例

      5) for…else语句

      for   else  语句 (for循环的语句正常执行完,就会执行else语句)

     1 age_of_oldboy = 56
     2 for i in range(3):
     3     guess_age = int(input("guess age:") )
     4     if guess_age == age_of_oldboy :
     5         print("yes, you got it. ")
     6         break
     7     elif guess_age > age_of_oldboy:
     8         print("think smaller...")
     9     else:
    10         print("think bigger!")
    11 else:
    12     print("you have tried too many times..fuck off")
    13 #代码源自老男孩视频
    for ...else

      6)break,continue的举例

      

    1 for i in range(10):
    2     print('----------',i)
    3     for j in range(10):
    4         print(j)
    5         if j >5:
    6             break
    7             #continue
    8         print(j)

    4作业:实现三级循环:

      

     1 #实现三级菜单,练习break和continue
     2 province={'sichuan':'guangyuan',
     3           'henan':'pingdingshan',
     4           'hebei':'handan'
     5           }
     6 city={'guangyuan':'jiange',
     7       'pingdingshan':'lushan',
     8       'handan':'cixian'
     9     }
    10 country={'jiange':'jianmenguan',
    11          'lushan':'shirenshan',
    12          'cixian':'taihangshan'}
    13 #q表示退出,b表示返回上一级,n表示进入下一级
    14 q='q'
    15 b='b'
    16 n='n'
    17 #循环间的标志,为了结束循环使用
    18 flag=0
    19 while True:
    20     if flag==1:
    21         break
    22     for city1 in province:
    23             print(province[city1])
    24     request=input("Quit?(q)Next?(n)")
    25     if request==q:
    26         break
    27     else:
    28         while True:
    29             if flag == 1 :
    30                 break
    31             for country1 in city:
    32                 print(city[country1])
    33             request1=input("Quit?(q)Next?(n)Back(b)")
    34             if request1==q:
    35                 flag=1
    36                 break
    37             elif request1==b:
    38                break
    39             else:
    40                 for key in country:
    41                     print(country[key])
    42                 request2=input("Quit?(q)Back(b)")
    43                 if request2==b:
    44                     continue
    45                 else:
    46                     flag=1
    47                     break
    三级循环

     5.练习

    1)判断一个年是否是闰年

    year=int(input("请输入一个年份:"))
    if (year%4==0 and year%100!=0) or year%400==0 :
        print(year,"是闰年")
    else:
        print(year,"不是闰年")
    View Code

    2)#给出一个百分制成绩,要求输出成绩等级 A,B,C,D,E。

    # 90分以上为A,80-89分为B,70-79为C,60-69位D,
    # 60分以下为 挂了,如果输入的数据不是0-100,输出错误
    s=int(input())
    if 90<=s<=100:
        print("A")
    elif 80<=s<=89:
        print("B")
    elif 70<=s<=79:
        pring("C")
    elif 60<=s<=69:
        print("D")
    elif 0<=s<60:
        print("挂了")
    else:
        print("输入错误")
    View Code

     3).求一元二次方程的根。

     

    View Code

    4).求1000-2000之间有多少个闰年

    i=1000
    b=0
    while i<=2000:
        if (i%4==0 and i%100!=0) or i%400==0:
            b=b+1
        i=i+1
    print(b)
    View Code

    5)#鸡兔同笼问题,有90只脚,有30个头,求多少只鸡,多少只兔

    x=0
    while x<=30:
        y=30-x
        if 2*x+4*(30-x)==90:
            print(x,y)
        x=x+1
    View Code

    6)#水仙花数100-999,#例如:153=1*1*1+5*5*5+3*3*3

    i=100
    while i<1000:
        ge=i%10
        shi=i//10%10
        bai=i//100
        s=ge**3+shi**3+bai**3
        if s==i:
            print(s)
        i=i+1
    View Code

    7)#猜数字升级版,随机生成一个数(1-20),输入一个数,如果是相等, 输出猜对了 ,程序结束, 如果猜小了,就输出猜小了,继续猜, 如果猜大了,就输出猜大了,继续猜.

    只有三次猜的机会,超过三次,游戏结束
    import random
    a=random.randint(1,20)
    b=int(input("...."))
    i=1
    while b!=a and i<3:
        if a>b:
            print("小了。。。")
            b=int(input("...."))
        else:
            print("大了。。。。")
            b = int(input("...."))
        i=i+1
    else:#b==a
        if a==b:
            print("猜对了")
        else:
            print("次数用完,游戏结束")
    方法一
    import random
    a=random.randint(1,20)
    b=int(input("...."))
    i=1
    while i<3:
        if a>b:
            print("小了。。。")
            b=int(input("...."))
        elif a<b:
            print("大了。。。。")
            b = int(input("...."))
        else:
            print("猜对了")
        i=i+1
    else:
        print("游戏结束")
    方法2

    8)猴子偷桃:

    猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,
    还不瘾,又多吃了一个 第二天早上又将剩下的桃子吃掉一半,
    又多吃了一个。以后每天早上都吃了前一天剩下的一半零一个。
    到第10天早上想再吃时,见只剩下一个桃子了。
    求第一天共摘了多少。
    i=1
    a=1
    while i<10:
        a=(a+1)*2
        i=i+1
    print(a)
    View Code

    9)设计一个验证用户密码程序,用户只有三次机会输入错误!

     1 username="xinan"
     2 password="123456"#123456
     3 i=1
     4 while i<=3:
     5     username1=input("....")
     6     password1=input("..密码")
     7     if username==username1 and password==password1:
     8         print("登录成功")
     9         break
    10     else:
    11         print("用户名和密码不匹配")
    12     i=i+1
    13 else:
    14     print("超过三次,退出")
    View Code

    10)#百钱百鸡,一百钱买一百鸡,小鸡一钱三个,母鸡三钱一个, 公鸡五钱一个,求买了几只小鸡,母鸡,公鸡。

    for x in range(0,100,3):
        for y in range(0,33,1):
            z=100-x-y
            if x/3+3*y+5*z==100 and z>=0:
                print(x,y,z)
    View Code

    11)#有红、黄、绿三种颜色的球,其中红球 3 个, 黄球 3 个,绿球 6 个。 先将这 12 个球混合放在一个盒子中, 从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配。

    #输出情况总数
    i=0
    for red in range(0,4,1):
        for yellow in range(4):
            for green in range(0,7,1):
                if red + yellow + green == 8:
                    print(red,yellow,green)
                    i=i+1
    print(i)
    View Code

    12)#判断一个数是否是素数

    View Code

    13)求两个数的最小公倍数和最大公约数

    14)求1000以内的所有的素数, 要求输出时:每行5个,上下对齐

    
    
    人的痛苦源于对自己无能的愤怒!
  • 相关阅读:
    light oj 1007
    51nod 1298 圆与三角形
    codeforces 899C Dividing the numbers
    zznu 1996 : 正三角形和圆的爱情
    zznu 2081 : 舰队管理
    zzun 2076 : 三花聚顶神功
    zznu 2054 : 油田
    机械设备--第九届省赛--深搜
    设计模式-单例模式、工厂模式
    Spring Boot 遇到空指针
  • 原文地址:https://www.cnblogs.com/cx-ajun/p/7069113.html
Copyright © 2011-2022 走看看