(2018-03-20)0002.Python基础入门班_第2课、关键字与循环控制

上一篇文章:(2018-03-19)0001.Python基础入门班_第1课、入门基础

关于本人

个人信息:微博
写作区:个人博客、、开源中国、豆瓣、掘金、CSDN
代码管理区:码云、GitHub、GitBook、Python_NoteBook(这个仅仅限于自己的本地搭建)
我的网络制作书籍:Python3Book(基于廖雪峰的Python教程编写成书)、
july_Oneline(基于七月在线培训机构的教程编写成书)


推荐网站

1.菜鸟教程_Python3


推荐软件
  • windows软件01-撸码(pyCharm_第七下载(含汉化和破解)
    我的百度云提取码:tip7

推荐书籍


课程总结

第2课 关键字与循环控制


一、变量和类型
  • 变量、百度维基、
    类型、百度维基
>>>
1.变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。
变量可以通过变量名访问。在指令式语言中,变量通常是可变的;
但在纯函数式语言(如Haskell)中,变量可能是不可变(immutable)的。
在一些语言中,变量可能被明确为是能表示可变状态、具有存储空间的抽象(如在Java和Visual Basic中);
但另外一些语言可能使用其它概念(如C的对象)来指称这种抽象,而不严格地定义“变量”的准确外延。

>>>
2.类型(type)以及类型系统的起源以及研究与发展是独立于OOP的。
早在五十年代的FORTRAN语言编译器实现中,就已经采用类型系统作为类型检查的一种手段。
广义的类型一般被定义为一种约束,也就是一种逻辑公式。
而在对类型的研究过程中产生多种方法,比如【C&W 1985】等。
而代数方法(algebraic approach)是一种非常好的建立类型的形式化规范的方法。
代数中的一个类型对应于一系列元素,在它们之上定义代数操作。
同时在此基础上二阶λ演算已经被用于继承和模板所支持的模型。在上面两种方法中,
类型被认为是一系列满足确定约束条件的元素,
更抽象的方式可以把一个类型当作规定一个约束条件,如果我们规定的约束条件越好,
相对应的被定义元素的集合就越精密,
所以逻辑公式(logical formulas)就成为描述类型特征的最合适工具。
在这里,我们不想深入的探究对于类型理论的各种不同的数学模型,
我们需要明白的是类型(type)以及类型理论这个在编程语言中经常应用到的概念的内涵是极其丰富的,
而其自身理论的发展并非局限于OOP之中,
但当两者相结合的时候就对我们的程序观产生了巨大的影响。
  • 自身理解
1.变量 是一个可以变的量
2.类型 是 一种以归类表示。简称类型
  • 代码展示
x = 100
x = 123.4
x = 'abcd'
print(x)
# 如果变量在定义的时候 没有赋值,那么一定会抛出一个异常
try:
    y = 22
    print(y)
except NameError:
    print('NameError : "y" is not defined')
print('---\n')
  • 控制台打印
abcd
NameError : "y" is not defined
---

二、常见字符串处理(python常见

0.使用字符串必须 import string
1.大小写转换(upper、lower),
2.首字母大写(capitalize|capword),
3.分割(split|)与合并(链接)字符串(join)、拼接(+),
4.类型转换(数字到字符串(str(5))、字符串到数字(int('1234'))、byte转换(int('11111111',2))),
5.格式化字符串,
6.其他(返回一个新的字符串(strip)、去除左右空格(lstrip、rstrip)、位置比较(index)),
7.常用判断 (7.1是不是以某个字符开头、结尾(startswith、endswith), 7.2是不是只有字符 和 整数(isalnum), 7.3.判断是不是只有 字符(isalpha), 7.4.判断是不是只有 数字(isdigit), 7.5判断是不是只有 空格(isspace), 7.6.判断是不是只有 只有小写(islower), 7.7.判断是不是只有 只有大写(isupper), 7.8判断首字母是不是 大写(istitle))

  • 百度维基
字符串主要用于编程,概念说明、函数解释、用法详述见正文,这里补充一点:
字符串在存储上类似字符数组,所以它每一位的单个元素都是可以提取的,
如s=“abcdefghij”,则s[1]=“a”,s[10]="j",
而字符串的零位正是它的长度,
如s[0]=10(※上述功能Ansistring没有。),
这可以给我们提供很多方便,如高精度运算时每一位都可以转化为数字存入数组。
  • 自身理解
用来表示 一个文字、数字
  • 代码展示
# 去除空格
s = '  abcd efg '
print(s.strip()) # strip会返回一个新的字符串
print(s.lstrip()) # 删除左边的空格
print(s.rstrip()) # 删除右边的空格
print(s)
print('---\n')

# 连接字符串
s1 = 'abc'
s2 = 'def'
print(s1 + "\n" + s2)

# 大小写
s = 'abc def'
print(s.upper()) # 大写
print(s.upper().lower()) # 小写
print(s.capitalize()) # 第一个字母大写
print('---\n')

# 位置比较
s_1 = 'abcdefg'
s_2 = 'abdeffxx'
print(s_1.index('bcd'))
# print(s_2.index('bcd')) # 抛出异常 ValueError: substring not found
print('---\n')

# 捕捉异常进行处理
try:
    print(s_2.index('bcd')) 
except ValueError:
    pass
# python3里面,cmp函数被移除了
print(s_1 == s_2)
print(s_1 < s_2)  # 长度比较
print(s_1 > s_2)
print(len('abcdf'))

# print(len(None)) #  len 不支持打印none
s = '' # 空字符串(指针) 不是None None是一个空指针
if s is None :
    print('None')

if  not s :
    print('Empty')
print('---\n')

# ** 字符串的分割 和 链接 (数据分析等使用)
s = 'abc,def,ghi'
splitted = s.split(',')
print(type(splitted))
print(splitted)
print('---\n')

s = """abc
def
ghi
efg"""

s_1 = s.split('\n')
s_2 = s.splitlines()
print(s_1)
print(s_2)

print('---\n')

# 链接 join
s = ['abc','def','ghi']
print(''.join(s))
print('#'.join(s))

# 常用判断
s = 'abcdefg'
print(s.startswith('abc')) # startswith 是不是以某个字符开头
print(s.endswith('efg')) # endswith 是不是以某个字符结尾
print('---\n')


print('1234abcd'.isalnum()) # 只有字符 和 整数
print('\t12ab'.isalnum())

print('abcd'.isalpha()) # 判断是不是只有 字符
print('123'.isdigit()) # 判断是不是只有 数字
print('    '.isspace()) # 判断是不是只有 空格
print('abc123'.islower()) # 判断是不是只有 只有小写
print('ABC123'.isupper()) # 判断是不是只有 只有大写
print('Hello,World'.istitle()) # 判断首字母是不是 大写
print('---\n')

# 数字到字符串
print(str(5))
print(str(5.))
print(str(5.123))
print(str(-5.333))
print('---\n')


# 字符串到数字
print(int('1234'))
print(float('123.4'))
# print(int('123.4')) 
# byte转换
print(int('11111111',2))
print(int('ffff',16))
print(int('7777',8))
print('---\n')


# 
s = 'abcdefg'
l = list(s)
print(l)
print('---\n')
  • 控制台打印
abcd efg
abcd efg 
  abcd efg
  abcd efg 
---

abc
def
ABC DEF
abc def
Abc def
---

1
---

False
True
False
5
Empty
---


['abc', 'def', 'ghi']
---

['abc', 'def', 'ghi', 'efg']
['abc', 'def', 'ghi', 'efg']
---

abcdefghi
abc#def#ghi
True
True
---

True
False
True
True
True
True
True
True
---

5
5.0
5.123
-5.333
---

1234
123.4
255
65535
4095
---

['a', 'b', 'c', 'd', 'e', 'f', 'g']
---

三、条件判断、循环控制
  • 条件判断、百度维基
  • 循环控制、百度维基
>>>1.
条件语句是用来判断给定的条件是否满足(表达式值是否为0),
并根据判断的结果(真或假)决定执行的语句,选择结构就是用条件语句来实现的。
条件语句可以给定一个判断条件,并在程序执行过程中判断该条件是否成立,
根据判断结果执行不同的操作,从而改变代码的执行顺序,实现更多的功能。
VBA中的条件语句主要有If语句和Select Case语句两种。
写程序时,常常需要指明两条或更多的执行路径,而在程序执行时,
允许选择其中一条路径,或者说当给定条件成立时,则执行其中某语句。
在高级语言中,一般都要有条件语句。

>>>2.
C语言循环控制语句是一个基于C语言的编程语句,
该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构。
  • 自身理解
1.
根据某个条件进行判断结果

2.通过不断循环,根据自身设置循环的值 就是循环控制
  • 代码展示
# if判断
a = 100
b = 200
c = 300
if c == a :
    print(a)
elif c == b :
    print(b)
else:
    print(c)

#None的判断
x = None
# if x is None: # 等同于 if x == None : 
print(not  x)
if x is not None:
    print('None')
else:
    print('not None')

# 空值和false是等价的
if '':
    print('Empty')
print('---\n')

# Code 三、for循环
# for i in 迭代器
for i in range(0,30,5):
    print(i)

# while 循环
s = 0
i = 1
while  i<= 100:
    s += i
    i += 1
print(s)
print('---\n')

for i in range(0,100):
    if i < 10:
        pass
    elif i < 30:
        continue
    elif i < 35:
        print(i)
    else:
        break

print('---\n')
  • 控制台打印
300
True
not None
---

0
5
10
15
20
25
5050
---

四、函数(包含默认参数、可变参数、元组、字典、数组参数)
  • 百度维基
函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。
一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。
所有的高级语言中都有子程序这个概念,用子程序实现模块的功能。
在C语言中,子程序的作用是由一个主函数和若干个函数构成。
由主函数调用其他函数,其他函数也可以互相调用。
同一个函数可以被一个或多个函数调用任意多次。
在程序设计中,常将一些常用的功能模块编写成函数,放在函数库中供公共选用。
要善于利用函数,以减少重复编写程序段的工作量。
函数分为全局函数、全局静态函数;
在类中还可以定义构造函数、析构函数、拷贝构造函数、
成员函数、友元函数、运算符重载函数、内联函数等。
  • 自身理解
根据自身的设计,将多个语句集合成函数。
  • 代码展示
# Code 四、函数
def func_name(arg_1,arg_2):
    print(arg_1,arg_2)
    return arg_1+arg_2
r = func_name(1,2)
print(type(r))
print(r)

# 默认参数
def func(x,y = 500):
    print('x = ',x)
    print('y = ',y)
    return x + y
print(func(100,600))
print(func(100))
print(func(y= 300,x = 200))

# 
def func(p):
    print('x = ',p['x'])
    print('y = ',p['y'])
print(func({'x':100,'y':200}))
print('---\n')

# 可变参数
def func(name, *numbers):
    print(numbers)
    print(numbers[0])
    print(numbers[3])
    return 'Done'

# tuple - 元组 <=> 只读数组
func('Tom',1,2,3,4,'Li','YH')

# 字典的参数
def my_print(*args):
    print(args)
my_print(1,2,3,4,'a','b','c')
print('---\n')

def func(name, ** kvs): ## **means key/values (** 自定会打包成字典)
    print(name)
    print(type(kvs))
    print(kvs)
func('Tom',china = 'Beijing',uk = 'London')


def func(a,b,c,*,china,uk): # *号后面的 一定要把变量名字加上去
        print(china,uk)
func(1,2,3,china = 'BJ',uk = 'LD')
print('---\n')

#既有 字典、数组、还有默认参数
def func(a,b,c = 0,*args,**kvs):
    print(a,b,c)
    print(args)
    print(kvs)

func(1,2)
func(1,2,3)
func(1,2,3,'a','b','c')
func(1,2,3,'a','b',china = 'BJ',uk='LD')
func(1,2,3,'a','b',china = 'BJ',uk='LD')    
func(1,2,3,*('a','b'),**{'china' : 'BJ','uk':'LD'}) 


#
def my_print(*args):
    print(*args)
my_print('x = ',100,'y = ',200 )
print('---\n')
  • 控制台打印
1 2

3
x =  100
y =  600
700
x =  100
y =  500
600
x =  200
y =  300
500
x =  100
y =  200
None
---

(1, 2, 3, 4, 'Li', 'YH')
1
4
(1, 2, 3, 4, 'a', 'b', 'c')
---

Tom

{'china': 'Beijing', 'uk': 'London'}
BJ LD
---

1 2 0
()
{}
1 2 3
()
{}
1 2 3
('a', 'b', 'c')
{}
1 2 3
('a', 'b')
{'china': 'BJ', 'uk': 'LD'}
1 2 3
('a', 'b')
{'china': 'BJ', 'uk': 'LD'}
1 2 3
('a', 'b')
{'china': 'BJ', 'uk': 'LD'}
x =  100 y =  200
---

五、递归
  • 百度维基
程序调用自身的编程技巧称为递归( recursion)。
递归做为一种算法在程序设计语言中广泛应用。 
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,
它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,
递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,
大大地减少了程序的代码量。
递归的能力在于用有限的语句来定义对象的无限集合。
一般来说,递归需要有边界条件、递归前进段和递归返回段。
当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
  • 自身理解
根据需求不断的调用自身的函数,并且退出递归是需要有条件的。
  • 代码展示
# Code 五、递归
def my_sum(i):
    if i < 0:
        raise ValueError
    elif i <= 1:
        return i
    else:
        return i + my_sum(i-1)

print(my_sum(1))
print(my_sum(2))
print(my_sum(3))
print(my_sum(4))
print(my_sum(100))
print('---\n')


# f(n) = f(n-1) + f(n - 1)
def fib(n):
    if n < 1:
        raise ValueError
    elif n<=2:
        return 1
    else:
        return fib(n-1)+fib(n-2)

print(fib(1))
print(fib(2))
print(fib(3))
print(fib(4))
print(fib(5))
print(fib(6))
print(fib(7))
# print(fib(40))
print('---\n')

# 汗多塔
def hanoi(n, A,B,C):
    if n == 1:
        print(A + ' -> '+ B)
    else:
        hanoi(n-1,A,C,B)
        print(A + ' -> '+ B)
        hanoi(n-1,C,B,A)
hanoi(4,'A','B','C')
print('---\n')

# 函数是可以作为参数的
p = print
p(1,2,3)

def sum1(x,y,p = None):
    s = x + y
    if p:
        print(s)
    return s
sum1(100,200)
sum1(100,200,print)

def cmp(x,y,cp = None):
    if not cp:
        if x > y:
            return 1
        elif x < y:
            return -1
        else:
            return 0
    else:
        return cp(x,y)

def my_cp(x,y):
    if x < y:
        return 1
    elif x == y:
        return 0
    else:
        return -1

print(cmp(100,200))
print(cmp(100,200,my_cp))
print('---\n')

def do_sum(data,method):
    return method(data)
print([1,2,3,4],sum)
print(do_sum([1,2,3,4],sum))
  • 控制台打印
1
3
6
10
5050
---

1
1
2
3
5
8
13
---

A -> C
A -> B
C -> B
A -> C
B -> A
B -> C
A -> C
A -> B
C -> B
C -> A
B -> A
C -> B
A -> C
A -> B
C -> B
---

1 2 3
300
-1
1
---

[1, 2, 3, 4] 
10

作业(未完成、完成会传到百度云的)
字符串按单词反转(必须保留所有空格)。
(已完成)'I love china!' 转化为 'china! love I' 
(已完成)打印100000以内的所有素数
(已完成)自己实现一个函数支持可变函数
自己实现函数解决hanoi问题
实现一个sort函数,通过参数指定排序函数来实现按不同顺序进行排序。 冒泡排序

代码:0q17

明天将会更新→0003.Python基础入门班_第3课、容器以及容器的访问使用

你可能感兴趣的:((2018-03-20)0002.Python基础入门班_第2课、关键字与循环控制)