0%

Python 基础(二)

python 程序控制结构:选择、循环;python 函数;python基本输入输出(IO)


Python 控制结构

  1. 选择 if-elif-else

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>>Parker = "plane"
    >>>if Parker == "car":
    charge = "beatles"
    elif Parker == "motor":
    charge = "helmet"
    else:
    charge = "wings"
    >>>print (charge)

    wings

    三元运算符

    1
    2
    3
    4
    5
    6
    t = x if x>=y else y
    # 等价于
    if x>=y:
    t = x
    else
    t = y
  2. 循环

    • WHILE循环
      1
      2
      3
      while i <= 100:
      i += 1
      print (i)
    • FOR循环
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      >>>blog = ["what", "the", "HELL", "is", "this", "blog", "writing"]

      # 序列项迭代
      >>>for word in blog:
      print (word, end = " ")

      what the HELL is this blog writing

      # 序列索引迭代
      >>>namelist = [('wang',16),('miao',60),('zhao',34)]
      >>>dic = {}
      >>>for i in range(len(namelist)):
      name = namelist[i][0]
      age = namelist[i][1]
      dic[name] = age
      >>>print(dic)

      {'wang': 16, 'miao': 60, 'zhao': 34}

      zip()迭代器迭代

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      zip()函数从多个列表中每次取一个元素
      >>>blog = ["B", "U", "L", "L", "S", "H", "I",'T']
      >>>ind = range(8)
      >>>for word,num in zip(blog,ind):
      print ('{0}-{1}'.format(word,num))

      B-0
      U-1
      L-2
      L-3
      S-4
      H-5
      I-6
      T-7

      enumerate()同时得到下标和元素

      1
      2
      3
      for (ind,word) in enumerate(blog):
      print ind
      print word
    • 循环中的ELSE语句
      • 若从break跳出循环,不执行ELSE中的语句

      • 若正常循环结束,执行ELSE中的语句

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        12
        13
        14
        15
        16
        apples = 5
        while apples !=0:
        if apples ==1:
        print ('only one left, continue?')
        eat = input()
        if eat == 'yes':
        apples -= 1
        continue
        elif eat == 'no':
        break
        else:
        print(' ''yes'' or ''no'' ')
        continue
        apples -= 1
        else:
        print('apples all eaten')
    • 列表解析(list comprehension) — 轻量级循环
      1
      2
      3
      4
      5
      >>>print([x**2 for x in range(10) if x**2<50])
      [0, 1, 4, 9, 16, 25, 36, 49]

      >>>print([(x,y) for x in range(2) for y in range(2)])
      [(0, 0), (0, 1), (1, 0), (1, 1)]
    • yield生成器
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      # 当需要每次循环返回一个特定的值时,使用生成器比较方便,生成的是一个可迭代对象
      def gen():
      a = 1
      yield a # 第一次返回 1
      a = 'cat'
      yield a # 第二次返回 cat
      yield 99 # 第三次返回 99

      for i in gen():
      print(i)

      # 生成器表达式
      gen = (x for x in range(4)) # 与列表解析不同的是用()括起来,是可迭代对象
    • 循环对象(迭代器)

      一个循环对象包含next()方法,和StopIteration错误:

      1
      2
      3
      4
      5
      f = open('test.txt')  # open返回的是一个循环对象
      f.next() # next每次返回的是下一行的内容
      f.next()

      # 当到达结尾时,返回 StopIteration

Python 函数

  1. 自定义函数

    • 一般定义def
      1
      2
      3
      def func(x,y):           # 定义函数func
      print (x+y)
      func(1,3) # 调用函数
    • lambda函数定义
      1
      2
      func = lambda x,y: x+y   # 使用lambda函数定义func
      print (func(1,3))
  2. 不同类型的参数

    • 位置参数
      1
      2
      3
      def func(name,gender):
      print('{0} is {1}'.format(name,gender))
      func('Mia','Female')
    • 关键字参数
      1
      2
      3
      def func(name,gender):
      print('{0} is {1}'.format(name,gender))
      func(gender='Female',name='Mia') # 使用参数名区分参数,可以任意改变顺序
    • 默认参数
      1
      2
      3
      4
      def func(name,gender='Female'):   # 定义函数时可以设定参数默认值
      print('{0} is {1}'.format(name,gender))
      func('Mia') # 调用时不输入默认参数,则默认参数为默认值
      func('Mia','Male') # 默认参数也可以修改
    • 可变长参数(包裹)
      1
      2
      3
      4
      5
      def func(name,*manywords):        # 加星号就变成了可变长参数(包裹)
      print(name,'is',manywords)
      func('Mia','a','girl','with','blue','eyes')

      Mia is ('a', 'girl', 'with', 'blue', 'eyes')
      1
      2
      3
      4
      5
      def func(name,**manywords):       # 加两个星号变成了可变长关键字参数
      print(name,manywords)
      func('Mia', gender='Female', age=20, hair='blonde')

      Mia {'gender': 'Female', 'age': 20, 'hair': 'blonde'}
  3. 函数可作为参数传递

    1
    2
    3
    4
    5
    6
    7
    def func(name,gender):
    print('{0} is {1}'.format(name,gender))

    def test(f,a,b):
    func(a,b)

    test(func,'Mia','Female')
  4. 一些方便的函数

    • map()
      1
      2
      3
      4
      5
      # map函数每次从两个表中取出一个元素,带入前方的函数
      ans = map((lambda x,y: x+y),[1,2,3],[7,8,9])
      print(list(ans)) # 可以用list函数把map返回的循环对象转换为表

      [8, 10, 12]
    • reduce()
      1
      2
      3
      4
      # reduce函数累进地作用于各个参数,先取1,2,运算结果后再向后取3,……
      ans = reduce((lambda x,y: x+y),[1,2,3,7,8,9])

      # 本例实际运算的是(((((1+2)+3)+7)+8)+9)
    • filter()
      1
      2
      3
      4
      5
      6
      7
      8
      # filter函数用来筛选数据,仅把函数返回值为True的元素存入表(循环对象)
      def func(a):
      if a > 100:
      return True
      else:
      return False

      ans = filter(func,[10,56,101,500])

Python基本输入输出(IO)

  1. File IO

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    f = open('pybook','w+')             # 'r'只读,'w'只写,'w+'读写
    txt = ['Hi!','Welcome to pybook!']
    for word in txt:
    f.write(word)
    f.write('\n') # 在写入txt文件时换行
    f.close() # 记得关闭文件

    f = open('pybook','r')
    print(f.readlines())
    f.close()

    常用的读写方法

    1
    2
    3
    4
    5
    6
    f.read(N)          # 读取Nbytes的数据
    f.readline() # 读取一行
    f.readlines() # 读取所有行,储存在列表中,每个元素是一行

    f.write('xxx') # 写入单个字符串'xxx'
    f.writelines('aa\n','bb') # 当写入多个字符串构成列表(list)时,要用writelines
  2. Interactive IO

    输入Input()
    1
    2
    3
    4
    5
    >>>a = input("input:")    # input('提示信息')
    input:123

    # 输入数值型\列表\字典
    eval(input())
    输出print()
    1
    2
    3
    4
    print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
    # objects:输入对象,用,隔开
    # sep: 打印时填充对象间隔,默认为' '空格
    # end: 结束方式,\n换行

    %格式化操作符

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # %[(name)][flags][width].[precision]typecode
    # (name):命名
    # flags: +(右对齐), -(左对齐), ' '(在正数前填一个空格), '0'(填充0)
    # width: 字符宽度
    # precision: 小数点位数
    # typecode: 数据类型

    print('%s is %d years old' % ('Hugo', 20)) # %s<--'Hugo', %d<--20 , 模版和填值以 % 隔开

    print('%(name)s is %(age)d years old' % {'name':'Hugo', 'age':20}) # 也可用字典填值

    print('%+10.3f,%-10.3f,%+10.3f' % (-13.2, 32, 9.44))
    -13.200,32.000 ,000009.440

    .format()格式化

    1
    2
    3
    4
    5
    6
    7
    print('{0} and {1} and {0}'.format('a', 'b'))  # 可索引
    a and b and a

    #{:4f}位数
    #{>}右对齐
    print(':{0:>4s} and {1:.3f}'.format('aa', 2.1)) # {0(索引):(位数)>(右对齐)4}
    : aa and 2.100

    print(f’’)

    1
    2
    x=3,y=4
    print(f'x={x:d},y={y:.3f}')



参考

Vamei 博客园-Python快速教程

RuiWo 博客园-python基础-格式化输出

Vamei 博客园-Python补充05 字符串格式化

菜鸟教程-Python print()函数