条件判断与函数

简要回顾

变量
序列:元组是不可变序列,字符串也是不可变序列;列表是可变序列
语句:

  • 赋值语句
  • 运行函数/方法语句
  • 条件语句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)

你可能感兴趣的:(条件判断与函数)