python从入门到入土教程(2)——控制流和函数

一 内置函数和库

https://docs.python.org/3.6/library/functions.html

二 控制流

* if condition_1:
    statement_block_1
* elif condition_2:
    statement_block_2
* else:
    statement_block_3
x = 114514

if x%3 == 0:
    print(x, "能被3整除")
else:
    print(x, "不能被3整除")

“闰年”:公历年份被4整除,且若该年可被100整除,则必须同时被400整除。

#year = input("请输入您想查询的年份:")
year = int(year)
if year < 0:
    print("silly b")
elif year % 400 == 0:
    print("这一年是闰年")
elif year % 4 == 0:
    print("这一年是闰年")
else:
    print("这一年不是闰年")
#age = int(input("请输入你家狗狗的年龄: "))

if age < 0:
    print("silly b")
elif age == 1:
    print("相当于 14 岁的人。")
elif age == 2:
    print("相当于 22 岁的人。")
elif age > 2:
    human = 22 + (age -2) * 5
    print("对应人类年龄: ", human)

2 while

i = 1
while condition:
    statement
    i = i + 1 
#前100数之和
n = 100
 
sum = 0
counter = 1
while counter <= n:
    sum = sum + counter
    counter += 1
print("1 到 %d 之和为: %d" % (n,sum))
#while 和 else一起使用
count = 0
while count < 6:
    print (count, " 小于 6")
    count = count + 1
else:
    print (count, " 大于或等于 6")

3 for


for <variable> in <sequence>:
    <statements>
else:
    <statements>
for i in 'Python':
    print(i)
for i in range(0,10,2):
    print(i)
dict = {'name':['Sim','Zhang','Wang'],
        'age':[27,24,28],
        'gender':['M','F','M'],
        'add':['JS','ZJ','AH']}
for key,values in dict.items():
    print(key,'-->',values)
x = 10

if x>1:
    for i in range(2, x):
        if x%i==0:
            print(x,"不是质数")
            print(i,"是一个质因子")
            break
    else:
        print(x,"是质数")
else:
    print(x,"不是质数")

break和continue语句及循环中的else子句

  • break 语句可以跳出 for 和 while 的循环体。
  • 如果你从 for 或 while 循环中终止,任何对应的循环 else 块将不执行。
for letter in 'silly b':     # 第一个实例
    if letter == 'y':
        break
    print ('当前字母为 :', letter)

for letter in 'silly b':     # 第一个实例
    if letter == 'y':
        continue
    print ('当前字母为 :', letter)
var = 10                    # 第二个实例
while var > 0:              
    print ('当前变量值为 :', var)
    var = var -1
    if var == 5:
        break
var = 10                    # 第二个实例
while var > 0:              
    var = var -1
    if var == 5:
        continue
    print ('当前变量值为 :', var)

Python pass是空语句,是为了保持程序结构的完整性

#可以用enumerate来同时循环索引和值
sequence = [12, 34, 34, 23, 45, 76, 89]
for i, j in enumerate(sequence):
    print(i, j)
people_rows = ["希腊,索福克勒斯","俄罗斯,普希金","法国,莫里哀","英国,拜伦","中国,老子","印度,泰戈尔","德国,歌德","中国,李白","俄罗斯,契诃夫","法国,德彪西"]

split_list = []

for row in people_rows:
    split_row = row.split(',') # 以逗号分隔每个字符串
    split_list.append(split_row) # 将分隔后的字符串存入新的列表
for i in split_list:
    print(i) # 查看嵌套列表

从split_list中遍历挑选出所有中国的名人,并将他们的名字存为列表china_people

三 函数

你可以定义一个由自己想要功能的函数,以下是简单的规则:

函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
def area(width, height):
    return width * height
area(3,4)

定义一个二次函数求根的函数

# 最大公约数(Great Common Denominator):同时被两个数整除的最大正整数
def gcd(a,b):

    # 保证a大b小
    if b > a:
        a, b = b, a


    while a % b != 0:    # 当a不整除b(余数不为0)的时候
        a,b = b, a%b     # b->a, a%b->b

    return b

函数的参数

def power(x):
    return x * x
#X就是必选参数
#当我们调用power函数时,必须传入有且仅有的一个参数x

#如果我们要计算x3怎么办?可以再定义一个power3函数,但是如果要计算x4、x5……怎么办?我们不可能定义无限多个函数。

#你也许想到了,可以把power(x)修改为power(x, n),用来计算x**n
def power(x, n):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
#由于我们经常计算x2,所以,完全可以把第二个参数n的默认值设定为2,而不用每次都输入
def power(x, n=2):
    s = 1
    while n > 0:
        n = n - 1
        s = s * x
    return s
  • 从上面的例子可以看出,默认参数可以简化函数的调用。设置默认参数时,有几点要注意:

  • 一是必选参数在前,默认参数在后,否则Python的解释器会报错(思考一下为什么默认参数不能放在必选参数前面);

  • 二是如何设置默认参数。

  • 当函数有多个参数时,把变化大的参数放前面,变化小的参数放后面。变化小的参数就可以作为默认参数。

#在Python函数中,还可以定义可变参数。顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个
#给定一组数字a,b,c……,请计算a2 + b2 + c2 + ……
## *nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见
##定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号。
def calc(numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
calc([1,2,3])
##可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple。
##而关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。


def person(name, age, **kw):
    print('name:', name, 'age:', age, 'other:', kw)
    
#函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数
person('Michael', 30)
            
##也可以传入任意个数的关键字参数:

person('Adam', 45, gender='M', job='Engineer')
  • 关键字参数有什么用?它可以扩展函数的功能。
  • 比如,在person函数里,我们保证能接收到name和age这两个参数,但是,如果调用者愿意提供更多的参数,我们也能收到。
  • 试想你正在做一个用户注册的功能,除了用户名和年龄是必填项外,其他都是可选项,利用关键字参数来定义这个函数就能满足注册的需求。
#和可变参数类似,也可以先组装出一个dict,然后,把该dict转换为关键字参数传进去
extra = {'city': 'Beijing', 'job': 'Engineer'}
person('Jack', 24, city=extra['city'], job=extra['job'])
person('Jack', 24, **extra)
## 如果要限制关键字参数的名字,就可以用命名关键字参数,例如,只接收city和job作为关键字参数
def person(name, age, *, city, job):
    print(name, age, city, job)
#和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。
#命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错
  • 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。
  • 但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
def f2(a, b, c=0, *, d, **kw):
    print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
##函数的递归
def fact(n):
    if n==1:
        return 1
    return n * fact(n - 1)
#Fibonacci数列
def Fibonacci(i):
    if i == 0:
        return 0
    elif i == 1:
        return 1
    else:
        return Fibonacci(i-1) + Fibonacci(i-2)
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352

推荐阅读更多精彩内容