函数定义与使用

1. 无参数的函数;
# # 定义函数, 并不会执行;
# def hello():
#     # 函数体
#     print("hello")
# # 调用函数
# hello()
# print(len("hello"))
# print()
# 2. 带有参数的函数
def fun1(name):
    # name = "fentiao"
    # 定义函数时的变量称为形式参数, 变量名可以任意起;
    print("hello %s" %(name))

fun1("fendai")     # 调用函数时的参数称为实参, 该参数必须是实际存在的;

函数返回值与return语句

# length = len('hello')
# print(length)
# # 函数调用时一般有返回值;没有返回值时, python中默认返回None;
# def hello():
#     print("hello")
# res = hello()
# print(res)
# def hello():
#     # return 返回的表达式或者变量
#     return "hello"
# res = hello()

# print(res)

return的应用

# 随机生成20个学生的成绩;
# 判断这20个学生成绩的等级;

import random
def get_level(score):
    if 90 < score <= 100:
        return 'A'
    elif 80 < score <= 90:
        return 'B'
    else:
        return 'C'
def main():
    for i in range(20):
        score = random.randint(1,100)
        print("成绩为%s, 等级为%s" %(score,get_level(score)))
    # scores = []
    # # 生成所有的成绩;
    # for count in range(20):
    #     scores.append(random.randint(1, 100))
    # # 根据所有的成绩判断等级;
    # for score in scores:
    #     print("成绩为%s, 等级为%s" %(score,get_level(score)))

main()

None

# C: true, false
# python: True, False
# null,  nil, undefined
var = None
print(type(var))
a = print()
print(a)
print(a == None)
# 函数如果有返回值, 可以将函数赋值给一个变量;
m = max([1,2,3,4,5])

print(m)

返回值有多个

def fun(a):   # a = [34, 1, 2, 3, 4, 5, 6, 7, 2378]
    # 我接收一个列表, 求这个列表的最大值,平均值, 最小值;
    max_num  = max(a)
    min_num = min(a)
    avg_num = sum(a)/len(a)
    # python函数中, 只能返回一个值;
    # 如果非要返回多个值, 会把返回的值封装为一个元组数据类型;
    return max_num, avg_num, min_num
variables  = fun([34, 1, 2, 3, 4, 5, 6, 7, 2378])

print(variables, type(variables))

形参_必选参数

def add(x, y, z):  # x=1, y=2
    return x + y + z

print(add(2,3,4))

形参_默认参数

# # 如果实参只有一个, x=。。。, y=2
# # 如果实参只有2个, x=2, y=3
# def mypow(x, y=2):
#     return x ** y
# print(mypow(2))
# print(mypow(2, 3))
# print内置函数, 默认的end='\n',进行换行, 当然可以指定end的值;
# print("hello")
# print("world")
# print("hello", end=',')

# print("world")

形参_可变参数

# 可变参数, *变量名;
# *args, args实质是一个元组;
def mySum(*args):
    print(args, type(args))
    return  sum(args)
print(mySum(1,2,3,4,5))
# 如果已经存在;列表, 但是要把列表的每一个元素作为参数, 可以直接*li进行解包;
# li = range(1,1001)
# li = (1,2,3)
li = {1,2,3}

print(mySum(*li))

形参_关键字参数

# **kwargs关键字参数; 接收的kwargs是字典类型;
def fun(**kwargs):
    print(kwargs, type(kwargs))
# fun(a=1, b=2)
# d = {
#      'a':1,
#      'b':2
#      }
# fun(**d)  # a=1,b=2
# <div id="s_tab"  width=100px  height=200px>网页</div>
def make_html(label, value, **kwargs):
    s = ""
    for k,v in kwargs.items():
        s += " %s=%s" %(k,v)1
    html = "<%s %s>%s</%s>" %(label, s, value, label)
    return html

print(make_html("div", "网页",id="s_tab",width=100, height=200)).

函数的作用域

# 作用域:
#   局部作用域:
#   全局作用域
# 全局作用域:作用于整个脚本
num = 10
print("out fun: id=", id(num))
def fun():
    # 局部作用域, 在函数运行时生效, 函数运行结束则释放;
    num = 2
    print("in fun: id=", id(num))
    print("in fun: num = %s" %(num))
fun()
print("out fun: num =%s" %(num))

#1.  num = 10
#2. fun
#3. num = 2(当函数执行结束, 变量num的值2被释放掉)

#4. num = 10

global关键字

num = 10
def fun():
    # 通过global关键字声明局部变量为全局变量, 让函数执行完, 2依旧生效;
    global num
    num = 2
fun()

print(num)

参数检测

# 参数检测
isinstance(1, int)
True
isinstance(1.0, float)
True
isinstance(2+3j, float)
False
isinstance(2+3j, tuple)
False
isinstance(1, (int, float, long, complex))
Traceback (most recent call last):
  File "<input>", line 1, in <module>
NameError: name 'long' is not defined
isinstance(1, (int, float,complex))
True

def add(x:int, y:int)->int:

"""

add: sum x and y
    :param x: int,float,.....
    :param y: int,float.....
    :return: int
    """
    if isinstance(x,(int,float,complex)) and isinstance(y,(int,float,complex)):
        return x + y
    else:
        print("Error")
# res = add("hello", 2)
# print(res)
help(add)
# *args, **kwargs
def fun(d=2, c=3):

pass

函数参数的顺序

# 必选,>  默认,>  可变,>  关键字
def fun( num1, num2=3, *args, **kwargs):

pass

参数易错点

# 定义函数, 默认参数的默认值尽量不是可变参数;
def fun(li=[]):
    li.append("hello")
    return li
print(fun())

print(fun())

迭代

# iterable: 可迭代的; 可以for循环;
# s = "hello"
# # for(int i=0, i<length(s); i++)
s = 'hello'
for i in s:
    print(i)
from collections import Iterable
isinstance(1, int)
print(isinstance(1,Iterable))
print(isinstance({1,2,3},Iterable))

print(reversed([1,2,3,4]))

函数练习

1.平方等式题目需求:

对于一个十进制的正整数, 定义f(n)为其各位数字的平方和,如:
    f(13) = 1**2 + 3**2 = 10
    f(207) = 2**2 + 0**2 + 7**2 = 53
    下面给出三个正整数k,a, b,你需要计算有多少个正整数n满足a<=n<=b,
    且k*f(n)=n
输入:
    第一行包含3个正整数k,a, b, k>=1,  a,b<=10**18, a<=b;
输出:
    输出对应的答案;
范例:
    输入: 51 5000 10000
    输出: 3
# k*f(n)=n

def f(n):
    res = 0
    for item in str(n):
        res += int(item) ** 2
    return res
def isOk(k, n):
    if k * f(n) == n:
        return True
    else:
        return False
def main():
    k = 51
    a = 5000
    b = 10000
    count = 0
    for i in range(a, b + 1):
        if isOk(k, i):
            count += 1
    print(count)

main()

2.Collatz序列
编写一个名为collatz()的函数,它有一个名为number的参数。
如果参数是偶数,那么collatz()就打印出number//2,并返回
该值。如果number是奇数,collatz()就打印并返回3*number+1。
然后编写一个程序,让用户输入一个整数,并不断对这个数
调用collatz(),直到函数返回值1(令人惊奇的是,这个序列
对于任何整数都有效,利用这个序列,你迟早会得到1!既使数学
家也不能确定为什么。你的程序在研究所谓的“Collatz序列”,
它有时候被称为“最简单的、不可能的数学问题”)。
- 输入:
    3
- 输出:
    10
    5
    16
    8
    4
    2
    1

# def collatz(number):
#     # 为偶数
#     if number % 2 == 0:
#         return number // 2
#     else:
#         return 3 * number + 1
# def main():
#     num = int(input('Num:'))  # 3
#     while True:
#         if collatz(num) == 1:  # collatz(3) 3, 10, 2
#             print(1)
#             break
#         else:
#             num = collatz(num)
#             print(num)
# main()

def collatz(number):
    if number == 1:
        exit(0)
    elif number %2 == 0:
        return number // 2
    else:
        return 3 * number + 1
num = int(input('Num:'))
while True:
    num = collatz(num)

print(num)

3.(华为机试练习)题目描述
数据表记录包含表索引和数值,请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。
- 输入描述:先输入键值对的个数,然后输入成对的index和value值,以空格隔开
- 输出描述:输出合并后的键值对(多行)
- 示例1
输入
4
0 1
0 2
1 2
3 4
输出
0 3
1 2

3 4

4.(华为)题目描述

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符
- 输入描述:将一个英文语句以单词为单位逆序排放。
- 输出描述:得到逆序的句子
示例1
- 输入
I am a boy
- 输出

boy a am I

s = input('s:')

print(" ".join(s.split()[::-1]))

Python函数及练习题相关推荐

  1. 整理了7道Python函数的练习题,希望对你学习函数有帮助

    1.简述普通参数,指定参数,默认参数,动态参数的区别 普通参数:以正确的顺序传入函数,调用时数量必须和声明的一样 指定参数:参数和函数调用关系密切,函数调用使用关键字参数来确定传入的参数值,参数 允许 ...

  2. 4道关于Python函数的练习题

    1.写函数,计算传入函数的字符串中数字.字母.以及其他的个数 def count_fuc(str):count_number=0count_a=0count_b=0for i in str:if i. ...

  3. Python函数文件练习题汇总

    1. 什么是局部变量? 定义在函数内.在class的方法内的变量叫做局部变量. 2. 什么是全局变量? 在模块内.在所有函数外面.在class外面,这就是全局变量. 3. 局部变量和全局变量有什么区别 ...

  4. python函数测验题_python函数练习题

    python函数练习题 python函数练习题所练习的不仅仅是函数如何使用,还包括基础知识的运用,尽管所要实现的算法在不使用函数的情况下也都能实现,而且很多算法在前面都已经学习实践过.但对初学者而言, ...

  5. Python 课课练 (八):函数课后练习题

    目录 一.函数课后练习题 练习前置知识 Chapter One : 开启 Python 之旅 Chapter Two : Python 语言基础.运算符与表达式.程序的控制结构合集 Chapter T ...

  6. Day03——Python函数

    函数定义和使用 1.语法 def 函数名(参数):...函数体...返回值 函数的定义主要有如下要点: def:表示函数的关键字 函数名:函数的名称,日后根据函数名调用函数 函数体:函数中进行一系列的 ...

  7. python基础编程练习题_Python随笔18:Python基础编程练习题1~2

    Python基础练习题1 求100之内自然数中最大的能被17整除的数. 解答:既然是求100以内的最大的数,可以使用range函数,且反向遍历.我们不必遍历完范围之内所有的数,因为第一个就是最大的,也 ...

  8. python函数装饰嵌套_python3--函数名本质,函数嵌套,闭包,装饰器

    python函数的嵌套和作用域链 函数的嵌套调用def max2(x,y): m = x if x > y else y  # 三元运算 return m def max4(a,b,c,d): ...

  9. python练习题及答案-python装饰器练习题及答案

    这篇文章主要介绍了python装饰器练习题及答案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一:编写装饰器,为多个函数加上认证的功能(用户的账号 ...

最新文章

  1. Eclipse相关问题总结
  2. App移动端性能工具调研
  3. 测试驱动开发 测试前移_测试驱动陷阱,第2部分
  4. ThreadLocal的练习代码
  5. 【EntityFramework系列教程五,翻译】在ASP.NET MVC程序中借助EntityFramework读取相关数据...
  6. gaia引擎分析(一)资源管理
  7. Android 即时通讯开发
  8. ACL限制vlan间的访问
  9. Ubuntu终端常用命令
  10. 生产和服务使用的计算机软件,Windows效率 篇三:Windows 10软件推荐,将你的生产力工具发挥到极致!...
  11. tomcat 的 catalina.out 日志文件,禁用
  12. 《奇迹的超级速读法》一书中集中注意力的训练方法
  13. 人工智能轨道交通行业周刊-第15期(2022.9.19-9.25)
  14. 软件企业的基本条件和认定流程
  15. 曲面的渐近方向和共轭方向、主方向、曲率线网
  16. 函数function的使用方法
  17. 贪心算法解决商场买赠问题(最简单,通俗易懂,附C++代码
  18. 搭建机器人电控系统——如何从零开发主控?——文件下载、工程配置、烧录
  19. 数字一阶低通滤波器simulink仿真
  20. 区块链革命 - 推荐序二 区块链已成为金融科技的底层技术

热门文章

  1. 晶闸管静态参数测试系统
  2. 企业通讯录让沟通协作效率更高
  3. 交叉编译使用libiconv
  4. 科东隔离升级到5.04
  5. 服务器和kad正在连接,P2P连不上kad网络怎么解决?P2P连不上kad网络的处理方法教程详解...
  6. go libp2p kad dht
  7. 微信小程序地址选择wx.chooseLocation
  8. 使用BP神经网络、RBF神经网络以及PSO优化的RBF神经网络对数据进行预测(Matlab代码实现)
  9. 图像增强三大类别:点增强、空域增强、频域增强
  10. [2022-03-21] sqlplus 显示格式化