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)
    
  • 相关阅读:
    变量的创建和初始化
    HDU 1114 Piggy-Bank (dp)
    HDU 1421 搬寝室 (dp)
    HDU 2059 龟兔赛跑 (dp)
    HDU 2571 命运 (dp)
    HDU 1574 RP问题 (dp)
    HDU 2577 How to Type (字符串处理)
    HDU 1422 重温世界杯 (dp)
    HDU 2191 珍惜现在,感恩生活 (dp)
    HH实习 acm算法部 1689
  • 原文地址:https://www.cnblogs.com/SleepDragon/p/10304828.html
Copyright © 2011-2022 走看看