collatz序列 python_python中的函数

1.什么是函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。

函数能提高应用的模块性,和代码的重复利用率。

2.定义一个函数

1.函数代码块以 def 关键词开头,后接函数标识符名称和圆括号()。

2.任何传入参数和自变量必须放在圆括号中间。圆括号之间可以用于定义参数。

3.函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。

4.函数内容以冒号起始,并且缩进。

5.return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

3.实例:

def hello():

print('hello')

print('python')

通过函数名来调用函数

hello()

761faf953fec873867ccb9bbe0a4dcda.png

4.#函数里面嵌套函数

def westos():

print('is westos')

def python():

print('is python')

python()

westos()

2694dce34fabdd5b4d50a9a491fa471e.png

5.参数

参数分为形参和实参

定义函数的时候的变量,叫形参(形参可以任意起名)

def welcome(a):

print('hello',a)

调用函数的时候,真实的数据信息,调用函数的时候传递的参数叫实参

welcome('tom')

welcome('lily')

baef5058d2cfc5d7604b86727751840c.png

形参:位置参数 默认参数 可变参数 关键字参数

1.位置参数 (位置参数:形参和实参必须保持一致)

def getInfo(name,age):# 按照位置传参数

print(name,age)

getInfo('westos',11)

getInfo(11,'westos')

getInfo(age=11,name='westos')

2.默认参数

def mypow(x,y=2): 定义函数,其中第二个形参的默认值为2

print(x**y)

mypow(2,3) 当调用函数的时候,传入两个实参,则使用传入的值进行运算

mypow(4) 当只传入一个值的时候,另一个使用默认参数值进行运算

d2c7143d1b23370f23eba77748653184.png

3.可变参数

当参数的个数不确定的时候,可以使用可变参数,来表示该函数可以接收任意个参数

在使用可变参数的时候:

其中a 表示对参数进行解包,将序列中的元素一个一个的拿出来。

a的对象类型是一个元组。

def mysum(a): # 定义函数的形参数是任意个

print(a)

print(a)

sum = 0

for item in a:

sum += item

print(sum)

nums = [1,2,3,4]

nums1 = (1,2,3,4)

nums2 = {1,2,3,4}

mysum(nums)

mysum(nums1)

mysum(nums2)

#当实参是一个列表的时候,返回值

1 2 3 4 # 解包列表的得到的数据

(1, 2, 3, 4) # a的对象类型为一个元组

10 # 最后的返回值

#当实参是一个元组的时候,返回值

1 2 3 4 # 解包元组的得到的数据

(1, 2, 3, 4) # a的对象类型为一个元组

10 # 最后的返回值

#当实参是一个集合的时候,返回值

1 2 3 4 # 解包集合的得到的数据

(1, 2, 3, 4) # a的对象类型为一个元组

10 # 最后的返回值

4 关键字参数

*k:是一个字典,可以传递任意多的key-value

def getStuInfo(name,age,*k):

print(name)

print(age)

print(k)

#如果要对字典进行解包,一个星号,获取所有的key值

#print(d)

getStuInfo('westos',11,a=1,b=2)

b2dd892683d6b18739beff90a0531a5e.png

6.参数的返回值

返回值:函数运算的结果,还需要进一步操作,给函数一个返回值

return用来返回函数执行的结果,如果函数没有返回值,默认返回None

一旦遇到return 函数执行结束,后面的代码不会执行

多个返回值的时候,python会帮我们封装成一个元组类型

def getStuInfo(name,age):

print(name)

print(age)

a = getStuInfo('toto',16)

print(a)

#显示结果:

toto

16

None # 函数没有返回值,函数执行的结果默认返回None

def getStuInfo(name,age):

print(name)

if name == 'toto' :

return 'name is toto' # 函数的返回值

print(age)

a = getStuInfo('toto',16)

print(a)

#输出结果:

toto

name is toto # 存在返回值,并且成功返回该返回值,之后的代码将不会再执行

6 、变量的作用域

个程序的所有的变量并不是在哪个位置都可以访问的。访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域如下:

全局变量

局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。

局部变量:在函数内部定义的变量,只在函数内部起作用,函数

执行结束后,变量会自动删除

a = 1 这是一个全局变量

print('outside:',id(a))

def fun():

global a #声明a为全局变量

a = 5

print('inside:',id(a))

fun()

print(a)

print(id(a))

结果

outside: 9462560 外面定义的a的ID为 9462560

inside: 9462688 在函数内定义a为全局变量 a的指向5他的ID发生改变

5

9462688

6b961a2df0a95d90eed9492463e01d9d.png

案例1.

编写一个函数cacluate, 可以接收任意多个数,返回的是一个元组.

元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数.

def cacluate(*x):

sum = 0

for i in x :

sum += i

average = sum/len(x)

li = []

for k in x :

if k > average :

li.append(k)

return (average,li)

#调用函数,测试效果

a = cacluate(2,6,8,9,2,5,7)

print(a)

3f09a9ba41f1ccfe7ccad9d904461959.png

案例2.

编写一个函数, 接收字符串参数, 返回一个元组,‘ehllo WROLD’

元组的第一个值为大写字母的个数, 第二个值为小写字母个数.

a211b04fdf9a2cb99b83a0244cd370c8.png

编写一个名为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 == 1:

exit()

elif number % 2 == 0:

return number // 2

else:

return 3 * number + 1

num = int(input('Num:'))

while True:

num = collatz(num)

print(num)

214d113178b48f0ce423887246dcb49d.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Collatz序列,又称为考拉兹猜想,是指对于任意大于1的自然数n,若n为偶数,则将n除以2,否则将n乘以3再加1,得到新的自然数后继续进行同样的操作,直到最终结果为1为止。现在我们来用 Python 实现 Collatz 序列: ```python def collatz(n): """ 根据考拉兹猜想计算Collatz序列 """ seq = [n] while n != 1: if n % 2 == 0: n = n // 2 else: n = n * 3 + 1 seq.append(n) return seq ``` 上面的代码,我们定义了一个 collatz 函数,它接收一个正整数 n 作为输入,并返回对应的 Collatz 序列。首先,我们创建一个列表 seq,将输入的 n 加入其。然后,我们开始进行循环,当 n 不等于 1 时,根据考拉兹猜想的规则计算下一个数,并将其加入 seq 列表。最后返回 seq 列表即可。 我们可以使用下面的代码来测试一下这个函数: ```python n = 27 seq = collatz(n) print(seq) ``` 输出结果为: ``` [27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1] ``` 可以看到,输入为 27 时,经过计算得到的 Collatz 序列为 [27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242, 121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350, 175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167, 502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479, 1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911, 2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732, 866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35, 106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值