Python学习笔记三之编程练习
1. 编程第一步
# 求解斐波纳契数列#/user/bin/python3#Fibonacci series:斐波那契数列#两个元素的总和确定了下一个数a,b=0,1while b<10:print(b)a,b=b,a+b*************************************#output:112358**************************************#end关键字while b<10:print(b,end=',')a,b=b,a+b
2. if语句
#!/usr/bin/python3age = int(input("请输入你家狗狗的年龄: "))print("")if age <= 0:print("你是在逗我吧!")elif age == 1:print("相当于 14 岁的人。")elif age == 2:print("相当于 22 岁的人。")elif age > 2:human = 22 + (age -2)*5print("对应人类年龄: ", human)### 退出提示input("点击 enter 键退出")******************************************************#将以上脚本保存在dog.py文件中,并执行该脚本:******************************************************$ python3 dog.py 请输入你家狗狗的年龄: 1相当于 14 岁的人。点击 enter 键退出
# !/usr/bin/python3num=int(input("输入一个数字:"))if num%2==0:if num%3==0:print ("你输入的数字可以整除 2 和 3")else:print ("你输入的数字可以整除 2,但不能整除 3")else:if num%3==0:print ("你输入的数字可以整除 3,但不能整除 2")else:print ("你输入的数字不能整除 2 和 3")
将以上程序保存到 test_if.py 文件中,执行后输出结果为:
$ python3 test.py
输入一个数字:6
你输入的数字可以整除 2 和 3
3. 循环语句
3.1 标题while
普通循环与无限循环
#!/usr/bin/env python3#普通循环n = 100sum = 0counter = 1while counter <= n:sum = sum + countercounter += 1print("1 到 %d 之和为: %d" % (n,sum))********************************************#无限循环var=1while var==1:num=int(input("输入一个数字:"))print("你输入的数字是:",num)print("Good bye!")
while使用else:
#!/usr/bin/python3count = 0while count < 5:print (count, " 小于 5")count = count + 1else:print (count, " 大于或等于 5")
3.2 for循环
sites=["Baidu","Google","Runoob","Taobao"]for site in sites:if site == "Runoob":print("菜鸟教程!")breakprint("循环数据" + site)else:print("没有循环数据!")print("完成循环!")
内置函数Range()使用
for i in range(5):print(i)***for i in range(5,9):print(i)***for i in range(0,10,3)print(i,end=',')#output:0,3,6,9
3.3 break 和 continue 语句及循环中的 else 子句
#!/usr/bin/python3for letter in 'Runoob':# 第一个实例if letter == 'o': # 字母为 o 时跳过输出continueprint ('当前字母 :', letter)var = 10# 第二个实例while var > 0: var = var -1if var == 5: # 变量为 5 时跳过输出continueprint ('当前变量值 :', var)print ("Good bye!")
当前字母 : R
当前字母 : u
当前字母 : n
当前字母 : b
当前变量值 : 9
当前变量值 : 8
当前变量值 : 7
当前变量值 : 6
当前变量值 : 4
当前变量值 : 3
当前变量值 : 2
当前变量值 : 1
当前变量值 : 0
Good bye!
3.4 pass语句
Python pass是空语句,是为了保持程序结构的完整性。
pass 不做任何事情,一般用做占位语句,如下实例:
>>>while True:...pass # 等待键盘中断 (Ctrl+C)
for letter in 'Runoob':if letter == 'o':passprint('执行pass块')print('当前字母:',letter)print("Good bye!")
当前字母 : R
当前字母 : u
当前字母 : n
执行 pass 块
当前字母 : o
执行 pass 块
当前字母 : o
当前字母 : b
Good bye!
4.迭代器与生成器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
字符串,列表或元组对象都可用于创建迭代器:
>>>list=[1,2,3,4]>>>it=iter(list) #创建迭代器对象>>>print(next(it)) #输出迭代器的下一个元素1>>>print(next(it))2>>>
+for循环
list=[1,2,3,4]it=iter(list)for x in it:print(x,end=" ")**************************************# output: 1,2,3,4
4.1 迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法iter() 与next() 。
如果你已经了解的面向对象编程,就知道类都有一个构造函数,Python 的构造函数为init(), 它会在对象初始化的时候执行。
iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了next() 方法并通过 StopIteration 异常标识迭代的完成。
next() 方法(Python 2 里是 next())会返回下一个迭代器对象。
创建一个返回数字的迭代器,初始值为 1,逐步递增 1:
class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 1return xmyclass = MyNumbers()myiter = iter(myclass)print(next(myiter))print(next(myiter))print(next(myiter))print(next(myiter))print(next(myiter))*************************************#output:12345
4.2 生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next()
方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
以下实例使用 yield 实现斐波那契数列:
#!/usr/bin/python3import sysdef fibonacci(n): # 生成器函数 - 斐波那契a, b, counter = 0, 1, 0while True:if (counter > n): returnyield aa, b = b, a + bcounter += 1f = fibonacci(10) # f 是一个迭代器,由生成器返回生成while True:try:print (next(f), end=" ")except StopIteration:sys.exit()********************************************************#output: 0 1 1 2 3 5 8 13 21 34 55
5.函数
#!/usr/bin/python3# 计算面积函数def area(width, height):return width * heightdef print_welcome(name):print("Welcome", name)print_welcome("Runoob")w = 4h = 5print("width =", w, " height =", h, " area =", area(w, h))**************************************************************#output:Welcome Runoobwidth = 4 height = 5 area = 20
不定长参数:
加了星号 * 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
#!/usr/bin/python3# 可写函数说明def printinfo( arg1, *vartuple ):"打印任何传入的参数"print ("输出: ")print (arg1)print (vartuple)# 调用printinfo 函数printinfo( 70, 60, 50 )*****************************************#output:70(60,50)****************************************#如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。如下实例:printinfo( 10 )#output:10
加了两个星号 ** 的参数会以字典的形式导入。
#!/usr/bin/python3# 可写函数说明def printinfo( arg1, **vardict ):"打印任何传入的参数"print ("输出: ")print (arg1)print (vardict)# 调用printinfo 函数printinfo(1, a=2,b=3)**************************************#输出: 1{'a': 2, 'b': 3}