简要回顾
变量
序列:元组是不可变序列,字符串也是不可变序列;列表是可变序列
语句:
- 赋值语句
- 运行函数/方法语句
- 条件语句if
- 循环语句:for, while
- 函数语句:def
- 模块语句:import
条件判断
常用的条件判断有如下几种:
(1)if
(2)if else
(3)if elif else
(4)单语句多条件判断
- and or
- if num < 0 or num > 10
score = float(input("please input your score : "))
if score >= 90:
print('A')
elif score >= 60:
print('B')
else:
print('C')
>>>please input your score : 90
A
for循环
for循环可以遍历任何序列的项目,如一个列表或者一个字符串
for i in range(5)
for i in list(range(5))
嵌套循环:将下述两个列表一一对应转换成一个字典
key = ['name', 'age', 'addr']
value = ['Bob', 22, 'Beijing']
key = ['name', 'age', 'addr']
value = ['Bob', 22, 'Beijing']
dic = dict(zip(key, value))
print(dic)
>>>{'name': 'Bob', 'age': 22, 'addr': 'Beijing'}
key = ['name', 'age', 'addr']
value = ['Bob', 22, 'Beijing']
lst = []
for i in range(len(key)):
lst.append([key[i], value[i]])
dic = dict(lst)
print(dic)
>>>{'name': 'Bob', 'age': 22, 'addr': 'Beijing'}
While循环
while循环执行语句可以是单个语句或者是语句块,判断条件可以使任何表达式,任何非零、或非空null的值均为True
一定要注意while语句的无限循环
(1)while-else
在你不确定要循环多少次的时候可以考虑这种循环
count = 0
while count < 5:
print(count, " is less than 5")
count = count + 1
else:
print(count, " is not less than 5")
# 逻辑和if-else一样
(2)循环控制语句:break、continue、pass
- break语句用来终止循环语句,即便循环条件没有False条件或者序列还没有递归完,也会停止执行循环语句(在执行过程中终止循环,并且跳出整个循环)
s = 0
n = 1
while n > 0:
s = s + n
n = n + 1
if n == 20:
break
print(s)
s = 0
for i in range(10):
for j in range(5):
s = s + (i*j)
print('第%i次计算' %(i+j))
if s > 20:
break
print('结果为%i' % s)
- continue:在语句执行过程中跳出该次循环,执行下一次循环
s = 0
for i in range(50):
if i%2 == 0:
s += i
else:
continue
print('第%i次计算'%(i/2))
print('结果为%i' % s)
- pass:空语句,为了保持程序结构的完整性,不中断,也不跳过
for letter in 'Python':
if letter == 'h':
pass
print( '当前字母 : h,但是我pass了')
print( '当前字母 :', letter)
print( "Good bye!")
# pass是空语句,是为了保持程序结构的完整性。(不中断也不跳过)
函数
完成某个工作的代码块,由语句组成
(1)函数的组成:
- 函数名称
- 函数参数
- 函数内的算法:可以使用help(print)来查看具体函数
def compute(x, y):
(2)数学函数
- abs(a)
- divmod(a,b):获取商和余数
- pow(a,b)
- round(a,b):获取指定位数的小数
- max(lst), min(lst), sum(lst), sorted(lst),len(lst)
(3)类型转换函数
- int(str); float(int/str); str(int)
- list(iterable)
- dict(iterable)
- enumerate(iterable)
- set(iterable)
- hex(int), oct(int), bin(int), chr(int), ord(str):进制转换
- chr(int):转换数字为相应ASCI码字符,chr(65) = 'A'
- ord(str):转换ASCI字符为相应的数字,ord('A') = 65
(4)其它函数
- eval():执行一个表达式,或字符串作为运算;eval('1+1') >>> 2
- exec():执行python语句,exec(print(''python))>>>python
- type():返回一个对象的类型
- id():返回一个对象的唯一标识
- help():调用系统内置的帮助函数
- isinstance()
- issubclass()
- globals():返回当前全局变量
- reversed(sequence):生成一个逆序序列对象
自定义函数
(1)函数声明
def compute(x, y, z=1.5):
(2)函数的入参
- 位置参数:上述的x, y
- 关键字/默认参数:用于指定默认值或者可选参数,如上述z
注意:关键字参数必须在位置参数的后面 - 可变参数:有一个*,调用时入参可以是任意类型,列表,元组等等,但是入参读入的时候就是一个元组
def func(*x):入参可以是任意类型,但是入参读入时是一个元组
def f(*x):
print(x)
return x
f(1,2,3) >>>(1, 2, 3)
f([33,444]) >>>([33, 444],)
f(('a', 'b')) >>> (('a', 'b'),)
- 函数作为入参:
函数可以作为参数传给其他函数
def func(some_list, function):
return [function(x) for x in some_list]
ints = [1,2,3,4]
func(ints, lambda x : 2 * x)
(3)函数的返回值
- 函数同时返回多个值,本质上是返回了一个对象,即元组,而元组之后又被拆包为多个结果变量
匿名函数
(1)匿名函数的创建
lambda 语句:用于创建匿名函数
(2)匿名函数声明:
lambda 变量 : 一行表达式
一种通过单个语句生成函数的方式,其结果是返回值,匿名函数使用lambda 关键字定义
f = lambda a, b, c: a + b + c
type(f)
function
例子:以下两个函数等价
def func(x):
return x * 2
res = lambda x: x * 2
(3)总结
lambda作为匿名函数,是不需要函数名的,当你需要一个函数,但是又不用动脑筋想名字,可以考虑匿名函数
lambda的主体是一个表达式,而不是一个代码块
lambda只有一行,仅仅能在lambda表达式中封装有限的逻辑进去
局部变量与全局变量
定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域
(1)局部变量
局部变量只能在其被声明的函数内部访问
(2)全局变量
全局变量可以在整个范围内访问,调用函数时,所有在函数内部声明的变量名称都被加入到作用域中。
(3)如何把局部变量转变为全局变量(一般不推荐用)
- 在函数内部,在局部变量前面加global 关键字: global a
def f():
global m
m = 'hello world'
return m
m = 10
print(m) >>>10
print(f()) >>> hello world
print(m) >>> hello world
函数练习题
(1)定义一个函数,求入参的数字的平均值
def f(*m):
sum = 0
lst = []
for i in m:
while str(i).isnumeric():
sum = sum + i
lst.append(i)
break
else:
print('输入内容包含非数字')
return sum / len(lst)
f(1, [1,2], 'a', 4, 5)
>>>输入内容包含非数字
输入内容包含非数字
3.3333333333333335
(2)请输入一个列表,并用该列表作为键,构造一个字典
lst = eval(input("please input a list"))
def func(lst):
return dict.fromkeys(lst, 0)
print(func(lst))
>>>please input a list['a', 'b', 'c']
{'a': 0, 'b': 0, 'c': 0}
请注意eval的使用:如果不使用eval函数的话,那么lst是无法得到一个list
(3)定义一个函数,可统计出输入任意的字符串的英文字母、空格、数字和其它字符的个数
- st.isalpha()
- st.isspace()
- st.isdigit()
st = input('please input a string: ')
dic = {'alpha':0, 'space': 0, 'digit':0, 'others':0}
def f(string):
for i in string:
i.isspace
if i.isalpha():
dic['alpha'] += 1
elif i.isspace():
dic['space'] += 1
elif i.isdigit():
dic['digit'] += 1
else:
dic['others'] += 1
return dic
f(st)
>>>please input a string: aabbv &&&& 1244
{'alpha': 5, 'space': 5, 'digit': 4, 'others': 4}
(4)有1,2,3,4个数字,能组成多少个互不相同且无重复数字的两位数,都是多少
count = 0
for i in range(1,5):
for j in range(1,5):
if i != j:
num = i*10 + j
print(num)
count += 1
print(count)
(5)输入三个整数x,y,z,请把这三个数由小到大输出,可调用input函数(需要判断输入数据是否为数字)
def f(n):
lst = []
for i in range(1, n+1):
num = input("please input the %i-th number: "%i)
while num.isdigit() == False:
num = input("输入的内容不为数字,请重新输入第%i个数字: "%i)
else:
lst.append(float(num))
return sorted(lst)
f(3)
(6)输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
st = input("请输入一行字符:\n")
letters = 0
space = 0
digit = 0
others = 0
for c in st:
if c.isalpha():
letters += 1
elif c.isdigit():
digit += 1
elif c.isspace():
space += 1
else:
others += 1
print("输入的字符串中,有{}个字母,有{}个空格,有{}个数字,有{}个其他的字符".format(letters, space, digit, others))
(7)猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个;第二天早上又将剩下的桃子吃掉一半,又多吃了一个;以后每天早上都吃了前一天剩下的一半零一个;到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少?
num = 1 #最后一天剩一个
for day in range(9,0,-1):
m = (num+1) * 2
num = m
print("第%i天剩%i个桃子"%(day, num))
print('第一天一共采了%i个桃子'% num)
(8)猜数字问题,要求如下:随机生成一个整数;猜一个数字并输入; 判断是大是小,直到猜正确;判断时间
import time
import random
N = random.randint(0,100)
c = int(input("请输入一个数字,小于100\n"))
start = time.time()
while c != N:
if c > N:
print("太大了")
c = int(input("请输入一个数字,小于100\n"))
else:
print('太小了')
c = int(input("请输入一个数字,小于100\n"))
end = time.time()
time = end - start
print('恭喜你答对了,正确的数字为%i' %N)
print('一共花费时间为%f秒' % time)