3 基本数据类型

3.1 数字类型及其操作

  • 整数类型

    • 可正可负,没有取值的范围限制
    • pow(x,y) 计算x^y
    • 表示形式:十进制表示,二进制(0b,0B开头)、八进制(0o,0O表示)、十六进制(0x,0X)
  • 浮点数类型:带有小数点及小数的数字

    • 浮点数间运算存在不确定尾数,不是bug
    • 0.1 + 0.2 == 0.3 # False
    • round(x, d) 对x四舍五入,d是小数截取的位数
    • 浮点数运算及比较,用round函数辅助
    • 科学计数法:4.3e-3 = 0.0043
  • 复数类型:

    • z=a+bj
    • z.real 获得实部,z.image获得虚部
  • 数值操作符:

    wRwLJ1.png
    wRwHo9.png
    wRwqiR.png

  • 整数->浮点数->复数

  • 数值运算函数:

    • abs(x) : 求绝对值
    • divmod(x, y) : 商余
    • pow(x, y[, z]) : 幂余
    • round(x, d) : 四舍五入,d是保留小数位,默认为0
    • max(x1, x2, … , xn) : 求数列中的最大值
    • min(x1, x2, … , xn) : 求数列中的最小值
    • int(x) : 将x变为整数型
    • float(x) : 将x变为浮点数型
    • comlex(x) : 将x变为复数型

3.2 实例3:天天向上的力量

Q1:计算努力和放松365天的差别

1
2
3
dayup = pow(1.001, 365)
daydown = pow(0.999, 365)
print("UP: {:.2f}, DOWN: {:.2f}".format(dayup,daydown))

Q2:不同努力程度的差别

1
2
3
4
dayfactor = 0.01
dayup = pow(1+dayfactor, 365)
daydown = pow(1-dayfactor, 365)
print("UP: {:.2f}, DOWN: {:.2f}".format(dayup,daydown))

Q3:五天工作,两天休息

1
2
3
4
5
6
7
8
dayup = 1
dayfactor = 0.01
for i in range(365):
if i%7 in [6,0]:
dayup = dayup*(1-dayfactor)
else:
dayup = dayup*(1+dayfactor)
print('{:.2f}'.format(dayup))

Q4:要怎样的努力程度才能追上别人

1
2
3
4
5
6
7
8
9
10
11
12
13
def dayUP(df):
dayup = 1
for i in range(365):
if i % 7 in [6,0]:
dayup = dayup*(1-dayfactor)
else:
dayup = dayup*(1+dayfactor)
return dayup

dayfactor = 0.01
while dayUP(dayfactor)<37.78:
dayfactor += 0.001
print('The day factor should be {:.3f}'.format(dayfactor))

3.3 字符串类型及操作

字符串类型及操作

  • 字符串:由0个或多个字符组成的有序字符序列

  • 字符串共有两类四种表示:

    • 由一对单引号或双引号表示,仅表示单行字符串
    • 由一对三单引号或三双引号表示,可表示多行字符串
  • 字符串的序号;正向递增序号,反向递减序号

  • 索引:[ ]

  • 切片:[M: N: K],头,尾,步长,省略表示索引至一端。逆序:[::-1]

  • 转义符:
    Python 转义符

  • 字符串操作符:

    • x + y: 连接两个字符串x和y
    • n * x 或 x * n: 复制n次字符串x
    • x in s:如果x是s的子串,返回True,否则返回False
  • 字符串处理函数:

    • len(x) : 计算字符串的长度
    • str(x) : 转换x为字符串类型
    • hex(x) 或 oct(x) : 将整数x的十六进制或者八进制小写心事的字符串
    • chr(u) : u为unicode编码,返回其对应的字符
    • ord(x) : x为字符,返回其对应的Unicode编码
  • 字符串的处理方法:< a >.< b >

    • str.lower() 或 str.upper() : 返回字符串的副本,全部为大写或小写字符
    • str.split(sep=None) :返回一个列表,由str根据sep被分割的部分组成
    • str.count(sub) : 返回子串sub在str中出现的次数
    • str.replace(old, new) : 返回字符串的副本,所有old子串被替换为new
    • str.center(width[,fillchar]) : 字符串str根据宽度width居中,fillchar可选
    • str.strip(chars) 从str中去掉在其左侧和右侧chars中列出的字符
    • str.join(iter) : 在iter变量除最后元素外每个元素后增加一个str
  • 字符串类型的格式化:

    • 槽:{ <序号>: <格式控制标记>}

      wRwORx.png
      wRwXz6.png

3.4 模块2:time库的使用

  • time库的基本情况

    • 表达计算机时间
    • 提供获取系统时间并格式化输出功能
    • 提供系统级精确计时功能,用于程序性能分析
    • import time
  • time库包括三类函数:

    • 时间获取:

      • time() : 获取当前系统的时间戳,级计算机内部的时间值
      • ctime() : 获取当前时间并以易读方式表示,返回字符串
      • gmtime() : 获取当前时间,输出为结构体
    • 时间格式化:将时间以合理的方式展示出来

      • strftime(tpl, ts) : tpl是格式化模板字符串,用来定义输出效果;ts是计算机内部时间变量类型

        wRwvQK.png
        wRwxsO.png

        1
        2
        3
        import time
        t = time.gmtime()
        time.strftime("%Y-%m-%d %H:%M:%S",t)
      • strpitme() : 将一段字符串变成时间

    • 程序计时应用:

      • perf_counter() : 返回一个CPU级别的精确时间计数值,单位为秒
      • sleep(s) : s拟休眠的时间,单位是秒,可以是浮点数

      3.5 实例4:文本进度条

      文本进度条

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      #TextProBarV1.py
      import time
      scale = 10
      print("------Start------")
      for i in range(scale+1):
      a = '*' * i
      b = '.' * (scale - i)
      c = (i/scale)*100
      print("{:^3.0f}%[{}->{}]".format(c,a,b))
      time.sleep(0.5)
      print("------End------")

      向下刷新的文本进度条

      1
      2
      3
      4
      5
      #TextProBarV2.py
      import time
      for i in range(101):
      print("\r{:3}%".format(i), end="")
      time.sleep(0.1)

      进度条:

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      #TextProBarV3.py
      import time
      scale = 50
      print("Start".center(scale//2, "-"))
      start = time.perf_counter()
      for i in range(scale+1):
      a = '*' * i
      b = '.' * (scale - i)
      c = (i/scale)*100
      dur = time.perf_counter() - start
      print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,dur),end='')
      time.sleep(0.1)
      print("\n"+"End".center(scale//2,'-'))

      进度条设计函数

      wRwzLD.png

      3. Practice

    • 三次方格式化: 获得用户输入的一个数字,可能是整数或浮点数,a,计算a的三次方值,并打印输出。输出结果采用宽度20个字符、居中输出、多余字符采用减号(-)填充。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬如果结果超过20个字符,则以结果宽度为准。

      Input: 10

      Output: --------1000------

      1
      2
      s=input()
      print("{0:-^20}".format(pow(eval(s),3)))
    • 星号三角形:读入一个整数N,N是奇数,输出由星号字符组成的等边三角形,要求:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬第1行1个星号,第2行3个星号,第3行5个星号,依次类推,最后一行共N的星号。‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

      Input: 3

      Output:

      1
      2
       *
      ***‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬
      1
      2
      3
      num = eval(input())
      for i in range(round((num+1)/2)):
      print(round((num-2*i-1)/2)*" "+(2*i+1)*"*"+round((num-2*i-1)/2)*" ")
    • 凯撒密码:

      原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬

      密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

      假设用户可能使用的输入包含大小写字母azAZ、空格和特殊符号,请编写一个程序,对输入字符串进行恺撒密码加密,直接输出结果,其中空格不用进行加密处理。使用input()获得输入。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      Str = input()
      p="abcdefghijklmnopqrstuvwABCDEFGHIJKLMNOPQRSTUVW"
      q="xyzXYZ"
      for i in range(0, len(Str)):
      if Str[i] == ' ':
      print(' ', end="")
      elif Str[i] in q:
      print(chr(ord(Str[i])-23),end='')
      elif Str[i] in p:
      print(chr(ord(Str[i])+3),end='')
      else:
      print(Str[i],end='')