第一章至第三章技术总结

第一章 用编程改造世界    


1  了解编程

编程是编定程序的中文简称,就是让计算机代为解决某个问题,对某个计算体系规定一定的运算方式,使计算体系按照该计算方式运行,并最终得到相应结果的过程。

2  了解python

Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。 

Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。

3   Python 特点

(1)易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

# (2)易于阅读:Python代码定义的更清晰。

(3)易于维护:Python的成功在于它的源代码是相当容易维护的。

(4)一个广泛的标准库:Python的最大的优势之一是丰富的库,跨平台的,在UNIX,Windows和Macintosh兼容很好。

(5)互动模式:互动模式的支持,您可以从终端输入执行代码并获得结果的语言,互动的测试和调试代码片断。

(6)可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

(7)可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

(8)数据库:Python提供所有主要的商业数据库的接口。

(9)GUI编程:Python支持GUI可以创建和移植到许多系统调用。

(10)可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

4  python最简单的代码---Hello World

>>>print("hello world")        #结果hello world


第二章   先做键盘侠


2.1  计算机会算术

1  数值运算

>>>           1+1           #加法

>>>          1-1            #减法

>>>          1*2            #乘法

>>>          1/4            #除法

>>>          1**2          #平方

>>>           1%10       #余数


2  判断表达式

>>>    1==1                 #    ==,        等于

>>>    a=1                   #    =,          赋值

>>>    1    !=    2       #     !=    ,  不等于

>>>    1  <   2             #   <   ,            小于

>>>   1   >   0             #    >  ,            大于

>>>   1   >=  0           #     >=  ,          大于等于


3  运算优先级

乘方:**

乘除:*  /

加减:+  -

判断:==   >    >=    <    <=

逻辑:!  and   or


2.2  计算机记性好

1  赋值


v="vivian"

print(v)


total=86000

requirement=total*(0.15+0.2)

print(requirement)


 
 2 变量的类型


a=5

print(a)       #a储存的内容为整数5

a="hello  world"

print(a)      #a储存的内容变成字符串"hello  world"


a=100      #整型

a=100.0     #浮点型

a='abc'       #字符串。也可以使用双引号"abc"标记字符串

a=true        #布尔值



3  序列

example_tuple=(2,1.3,"love",5.6,9,12,false)           #元组

example_list=[true,5,"smile"]                                  #列表

type(example_tuple)                                              #结果为'tuple'

type(example_list)                                                  #结果为'list'

example_tuple[0]                                                   #结果为2

rate={"premium":0.2,"tax":0.15}                            #可以用字典储存松散的数据

#example_tuple=(2,1.3,"love",5.6,9,12,false)

example_list=[5,2]

print(example_list[1])

tuple[:5]                                  #从下标0到下标4,不包含下标5

tuple[2:]                                  #从下标2到最后一个元素

tuple[0:5:2]                             #下标为0,2,4的元素

tuple[-1]                                  #序列最后一个元素

tuple[-3]                                  #序列倒数第三个元素

tuple[1:-1]                              #序列的第二个元素到倒数第二个元素'''

dict={"tom":11,"sam":57,"lily":100}

type(dict)                              #结果为'dict'

print(dict["tom"])

dict["tom"]=29

print(dict)  '''                         #如果代码过于长,可以不用返回原来字典的代码行进行修改


4  切片

(1)Python可切片对象的索引方式

包括:正索引和负索引两部分,如下图所示,以a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]为例:


(2) Python切片操作的一般方式

一个完整的切片表达式包含两个“:”,用于分隔三个参数(start_index、end_index、step),当只有一个“:”时,默认第三个参数step=1。

切片操作基本表达式:object[start_index:end_index:step]

step:正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。“切取方向非常重要!”“切取方向非常重要!”“切取方向非常重要!”,重要的事情说三遍!

start_index:表示起始索引(包含该索引本身);该参数省略时,表示从对象“端点”开始取值,至于是从“起点”还是从“终点”开始,则由step参数的正负决定,step为正从“起点”开始,为负从“终点”开始。

end_index:表示终止索引(不包含该索引本身);该参数省略时,表示一直取到数据“端点”,至于是到“起点”还是到“终点”,同样由step参数的正负决定,step为正时直到“终点”,为负时直到“起点”。

(3)彻底搞懂切片

链接:https://www.jianshu.com/p/15715d6f4dad


2.3  计算机懂选择

1  if 结构

#如果产品售价超过50,交易费率为0.1,否则为0.2。下面写一段程序

total=98

if total > 50:

    print("总价超过50")

rate = 0.01

else:

    print("总价不超过50")

rate = 0.02

print(rate) 

2  python的缩进强制性


if    i >0   :

       x=1

      y=2


if    i   >0  :

       x=1

y=2             #两种不同的效果



3  if的嵌套与elif


'''i=2

if i >0:    #条件1。如果条件成立则执行这部分  (条件1执行了,以下条件均不执行)print("positive i")

i=i+1

elif i >1:  #条件2。不执行print("i is 0")

i=i*10

else:        #条件3。不执行print("negetive i")

    i=i+1


i=2

if i >0:    #条件1。如果条件成立则执行这部分  (条件1执行了,以下符合条件均执行)print("positive i")

i=i+1

    if i >1:  #条件2。执行print("i is 0")

i=i*10

else:        #条件3。不执行print("negetive i")

    i=i+1


#if包含是同时打印出符合条件的结果

i=5

if i>3:

print("good")

if i>4:

        print("batter")



2.4  计算机能循环

1   for 循环


for  a  in  [1,2,3,4]

    print(a)       #依次打印各个元素

#for   元素    in    序列:


for  i  in  range(5):

  print("hello world")   #打印5次"hello world"



2  while循环


i=0

while  i  < 10:

     print(i)

      i=i+1    #从0打到9



3  for 循环与while循环结合


x="abcfg"

while x  != " ":

     for c in x :

     print(c,end="")

    x= x[:-1]


i=0

residual=500000

interest_tuple=(0.01,0.02,0.03,0.035)

repay=30000

while residual>0:

           i=i+1

           print("第",i,"年要还是要还钱")

           if i <=4:

              interest=interest_tuple[i-1]

           else:

             interest=0.05

        residual=residual*(interest+1)-repay

        print("一共需要",i,"年")


i=0 #年份

x=500000 #还款额

t=30000 #每次还款的金额

tuple=(0.01,0.02,0.03,0.035) #元组 前四年的利率,每一年都不一样

r=0.05 #第五年开始就不变

while x>0:

     i=i+1

    print("第",i,"年要还是要还钱")

     if i<=4:

          for o in tuple:    #设一个变量o

          interest=o      #将利率进行赋值    

     else:

        interest=r

   x=x*(1+interest)-t

  print("一共需要",i+1,"年") 

#两串代码结果不一样的原因分析

1.for循环的赋值是一次性赋值所有元组里面的元素,而interest[i-1]这利用切片原理很好就能达成每循环一次进行赋值一次的效果

2.print的缩进位置不对

以上种种原因导致第二串代码没有达到想要的效果



第三章    过程大于结果


1  定义函数


def square_sum(a,b):

   a=a+2

   b=b**2

    c=a*b

    return c

x=square_sum(1,2)

print(x)    #结果为12


def square_sum(a,b):

   a=a**2

   b=b**2

   c=a+b        #这说明定义的函数为两个数的平方和

   return c

x=square_sum(1,2)

print(x)  #结果为7

def square_sum(a,b):

   a=a**2

    b=b**2

    c=a*b                     #这说明定义的函数为两个数的平方积

return c

x=square_sum(1,2)

print(x)    #结果12


a,b=eval(input("请输入a,b的值"))

def f(a,b):

   a=a*2

  b=b**2

    c=a+b

    return c      #主要是def和return函数的作用

x=f(a,b)

print(x)


#用f替换square_sum,效果一样,说明它不是一个函数,而是自己定义的函数,所以称为定义函数

a,b=eval(input("请输入a,b的值"))

def square_sum(a,b):

   a=a*2

   b=b**2

   c=a+b

   return c

x=square_sum(a,b)

print(x)


2  调用函数

Python通过参数出现的先后位置,知道3对应的是函数定义中的第一个形参a, 4对应第二个形参b,然后把参数传递给函数square_sum()。函数square_sum()执 行内部的语句,直到得出返回值25。返回值25赋予给了变量x,最后由print()打印 出来。


3  函数文档

函数可以封装代码,实现代码的复用。对于一些频繁调用的程序,如果能写成 函数,再每次调用其功能,那么将减少重复编程的工作量。




可以看到,函数max()有两种调用方式。我们之前的调用是按照第二种方式。此 外,说明文档还说明了函数max()的基本功能。

4 参数传递

把数据用参数的形式输入到函数,被称为参数传递。如果只有一个参数,那么参数传递会变得很简单,只需把函数调用时输入唯一的一个数据对应为这个参数就可以了。如果有多个参数,那么在调用函数时,python会根据位置来确认数据对应哪个函数。例如


在调用函数时,所有的位置参数都要出现在关键字参数之前。例如


正确


错误


5  包裹传参


两次调用,尽管参数个数不同,但都基于同一个package_position()定义。 在调用package_position()时,所有的数据都根据先后顺序,收集到一个元组。 在函数内部,我们可以通过元组来读取传入的数据。这就是包裹位置传参。为了提 醒Python参数all_arguments是包裹位置传递所用的元组名,我们在定义 package_position()时要在元组名all_arguments前加*号。


与上面一个例子类似,当函数调用时,所有参数会收集到一个数据容器里。只 不过,在包裹关键字传递的时候,数据容器不再是一个元组,而是一个字典。每个 关键字形式的参数调用,都会成为字典的一个元素。参数名成为元素的键,而数据 成为元素的值。字典all_arguments收集了所有的参数,把数据传递给函数使用。 为了提醒,参数all_arguments是包裹关键字传递所用的字典,因此在 all_arguments前加**。

ps:愣是没发现它们更深层次的作用,好吧,以后会碰到它们的。。。。

6  解包裹

解包裹允许我们把一个数据容器传递给函数,再 自动地分解为各个参数。

包裹传参和解包裹并不是相反操作,而是 两个相对独立的功能。


此为解包裹


7   递归

下面我们 用编程的方法来解决高斯求和:


方法二


 归纳法:数学归纳法本身非常简单。如果我们想要证明某个命题对于自然数n成立,那么:

第一步 证明命题对于n = 1成立。

第二步 假设命题对于n成立,n为任意自然数,则证明在此假设下,命题对于 n+1成立。

命题得证

想一下上面的两个步骤。它们实际上意味着,命题对于n = 1成立→命题对于n = 2成立→命题对于n = 3成立……直到无穷。因此,命题对于任意自然数都成立。 这就好像多米诺骨牌,我们确定n的倒下会导致n + 1的倒下,然后只要推倒第一块 骨牌,就能保证任意骨牌的倒下。

8  函数栈

程序中的递归需要用到栈(Stack)这一数据结构。所谓数据结构,是计算机存 储数据的组织方式。栈是数据结构的一种,可以有序地存储数据。


9  变量的作用域

函数内部可以创建新变量, 如下面的一个函数:


在一个函数内部,我们能“看到”函数 外部已经存在的变量。比如下面的程序:


主程序 和函数external_var()都有一个info变量。在函数external_var()内部,会优先 使用函数内部的那个info:


且函数内部使用的是自己内部的那一份,所以函数内部对info的操作不会影响 到外部变量info。

函数的参数与函数内部变量类似。我们可以把参数理解为函数内部的变量。在 函数调用时,会把数据赋值给这些变量。等到函数返回时,这些参数相关的变量会 被清空。但也有特例,如下面的例子:


你可能感兴趣的:(第一章至第三章技术总结)