Python学习笔记(三)

第3章 基本数据类型

Python语言的基本数据类型包括:数字类型、字符串类型、布尔类型

数字类型

包括:整数、浮点数和复数三种类型

整数类型

和其它编程语言不同的是,没有取值范围的限制,只取决于机器能表示的范围。
例如:pow(x,y)函数计算 $ x^y $

pow(2,10)
1024
pow(2,15)
32768
pow(2,1000)
10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
pow(2,pow(2,15))

 ......

浮点数类型

Python语言中浮点数的数值范围存在限制,小数精度也存在限制。这种限制与在不同计算机系统有关。

import sys
sys.float_info
sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308, min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53, epsilon=2.220446049250313e-16, radix=2, rounds=1)

 

复数类型

与数学中的复数概念一致, z = a + bj, a是实数部分,b是虚数部分,a和b都是浮点类型,虚数部分用j或者J标识。

数字类型的操作

加减乘除运算,注意:**是乘方运算,//是整除运算,%是取余运算

print(2 ** 5)
print(5 // 2)
print(5 % 2)
32
2
1

内置的数值运算函数:abs、pow、round、max、min、divmod

abs(-5)
5
pow(3,5)
243
round(5 / 3, 2 )
1.67
max(2,1,4)
4
min(2,1,4)
1
divmod(5,2)
(2, 1)

数字类型的转换:int(),float()函数可以实现整数和浮点数之间的转换

int(3.1415)
3
float(5)
5.0

 

math库的使用

  • math库是Python提供的内置数学类函数库
  • math库不支持复数类型
  • math库一共提供了4个数学常数和44个函数
    两种引入方式
#第一种方式
import math
math.ceil(10.2)
11
#第二种方式
from math import floor
floor(10.2)
10

math库中的四个数学常数

  • math.pi:圆周率,值为3.141592653589793
  • math.e:自然对数,值为2.718281828459045
  • math.inf:正无穷大,负无穷大为-math.inf
  • math.nan:Not a Number,非正常值
import math
math.pi
3.141592653589793
math.e
2.718281828459045
math.inf
inf
math.nan
nan

math库中包含的函数主要有:数值表示函数、幂对数函数、三角双曲函数、高等特殊函数。

 

实例3: 天天向上的力量

一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原因能力值相比前一天下降1‰。每天努力和每天放任,一年下来的能力值相差多少呢?

import math
dayup = math.pow((1.0 + 0.001), 365)   # 提高0.001
daydown = math.pow((1.0 - 0.001), 365) # 放任0.001
print("向上: {:.2f}, 向下: {:.2f}.".format(dayup, daydown))
向上: 1.44, 向下: 0.69.

修改代码中的参数,如果每天努力和放任的比例改为5‰呢?改成1%呢?

import math
dayup = math.pow((1.0 + 0.01), 365)   # 提高0.001
daydown = math.pow((1.0 - 0.01), 365) # 放任0.001
print("向上: {:.2f}, 向下: {:.2f}.".format(dayup, daydown))
向上: 37.78, 向下: 0.03.

继续思考:一年365天,一周5个工作日,如果每个工作日都很努力,可以提高1%,仅在周末放任一下,能力值每天下降1%,效果如何呢?

dayup, dayfactor = 1.0, 0.01
for i in range(365):
    if i % 7 in [6, 0]:#周六周日
        dayup = dayup * (1 - dayfactor)
    else:
        dayup = dayup * (1 + dayfactor)
print("向上5天向下2天的力量: {:.2f}.".format(dayup))
向上5天向下2天的力量: 4.63.

再来:每周工作5天,休息2天,休息日水平下降0.01,工作日要努力到什么程度一年后的水平才与每天努力1%所取得的效果一样呢?

def dayUP(df):
    day = 1.0
    for i in range(365):
        if i % 7 in [6, 0]:
            day = day * (1 - 0.01)
        else:
            day = day * (1 + df)
    return day
dayf = 0.01
while (dayUP(dayf)<37.78):
    dayf += 0.001
print("每天的努力参数是: {:.3f}.".format(dayf))
每天的努力参数是: 0.019.

 

字符串类型及其操作

  • 字符串是用双引号""或者单引号''括起来的一个或多个字符
  • 字符串可以保存在变量中,也可以单独存在
  • 可以用type()函数测试一个字符串的类型
  • Python语言转义符: \

字符串类型

#字符串定义
s = "Hello,world"
s1 = "He said:\"hello!\""
print(s1)
s2 = "He said:'hello!'"
print(s2)
s3 = """我们的口号是:
"没有蛀牙"
"""
print(s3)
He said:"hello!"
He said:'hello!'
我们的口号是:
"没有蛀牙"
#字符串索引
greet = "Hello,john"
print(greet[2])
print(greet[2:5])
print(greet[-4])
l
llo
j
#字符串连接
s = "hello" + "world"
print(s)
print(s * 3)
print(len(s))
helloworld
helloworldhelloworldhelloworld
10
#字符串类型转换
d = 123
s = str(d)
print (s * 3)
123123123

 

微实例3.1 获取星期字符串

weekstr = "星期一星期二星期三星期四星期五星期六星期日"
weekid = eval(input("请输入星期数字(1-7):"))
pos = (weekid -1) * 3
print(weekstr[pos:pos+3])
请输入星期数字(1-7):3
星期三

内置字符串处理函数

s = "Hello"
ords = [ord(i) for i in s]
print(ords)
chrs = [chr(i) for i in ords]
print(chrs)
print(s.upper())
print(s.lower())
print(s.replace('l','L'))
[72, 101, 108, 108, 111]
['H', 'e', 'l', 'l', 'o']
HELLO
hello
HeLLo

微实例3.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
原文字符P,其密文字符C满足如下条件:
C = ( P + 3 ) mod 26
解密方法反之,满足:
P = ( C – 3 ) mod 26
假设只使用小写字母

plaincode = input("请输入明文:")
for p in plaincode:
    if ord('a') <= ord(p) <= ord('z'):
        p1 = chr(ord('a') + (ord(p) - ord('a') + 3) % 26)
        print(p1,end='')
    else:
        print(p,end='')
请输入明文:python is an excellent language.
sbwkrq lv dq hafhoohqw odqjxdjh.
plaincode = input("请输入密码:")
for p in plaincode:
    if ord('a') <= ord(p) <= ord('z'):
        p1 = chr(ord('a') + (ord(p) - ord('a') - 3) % 26)
        print(p1,end='')
    else:
        print(p,end='')
请输入密码:sbwkrq lv dq hafhoohqw odqjxdjh.
python is an excellent language.

字符串类型的格式化

format()方法的基本使用

字符串format()方法的基本使用格式是:
<模板字符串>.format(<逗号分隔的参数>)

s = "{}:计算机{}的CPU占有率为{}%".format("2017-07-03",'PYTHON',10)
print(s)
2017-07-03:计算机PYTHON的CPU占有率为10%

format()方法的格式控制

format()方法中模板字符串的槽除了包括参数序号,还可以包括格式控制信息。此时,槽的内部样式如下:{<参数序号>: <格式控制标记>}

其中,格式控制标记用来控制参数显示时的格式 。格式控制标记包括:<填充><对齐><宽度>,<.精度><类型>6个字段,这些字段都是可选的,可以组合使用,这里按照使用方式逐一介绍。

print("{:.2f}".format(123.456789))
print("x={0:.2f},y={1:.3f}".format(123.456789,98.7654321))
print("{0:>30}".format("Python"))
123.46
x=123.46,y=98.765
                        Python

实例4: 文本进度条

基本思想是按照任务执行百分比将整个任务划分为100个单位,每执行N%输出一次进度条。每一行输出包含进度百分比,代表已完成的部分(**)和未完成的部分(..)的两种字符,以及一个跟随完成度前进的小箭头,风格如下:
%10 [*****->.............................................]

import time
scale = 10
print("------执行开始------")
for i in range(scale+1):
    a, b = '**' * i,'..' * (scale - i)
    c = (i/scale)*100
    print("%{:^3.0f}[{}->{}]" .format (c, a, b))
    time.sleep(0.1)
print("------执行结束------")
------执行开始------
% 0 [->....................]
%10 [**->..................]
%20 [****->................]
%30 [******->..............]
%40 [********->............]
%50 [**********->..........]
%60 [************->........]
%70 [**************->......]
%80 [****************->....]
%90 [******************->..]
%100[********************->]
------执行结束------
import time
scale = 50
print("执行开始".center(scale//2,'-'))
t = time.clock()
for i in range(scale+1):
    a = '*' * i
    b = '.' * (scale - i)
    c = (i/scale)*100
    t -=  time.clock()
    print("\r{:^3.0f}%[{}->{}]{:.2f}s".format(c,a,b,-t),\
end='')
    time.sleep(0.05)
print("\n"+"执行结束".center(scale//2,'-'))

-----------执行开始----------
100%[**************************************************->]64.37s
-----------执行结束----------

 

相关链接
相关资源
  • 暂无相关资源