第二章 先做键盘侠

先做键盘侠

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中我们使用TrueFalse两个关键词表示真假,它们被称为布尔型。那么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年就还完了!!(你其实还在做梦)

你可能感兴趣的:(第二章 先做键盘侠)