python

python是什么

  • 一种高级编程语言

  • 一种解释型语言
    • 当运行一个python文件时,速度相较c程序十分缓慢、因为python在运行你的代码在执行时会一行一行地翻译成CPU能理解的机器码,而c语言是提前编译好成为机器码。
    • 但是人一般感觉不大出来。
  • 有大量的第三方库和内置库可以使用
    • 用很少的代码完成复杂的要求
  • 原则
    • “优雅”、“明确”、“简单”
    • 使用c和python开发同一种程序,代码量天差地别。
  • 适合开发什么
    • 想怎么用就怎么用(bushi
    • 网页应用
      • 网站
      • 后台服务
    • 需要使用的脚本文件、小工具等
    • 成为第三方库

python安装

windows

  • 下载安装包
  • 添加到环境变量

linux

  • 一般会自带python2。
  • 查看自己的版本,打开命令行输入
    python --version

  • 如果想安装python3,不要卸载python2,一些系统的命令依赖于python2。
    • 官方更推荐使用python3
    • python3是python的未来
    • 2和3的区别

两种模式

  • 编辑模式
  • 交互模式
    • >>> 输入命令无法保存,即时反馈
    • 命令行
      • windows打开cmd
      • linux ctrl+alt+t
    • IPython
      • 一个强大的交互式shell
      • 行数显示、快捷键、tab代码自动补全、……

pip

  • 是python中的包管理器,该工具提供了对Python 包[第三方库]的查找、下载、安装、卸载的功能。

  • python2.7.9+3.4+版本自带工具。

  • pip install pwntools

基础语法

以下只是一个提纲

数据

  • 整数和浮点数大小没有限制
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
      x = 3
      """
      type是判断对象类型的函数
      """
      print(type(x)) # Prints "<class 'int'>"
      print(x) # Prints "3"
      """
      对于x进行基本的加减乘除等运算
      """
      print(x + 1) # Addition; prints "4"
      print(x  1) # Subtraction; prints "2"
      print(x * 2) # Multiplication; prints "6"
      print(x ** 2) # Exponentiation; prints "9"
      x += 1
      print(x) # Prints "4"
      x *= 2
      print(x) # Prints "8"
      y = 2.5
      print(type(y)) # Prints "<class 'float'>"
      print(y, y + 1, y * 2, y ** 2) # Prints "2.5 3.5 5.0 6.25"
    
      '''
      关于除法
      '''
      num = 3/2
      print(num) #python2:1 python3:1.5   
    
  • boolean
    • 使用 andornot 代替C语言的 &&||
  • 没有指针
  • 字符串
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
      num = 10
      type(str(num)) # convert integer to string
      hello = 'hello' # String literals can use single quotes
      world = "world" # or double quotes; it does not matter.
      print(hello) # Prints "hello"
      print(len(hello)) # String length; prints "5"
      #字符串相加会拼接在一起
      hw = hello + ' ' + world # String concatenation
      print(hw) # prints "hello world"
      #类似C语言的格式化字符串
      hw12 = '%s %s %d' % (hello, world, 12) # sprintf style string formatting
      print(hw12) # prints "hello world 12"
    
    • 格式化字符串
    • 字符串方法
      1
      2
      3
      4
      5
      6
      7
      8
        s = "hello"
        print(s.capitalize()) # 首字母大写
        print(s.upper()) # 将字符串转化为大写
        print(s.rjust(7)) # 以给定的长度向右对齐,prints " hello"
        print(s.center(7)) # 居中对其, 旁边会根据输入的长度留有空格; prints " hello "
        print(s.replace('l', '(ell)')) # 将字符串中所有的l以(ell)代替;
        # prints "he(ell)(ell)o"
        print(' world '.strip()) # 去除多余的空白
      

容器

  • list & tuple
    • list ```python xs = [3, 1, 2] # Create a list print(xs, xs[2]) # Prints “[3, 1, 2] 2” print(xs[‐1]) # 负数下表从列表的末尾开始数起 prints “2” xs[2] = ‘foo’ # list中可以存放不同类型的数据 print(xs) # Prints “[3, 1, ‘foo’]” xs.append(‘bar’) # 向列表中添加元素 print(xs) # Prints “[3, 1, ‘foo’, ‘bar’]” x = xs.pop() # 去除并返回列表末尾元素,此处返回’bar’ print(x, xs) # Prints “bar [3, 1, ‘foo’]” ‘’’ 切片 ‘’’ nums = list(range(5)) # range表示范围,在python3中是个迭代器,使用list转化为列表,会返回 [0,1,2,3,4] print(nums) # Prints “[0, 1, 2, 3, 4]” print(nums[2:4]) # 会获取下标从2到3的元素,返回[2,3] print(nums[2:]) # 若切片第二个参数不填则默认到尾部 print(nums[:2]) # 第一个参数不填则默认从头部开始 print(nums[:]) # 都不填则从头到尾 print(nums[:‐1]) # prints “[0, 1, 2, 3]” print(nums[::2]) # 切片的第三个参数表示间隔 返回[0,2,4] nums[2:4] = [8, 9] # Assign a new sublist to a slice print(nums) # Prints “[0, 1, 8, 9, 4]”

    ’’’ 遍历 ‘’’ animals = [‘cat’, ‘dog’, ‘monkey’] for animal in animals: print(animal)

    nums = [0,1,2,3,4] squares = [x**2 for x in nums] print(squares)

    1
    2
    3
    4
    5
    6
      - tuple
          - 是一个不可变的列表
      ```python
      t = tuple(range(5)) #Prints (0,1,2,3,4)
      #t[0] = 2 trackback 'tuple' object does not support item assignment
      t = ("cat", "mouse")#使用()来表示一个元组
    
  • dist & set
    • set
      • 不存在重复的元素
        1
        2
          nums = list(range(5))*2 # Prints:[0, 1, 2, 3, 4, 0, 1, 2, 3, 4]
          nums = set(nums) # Prints "{0, 1, 2, 3, 4}"
        
    • dist
      • 字典是一种键值对,key(键)与value(值)一一对应,key必须是唯一的。

        如同在学校,你的学号是唯一的(key),通过学号能够获取你的名字(值)
        ```python d = {‘cat’: ‘cute’, ‘dog’: ‘furry’} print(d[‘cat’]) # prints “cute” print(‘cat’ in d) # 检查cat是否在d中有 d[‘fish’] = ‘wet’ # 设置字典值 print(d[‘fish’]) # Prints “wet” # print(d[‘monkey’]) # KeyError: ‘monkey’ not a key of d print(d.get(‘monkey’, ‘N/A’)) # Get an element with a default; prints “N/A” print(d.get(‘fish’, ‘N/A’)) # Get an element with a default; prints “wet” del d[‘fish’] # Remove an element from a dictionary print(d.get(‘fish’, ‘N/A’)) # “fish” is no longer a key; prints “N/A”

    ’’’ 遍历 默认使用key ‘’’ d = {‘person’: 2, ‘cat’: 4, ‘spider’: 8} for animal in d: legs = d[animal] print(‘A %s has %d legs’ % (animal, legs)) # Prints “A person has 2 legs”, “A cat has 4 legs”, “A spider has 8 legs”

    ```

    控制语句

  • 条件语句
    • 没有switch
    • elif
  • 循环语句
    • 没有do{}while()

严格的缩进

  • 组织代码块
  • 代替了C语言中{}的作用
    1
    2
    3
    4
    5
    6
    7
    8
    9
    if value == 5:
      print("Hello Five\n")
      print("This is a number\n")
    elif value == 6:
      print("666\n")
      print("very 666\n")
    else:
      print("Hello World")
      print("nothing\n")
    

    动态语言

  • 静态语言在定义变量时必须指定变量类型。如果赋值的时候类型不匹配就会报错。比如C语言。

  • python可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量。
    • a = 'ABCD'
      python在内存中创造一个字符串ABCD
      创建一个变量a
      把让a指向ABCD

导入库

1
2
3
import time
from pwn import *
import beautifulsoup as bs4

函数

  • 没有main()函数
    没有统一的程序入口,从第一行代码开始运行。

    1
    2
      if __name__ =='__main__':
          pass
    

    当一个.py文件直接运行时,这之下的代码被直接运行。当以模块方式被导入时,则不被运行。

    假如你叫小明. py,在朋友眼中,你是小明(name == ‘小明’);在你自己眼中,你是你自己(name == ‘main’)。

  • 定义

    1
    2
    def func(idx):
      print("=====>{:#d}<=====".format(idx))
    

高级使用姿势

详情教程

今天的题目

  • 求出100到200内的素数
  • 求出斐波拉契数列的前100项
  • 输出一个字符串的最后3个元素,前4个元素,第5个元素之后所有元素以及倒数第24个元素。
    • 字符切片
  • 输入一个数,输出他的二进制,八进制,16进制
  • 从一个文件中读取数据,输出并保存到另一个文件中。
  • 求解1~1000冰雹问题回到1的需要的次数。
  • 获得当前.py文件的路径。
  • 将两个字符串a、b整合成一个列表ls,列表中单索引数据是a,双索引数据是b。

最好会爬虫

  • 也可以在mooc上找到相应的教程