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)
posted @ 2019-01-22 17:07  SleepDragon  阅读(266)  评论(0编辑  收藏  举报