2.1 计算机会算术
1.数值运算
话不多说,直接上代码解释:
1+9 #加法。结果为10
1.3-5 #减法。结果为-3.7
3*7 #乘法。结果为21
7.5/1.5 #除法。结果为5.0
2**3 #乘方。结果为8
14%3 #取余。结果为2
那么,我们如果要解决一些实际的算术问题时,不可能只单用一种运算符。例如:存入超级银行10000元,年利率为10%,进行复利计算,两年后本息和为多少?
假定利率不变,那么十年后取出本息和进行投资,每月投资5000元,不足5000时将剩余的钱存入银行,问可以连续投资几个月,剩余的钱有多少?
10000*(1+0.1)**2+10000 #结果为22100.0,本息和为2万2千1百元
(10000*(1+0.1)**10+10000)%5000 #结果为937.4246010000206,剩余约937.425元
((10000*(1+0.1)**10+10000)-(10000*(1+0.1)**10+10000)%5000)/5000 #结果为7.0,即可以连续投资7个月
除了常见的数值运算以外,字符串也可以进行加法运算,它会起到连接的作用:
"I like Python"+",but just like it" #连接成"I like Python,but just like it"
那么一个字符串与一个整数进行乘法运算(对字符串的重复):
"HHH "*2 #结果为"HHH HHH "
2.数值运算
在Python中我们使用True和False两个关键词表示真假,它们被称为布尔型。那么Python的逻辑运算有如下:
“与”运算
True and True #结果为True
False and True #结果为False
False and False #结果为False
"或"运算
True or True #结果为True
True or False #结果为True
False or False #结果为False
“非”运算
not True #结果为False
简单记忆:一假与假,一真或真
3.判断表达式
用数学形式写出来的命题,Python代码如下:
1.0 == 1.0 #结果为True,==,等于
2.0 != 2 #结果为False,!=,不等于
5 < 3 #结果为False,<,小于
5 <= 2 #结果为False,<=,小于等于
5 > 3 #结果为True,>,大于
6 >= 4 #结果为True,>=,大于等于
利用上面超级银行的例子,若十年后拿出去投资的钱可确定获得60%本金的利润,现在我想要将来得到50000元,那么现在有两个选择,一个是10年后进行投资,一个是15年后取出本息,那么问这两个选择都可以实现我的愿望吗?
10000*(1+0.1)**15+10000 >= 50000 and ((10000*(1+0.1)**10+10000)-(10000*(1+0.1)**10+10000)%5000)*(1+0.6) >=50000
结果是True,当然可以,毕竟是超级银行!
4.运算优先级
运算有先后,先乘除后加减,判断再逻辑,括号要先行:
括号:()
乘方:**
乘除:* /
加减:+ -
判断:== > >= < <=
逻辑:! and or
关于其他:
关于Python的运算符,还有位运算符、成员运算符、身份运算符,但是不那么常用,我便简单列一下,了解一下:
位运算符:
"& " :按位与运算
" | " :按位或运算
" ^ " :按位异或运算
"~" :按位取反运算
"<<" :左移动运算符
">>" :右移动运算符
成员运算符:
in 如果在指定的序列中找到值返回True,否则返回 False
not in 如果在指定的序列中没有找到值返回True,否则返回False
身份运算符:
is 判断两个标识符是不是引用自一个对象
is not 判断两个标识符是不是引用自不同对象
2.2 计算机记性好
1. 赋值
用变量的方式进行数据的存储,以便在后面重复使用,使得数据保留而不会消失,这是一场变量革命。而实现的这一过程被称为赋值。还是用代码解释吧!
yourmoney = 10000
mymoney = yourmoney*(1+0.5)
print(mymoney) #打印结果是15000.0
以上说明了,你有10000元,我的钱是你把本金交给我,还得给我50%本金的利息。如果你有更多或更少的钱,就可以修改10000这个数值或者进行加减,以达到要求和目的。
2.变量的类型
前面有涉及到的整形、浮点型、布尔型、字符串都是数据类型,我们可以把各种类型的数据赋予同一变量:
s = 5
print(s) #s存储的内容为整数5
s = "i love Python"
print(s) #s存储的内容从整形变为字符串
s = 10.0
print(s) #然后变成浮点型
s = 1 > 2
print(s) #最后变成布尔型
Python能自由改变变量类型的特征被称为动态类型;
不能改变变量类型的特征被称为静态类型。
3.序列
序列和词典同属容器型变量。序列包含的一个数据被称为元素。序列又可以分为元组(Tuple)和列表(List),它们的区别主要是:元组建立之后各个元素不可再变更,而列表可变。创建元组和列表的方式如下:
tuple = (1,2.0,'python',233,False) #一个元组
list = [False,4,'yeah',2.0] #一个列表
type(tuple) #结果为'tuple'
type(list) #结果为'list'
由上可知,序列中是可以包含不同类型的元素的,所以嵌套(套娃)是可以实现的:
list1 = [1,[2,3,4,[5,6,7]]] #列表中嵌套另一个列表,另一个列表嵌套另一个列表
因为元组不能变,所以一般不创建空元组,而经常创建空列表,一般用来准备储存一些数据,相当于准备一个袋子:
empty_list = [] #创建空表
关于如何读取序列,当然是使用下标(index)来读取“袋子”里的元素了:
tuple[0] #结果为1
list[2] #结果为‘yeah’
list1[1][3][0] #结果为5
对于列表,可以对其中的元素进行赋值改变,而元组上面说了不可以变,所以不能进行以下操作。
list[1] = 2.0
list #列表第二个元素从整型4变浮点型2.0了
对于单个元素的查找,是上面的操作,而多元素呢?多元素的寻找可以遵循以下基本样式:
序列名[下限:上限:步长]
下限就是下标起始,上限就是下标结尾,步长就是按多少间隔来找元素。引用的多个元素会自成一个新的序列:
tuple[:5] #从下标0到下标4的所有元素
tuple[2:] #从下标2到最后一个元素
tuple[0:5:2] #下标为0,2,4的元素
m=tuple[2:0:-1] #从下标2到下标1
type(m) #范围引用的结果还是一个元组
表的范围引用效果完全与上相同(范围引用的上限元素是不包括在结果内的)
尾部引用语法,用于序列尾部的元素:
tuple[-1] #序列最后一个元素
tuple[-3] #序列倒数第三个元素
tuple[1:-1] #序列的第二个到倒数第二个元素
序列的好处是可以有序地储存一组数据。一些数据本身具有有序性,就可以储存在序列中。
4.词典
创建词典:
dict = {"Attack":100,"Defense":59,"Health":250}
type(dict)
词典由键值对组成,词典的对应键的值(value)可以通过键(key)来引用:
dict["Attack"] #结果为100
词典的修改或增添:
dict["Attack"] = 88
dict["magic"] = 99
dict # 结果为{"Attack":88,"Defense":59,"Health":250,"magic":99}
构建空词典:
dict={}
dict #结果为{}
词典与序列不同,它不具备连续有序性,适用于存储结构松散的一组数据。
2.3 计算机懂选择
1.if结构
假如到超级银行存钱,若存的本金超过5000就按10%的年利率结算利息,否则就按5%的年利率进行结算。那么,直接上代码:
money = 5001
if money > 5000:
annual_rate = 0.1
else:
annual_rate = 0.05
print(annual_rate) #输出0.1
当然,if和else后面也可跟多行代码,在此便不进行赘述了。
而else也并非必需的,无else即是else为空,if后的条件若不成立,就什么也不做。
2.缩进
冒号的强制缩进其实说明了代码块的归属权,与C语言中的大括号是一样的效果,例如:
if i > 0:
x=1
y=2
即说明这x=1和y=2是属于if的,如果if后条件成立,就执行这个程序块。
如果是这样:
if i > 0:
x=1
y=2
那么,无论如何y=2都会被执行,而x=1只有在if后条件成立之后才能执行。
3.if的嵌套与elif
其实elif可以视作else if,顾名思义就是另外的如果,毕竟一个if只能容纳一个条件,多个elif就是为了容纳更多的条件,形成多个分支,构成不同的输出结果。示例代码:
i=1
if i > 0: #因为i=1,则执行这部分代码
print("hhhhhh")
i = i+1
elif i == 0: #不执行
print("i is 0")
i = i*10
else: #不执行
print("hiahiahia")
i = i-1
嵌套:
i=5
if i > 1: #条件成立,执行内部代码
print("hahahahahaha")
if i > 2: #条件也成立,也执行其内部代码
print("hhhhhh")
if的嵌套,先对最外面的if进行判断,条件成立后执行附属的内部代码,其中就包括了嵌套的if,于是对它后面的条件再行判断,然后......(就是可以无限套娃了!)
2.4 计算机能循环
1.for循环
循环用于重复执行一些程序块。
for循环有如下示例:
for i in [3,4,5.0,"python"]
print(i) #依次打印列表里的各个元素
对上面代码进行总结归纳出for的一个基本用法:
for 变量 in 序列:
statement
序列中有多少个元素,就重复多少次。如果只是想重复次数,而不想创建序列,就如下:
for i in range(6):
print("Hello python!") #打印六次"Hello python!"
for后面跟的变量i是起到计数功能的:
for i in range(6):
print(i,"Hello python!") #打印序号和"Hello python!"
用for循环来做一个实用例子,假如在超级银行存了10000元,存10年,每年利率为固定10%,那么每年的本息和有多少?用for循环进行计算:
money = 10000
for i in range(11):
interest = money*(1+0.1)**i
print("第",i,"年的利息:",interest)
2.while循环
while是另外一种循环结构,其用法如下:
i = 0
while i < 10:
print(i)
i += 1 #从0打印到9
while的结构其实和if相似,同样后面跟着条件,但这个条件不是一次性的,而是循环使用的,直到条件不成立才会跳出整个循环。
无限循环:
while True:
print("Hello World!")
循环实现了相同代码的重复执行
3.跳过或终止
continue #跳过当前的循环,进入下一循环
break #跳出整个循环
进行综合性应用来说明吧!
for i in range(10):
if i == 2:
continue
print(i) #打印0、1、3、4、5、6、7、8、9,跳过了2
for i in range(10):
if i == 2:
break
print(i) #只打印0和1
练习
最后,做一个综合性的练习来重温一下:
假设可以全额贷款买房,房子总价120万,为吸引购房者,房贷前7年利率有折扣,分为为1%、1.5%、2%、3%、3.5%、4%、4.2%,其余年份的房贷年利率皆为5%,若我逐年还款,每次最多还5万元,那么还清需要几年?
以下代码作为参考:
i = 0
total = 1200000.0
repay = 50000.0
tuple = (0.01,0.015,0.02,0.03,0.035,0.04,0.042)
while total > 0:
i = i + 1
print("我太难了!今年是第",i,"年还是要还款的!!")
if i <= 7:
interest = tuple[i - 1]
else:
interest = 0.05
total = total*(interest + 1) - repay
break
print("yeah!第",i + 1,"年,终于还完了!哈哈哈哈哈!!")
恭喜你第9年就还完了!!(你其实还在做梦)