python 基础语法2:简单函数、切片、迭代、生成列表

2019-11-19  本文已影响0人  fables008

计算机的发展遵循摩尔定律


静态语言编译过程
脚本语言解释过程

程序编写原则:IPO

  1. 分析问题
  2. 划分边界
  3. 设计算法
    4.编写程序
    5.调试测试
    6.升级维护
    两种编程方式:交互式(适合语法练习)和文件式(主要方式)

函数

函数的定义

#由def关键字、函数名字以及扩号、括号里的参数与冒号组成

def square_of_sum(L): # square_of_sum是函数名,也可以命名成别的
    sum = 0
    for x in L:
        sum = sum + x * x
    return sum
print square_of_sum([1, 2, 3, 4, 5])
print square_of_sum([-5, 0, 5, 15, 25])

# 函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。

函数的返回多值和递归

import math  # math包提供了多种函数,我们先用import引用它:
def quadratic_equation(a, b, c):
    x1=(-b+math.sqrt(b*b-4*a*c))/(2*a) #写的时候也要加上math.funtion name
    x2=(-b-math.sqrt(b*b-4*a*c))/(2*a)
    return x1,x2   #Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
print quadratic_equation(2, 3, 0)
print quadratic_equation(1, -6, 5)
# 第一个例子 fact(n) = n! = 1 * 2 * 3 * ... * (n-1) * n = (n-1)! * n = fact(n-1) * n
def fact(n): 
    if n==1:
        return 1
    return n * fact(n - 1)

# 第二个例子
def move(n, a, b, c):  #定义move函数
   if n ==1:                # 如果只有1个圆盘
       print a, '-->', c  #圆盘路径直接从A到C就可以了
       return              #结束
   move(n-1, a, c, b)  #如果不是一个圆盘,那首先应该将n-1个圆盘从A移动到B
   print a, '-->', c      #将A柱上最后一个圆盘从A移动到C就
   move(n-1, b, a, c) #将B上的n-1个圆盘移动到C
move(4, 'A', 'B', 'C') 

python之定义默认默认参数和可变参数

>>> int('123') # 默认十进制
123
>>> int('123', 8) # 八进制下的123等于1*64+2*8+3
83

# 第二个例子
def greet(name='world'):
    print 'Hello, ' + name + '.' 
greet()#没有传入,为默认
greet('Bart') #传入输出其他

# 第三个例子
# OK:
def fn1(a, b=1, c=2):
    pass 
# Error:
def fn2(a=1, b): #默认参数a=1,应该在后面
    pass 

#实操:编写接受可变参数的平均函数
def average(*args):
    sum = 0.0
    if len(args) == 0:
        return sum
    for x in args:
        sum = sum + x
    return sum / len(args)

对list、tuple以及字符串切片

# 实际操作1
L = range(1, 101) #从0开始101停止,步长为1
print L[:10] #取前10个数
print L[2::3] # 3的倍数
print L[4:50:5] #50以内包括50的5的倍数
print L[-10:] #取出后10个数
print L[-46::5] #取出后10个5的倍数,确定起始数为L[-1-5*9] 

#练习2:首字母大写,而其他字幕不受影响
def firstCharUpper(s):
    return s[0].upper()+s[1:]
print firstCharUpper('hello') # 输出为Hello

迭代

练习1:用for循环迭代数列 1-100 并打印出7的倍数。
for i in range(1,101):
    if i%7==0:
        print i

练习2 :给定一个dict,计算所有同学的平均分。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum = 0.0
for v in d.itervalues():
    sum+=v
print sum/len(d)

练习3:请根据dict,打印出 name : score,最后再打印出平均分 average : score。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum = 0.0
for k, v in d.iteritems():
    sum = sum + v
    print k,":",v
print 'average', ':', sum/len(d)

生成列表

写列表生成式时,把要生成的元素 x * x 放到前面,后面跟 for 循环,就可以把list创建出来
列表生成式的 for 循环后面还可以加上 if 判断
for循环可以嵌套,因此,在列表生成式中,也可以用多层 for 循环来生成列表。

练习1:
print [x*(x+1) for x in range(1,100,2)]
练习题2:
def capital_letter(L):
  return [x.upper() for x in L if isinstance(x,str)]  #变成大写的,且排除掉不是字符串的
print capital_letter(['hello','world',123])
练习3:
对于字符串 'ABC' 和 '123',可以使用两层循环,生成全排列:
L = []
for m in 'ABC':
    for n in '123':
        L.append(m + n)
练习4:找到从左到右倒过来一样的三位数
L=[]
for a in range(1,10):
    for b in range(0,10):
        for c in range(0,10):
            if a==c:
                L.append(100*a+10*b+c)
print (L)

需要注意区分,形参和实参;全局变量和局部变量

上一篇下一篇

猜你喜欢

热点阅读