zoukankan      html  css  js  c++  java
  • Python简介和入门

    Python是一门什么样的语言?

    编译型和解释型

    编译和解释的区别是什么?


      编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的. 这是因为计算机不能直接认识并执行我们写的语句,它只能认识机器语言(是二进制的形式)

    动态语言和静态语言

    动态语言和静态语言的区别是什么?


      动态类型语言:动态类型语言是指在运行期间才去做数据类型检查的语言,也就是说,在用动态类型的语言编程时,永远也不用给任何变量指定数据类型,该语言会在你第一次赋值给变量时,在内部将数据类型记录下来。Python和Ruby就是一种典型的动态类型语言,其他的各种脚本语言如VBScript也多少属于动态类型语言。

      静态类型语言:静态类型语言与动态类型语言刚好相反,它的数据类型是在编译其间检查的,也就是说在写程序时要声明所有变量的数据类型,C/C++是静态类型语言的典型代表,其他的静态类型语言还有C#、JAVA等。

    Python解释器


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

    • CPython
        当我们从Python官方网站下载并安装好Python 2.7后,我们就直接获得了一个官方版本的解释器:CPython。这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。CPython是使用最广的Python解释器。教程的所有代码也都在CPython下执行。

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

    Python安装

    • Windows
    1. 下载安装包 
       https://www.python.org/downloads/
    2. 安装
       默认安装路径:C:\python27
    3、配置环境变量
      【右键计算机】--》【属性】--》【高级系统设置】--》【高级】--》【环境变量】--》【在第二个内容框中找到 变量名为Path的一行,双击】 --> 【Python安装目录追加到变值值中,用;分割】
    

    第一个Python程序

    (venv) C:\Users\win10\PycharmProjects\Py_road>python
    Python 3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> print("Hello World!")
    Hello World!
    
    

    变量

    申明变量

    name = "ZhuYuLiang"
    上述代码声明了一个变量,变量名为: name,变量name的值为:"ZhuYuLiang"

    • 定义规则
    • 变量名只能是 字母、数字或下划线的任意组合
    • 变量名的第一个字符不能是数字
    • 以下关键字不能声明为变量名
      ['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']

    常量
    Python不存在常量,只是使用全部大写的变量名来表示常量

    字符编码

    ASCII(Python2默认)
      python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill)ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。

    ASCII 字符编码表

    Unicode(Python3默认)
      Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16=65536,注:此处说的的是最少2个字节,可能更多 UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...

    注释

    当行注视:# 被注释内容
    多行注释:""" 被注释内容 """
    

    用户交互

    #name = raw_input("What is your name?") #only on python 2.x
    name = input("What is your name?")
    print("Hello " + name )
    输出:"Hello ZhuYuLiang"
    

    格式化输出

    1.字符串拼接

     python中的字符串在C语言中体现为是一个字符数组,每次创建字符串时候需要在内存中开辟一块连续的空,并且一旦需要修改字符串的话,就需要再次开辟空间,万恶的+号每出现一次就会在内从中重新开辟一块空间。

     name='zyl'
     print('My name is '+name+' My job is IT')
     My name is zyl My job is IT  
    

    2.%s,%d,%f

    name = "zyl"
    print "i am %s " % name
    输出: i am zyl
    

    PS: 字符串是 %s;整数 %d;浮点数%f

    3.format

    • 通过关键字

      print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
      #通过字典设置参数
      site = {"name": "菜鸟教程", "url": "www.runoob.com"}
      print("网站名:{name}, 地址 {url}".format(**site))
      #通过列表索引设置参数
      my_list = ['菜鸟教程', 'www.runoob.com']
      print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))  # "0" 是必须的
      

      输出结果为:

      网站名:菜鸟教程, 地址 www.runoob.com
      网站名:菜鸟教程, 地址 www.runoob.com
      网站名:菜鸟教程, 地址 www.runoob.com
      
    • 通过位置

      >>>"{} {}".format("hello", "world")    # 不设置指定位置,按默认顺序
      'hello world'
      >>>"{1} {0}".format("hello", "world")  # 设置指定位置
      'world hello'
      

    if elif else流程判断

    my_age = 28
    user_input = int(input("input your guess num:"))
    if user_input == my_age:
        print("Congratulations, you got it !")
    elif user_input < my_age:
        print("Oops,think bigger!")
    else:
        print("think smaller!")
    

    while 循环

    count = 0
    while True:
        print("1+1=2",count)
        count +=1
    

    else用法

    count = 0
    while count<3:
        print("1+1=2",count)
        count +=1
    else:
        print(count)
    

    正常结束循环后会调用else,如果循环被break掉的话不会调用else。

    for 循环

    for i in range(10):
        print("loop:", i )
    

    步长
    每隔一个数打印一次

    for i in range(0,10,2):
        print("loop:", i )
    

    每日练习

    编写登陆接口

    • 输入用户名密码
    • 认证成功后显示欢迎信息
    • 输错三次后锁定

    代码如下:

    import pickle,os
    
    info={
        'wq':[123456,0],
        'syf':[123456,0],
        'zyl':['zgkm123456.',0]
    }
    def write_file():
        with open('./info.txt','wb') as f:
            f.write(pickle.dumps(info))
            
    def read_file():
        with open('info.txt','rb') as f:
            info=pickle.loads(f.read())
        return info
    
    if not os.path.exists('./info.txt'):write_file()
    
    info=read_file()
    err_info={}
    for i in range(3):
        while True:
            name=input("请输入用户名: ")
            if name.isalpha():
                passwd=input("请输入密码")
                if passwd.isdigit():
                    break
                else:
                    print('请输入数字')
            else:
                print('请输入字母')
    
        if name in info and info[name][0] == int(passwd) and info[name][1] <= 3:
            print('欢迎{}用户'.format(name))
            break
        elif info[name][1] == 3:
            print('用户已被锁定')
            break
        else:
            info[name][1]+=1
            err_info[name]=info[name][1]+1
            continue
    
    for i in err_info:
        if info[i][1] == 3:
            write_file()
    

    多级菜单

    • 三级菜单
    • 可依次选择进入各子菜单

    代码如下:

    city_dict = {'广州': {'天河': ['天河体育馆', '金山大夏'],
                        '越秀': ['越秀公园', '光孝寺'],
                        '番禺': ['长隆欢乐世界', '大夫山']},
                 '深圳': {'福田': ['莲花山', '赛格'],
                        '龙华': ['元山公园', '龙城广场'],
                        '南山': ['世界之窗', '欢乐谷']},
                 '佛山': {'禅城': ['梁园', '孔庙'],
                        '南海': ['千灯湖', '南国桃园'],
                        '顺德': ['清晖园', '西山庙']}}
    
    def judge_index(index):
        if not index.isdigit() or index not in ['0','1','2']:
            print('输入错误,请重试')
            return 'continue'
    
    def list_index(index):
        for i in index:
            for j in i:
                print(j,end=' ')
            print()
    
    
    while True:
        city_index = [(index, key) for index, key in enumerate(city_dict)]
        print('欢迎查询城市信息')
        print('-'*40)
        list_index(city_index)
        get_city=input('请输入索引: ')
        if judge_index(get_city) == 'continue':
            continue
    
        city_index1 = [(index, key) for index, key in enumerate(city_dict[city_index[int(get_city)][1]])]
        while True:
            list_index(city_index1)
            get_city1=input('请输入索引,或按b返回上一级菜单: ')
            if get_city1 == 'b':
                break
            elif judge_index(get_city1) == 'continue':
                continue
    
            city_index2 = [(index, key) for index, key in enumerate(city_dict[city_index[int(get_city)][1]][city_index1[int(get_city1)][1]])]
            while True:
                list_index(city_index2)
                get_city1=input('已到结尾按b返回上一级菜单: ')
                if get_city1 != 'b':
                    print('输入错误,请重新输入!')
                    continue
                break
    

    多级菜单(升级版)

    city_dict = {'华为':{'A系':{'A1':[1000,1100,1200,],'A2':[2000,2100,2200,],'A3':[3000,3100,3200,],},
                     'B系':{'B1':[4000,4200,4400,],'B2':[5000,5200,5400,],'B3':[6000,6200,6400,],},
                     'C系':{'C1':[7000,7300,7600,],'C2':[8000,8300,8600,],'C3':[9000,9300,9600,],},},
               '小米':{'M系':{'M1':[610,630,650,],'M2':[710,730,750,],'M3':[810,830,850,],},
                     'N系':{'N1':[920,950,980,],'N2':[1020,1050,1080,],'N3':[1120,1150,1180],},
                     'L系':{'L1':[1230,1270,1300,],'L2':[1430,1470,1500,],'L3':[1630,1670,1700,],},},
               '魅族':{'X系':{'X1':[599,699,799,],'X2':[699,799,899,],'X3':[799,899,999,],},
                     'Y系':{'Y1':[1099,1199,1299,],'Y2':[1299,1399,1499,],'Y3':[1499,1599,1699,],},
                     'Z系':{'Z1':[2099,2199,2299,],'Z2':[2399,2499,2599,],'Z3':[2699,2799,2899,],},},}
    
    fun_info=[[],[]]
    def print_menu(*args):
        for i in args[0]:print(i)
        if len(fun_info[0]) ==3:print('已经到底了,请返回上一级或退出')
        choice=input('请选择: ')
        if choice == 'b' or (choice == 'q' and len(fun_info[1]) == 0):exit()
        if choice == 'q':
            return fun_info[0].pop()(fun_info[1].pop())
        elif choice in args[0] and len(fun_info[0]) < 3 :
            fun_info[0].append(print_menu);fun_info[1].append(args[0])
            print_menu(args[0][choice])
        else:
            print('输入错误,请重试');print_menu(args[0])
    print_menu(city_dict)
    
  • 相关阅读:
    python接口自动化(二十七) requests-html支持JavaScript渲染页面
    python接口自动化(二十六) requests-html爬虫框架
    python接口自动化(二十五) urlencode编码%E7%94%9F%E6%B4%BB与解码
    python接口自动化(二十四) 参数关联和JSESSIONID(上个接口返回数据作为下个接口请求参数)
    python笔记2--lxml.etree爬取html内容
    python笔记1--lxml.etree解析html
    python接口自动化(二十三) data和json参数传参,怎么区分呢?
    牛客网-用来作弊的药水(快速幂取模)
    牛客网-psd面试(最长公共子序列&回文串)
    牛客网-强迫症的序列(思维)
  • 原文地址:https://www.cnblogs.com/SleepDragon/p/10304828.html
Copyright © 2011-2022 走看看