💁 个人主页:黄小黄的博客主页
❤️ 支持我:👍 点赞 🌷 收藏 🤘关注
🎏 格言:一步一个脚印才能承接所谓的幸运本文来自专栏:Python基础教程
欢迎点击支持订阅专栏 ❤️
文章目录
函数即 把具有独立功能的代码块组织成一个小模块。 可以在开发让我们在开发程序时 提高编写效率以及提高代码的复用率。
这么说可能体会不到函数的好处,我们来实际体会一下,下面的代码块是用于打印乘法口诀表的,当程序运行时,就会打印一次乘法口诀表:
for i in range(1, 10):
for j in range(1, i+1):
print(j, " * ", i, " = ", i*j, end="\t")
print()
如果需要将乘法口诀表打印100次呢? 难道需要将上面的代码块写 100次吗?答案是否定的,当我们学习了函数过后,只需要像下面那样定义一个函数,将打印乘法口诀表功能的代码块封装到函数里面:
def myprint():
for i in range(1, 10):
for j in range(1, i+1):
print(j, " * ", i, " = ", i*j, end="\t")
print()
当需要打印乘法口诀表时,只需要调用定义过的 myprint() 函数即可,下面的代码就将乘法口诀表打印了6次!!!
myprint()
myprint()
myprint()
myprint()
myprint()
myprint()
怎么样?是不是非常简洁!下面我们开始系统学习函数相关的知识~
🆔 函数声明的基本格式如下:
def 函数名(参数列表):
封装的代码
返回值
...
🍑 说明:
def是英文define的缩写;📖 标识符的命名规则:(回顾)
🐱 在实际开发中,如果希望给函数添加注释,则应该在 定义函数 下方,使用 连续的三对引号 添加文档注释:
在引号中间添加对函数的说明性文字;
在函数调用的位置,使用快捷键 CTRL + Q 可以查看函数的说明信息;

在函数定义的上方,应该与其他的代码及注释保留两个空行。
函数的 参数在函数名后的小括号内部填写, 多个参数见以 ,分隔。
简单演示一下求两数之和的函数,在该函数中有两个参数,调用该函数则会打印两数和的结果,每次调用传入的参数不同,打印的结果不同,使函数更加灵活:
def sum(num1, num2):
result = num1 + num2
print("%d + %d = %d" % (num1, num2, result))
sum(1, 3)
sum(99, 1)

🐍 辨析实参与形参
🆔 在程序开发中,如果希望 函数在执行结束后返回一个结果,以便调用者进行后续处理, 则需要给函数一个返回值。
return 关键字返回结果;return 表示返回,当该语句执行,则后续代码不会执行。我们对之前的求和函数设计一个返回值,使 sum 返回两数的和,在外部调用时筛选出和大于5的情况
def sum(num1, num2):
return num1 + num2
for i in range(1, 6):
for j in range(i, 6):
result = sum(i, j)
if result > 5:
print(i, " + ", j, " = ", result)

🆔 即在一个函数里面调用了另外的函数,我们来看下面这段代码:
def method01():
print("method01")
method02()
print("method01")
def method02():
print("---method02---")
method01()

🐉说明:
斐波那契数列(Fibonacci sequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(Leonardo Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)
🐈 问题: 请你编写一函数 Fabonacci(n),其中参数 n 代表第 n 次的迭代,来实现求斐波那契第 n 项值的功能。
1️⃣ 方式一:使用递归
Tips:如果同学不熟悉递归,可以参考下博主的这篇文章:
❤️深入浅出悟透递归❤️
# 返回斐波那契数列的第 n 项
def fabonacci(n):
if n == 1 or n == 2:
return 1
else:
return fabonacci(n-1) + fabonacci(n-2)
2️⃣ 方式二:使用循环
# 返回斐波那契数列的第 n 项
def fabonacci(n):
if n == 1 or n == 2:
return 1
else:
num1 = 1 # 第一项
num2 = 1 # 第二项
result = 0 # 记录结果
while n > 2:
result = num1 + num2
num1 = num2
num2 = result
n = n - 1
return result
测试代码如下,用于打印斐波那契数列的前10项:
# 尝试打印斐波那契前10项
for i in range(1, 11):
print(fabonacci(i), end=" ")

质数(素数)是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
🐈 问题: 编写一函数 Prime(n),对于已知正整数 n,判断该数是否为素数,如果是素数,返回 True,否则返回 False。
📖 分析: 只需要循环判断一个数是否能被除了1和本身外的其他数整除
🖊 参考代码:
# 判断是否为素数,如果是则返回True
def prime(n):
if n < 2:
return False
i = 2
while i <= n**0.5:
if n % i == 0:
return False
i = i + 1
return True
🐈 问题: 利用上题中判断素数的函数,编写程序找出 1~100 之间的所有孪生素数(若两个素数之差为 2,则 这两个素数就是一对孪生素数) 。例如: 3 和 5、5 和 7、11和 13 等都是孪生素数。
🖊 参考代码:
# 判断是否为素数,如果是则返回True
def prime(n):
if n < 2:
return False
i = 2
while i <= n**0.5:
if n % i == 0:
return False
i = i + 1
return True
# 测试打印1-100的孪生素数
# 使用枚举的方式
for i in range(1, 101):
if prime(i) and prime(i + 2):
print(str(i) + "与" + str(i+2), end=" ")
🍑 运行结果:

🐈 问题: 编写一函数,将摄氏温度与华氏温度互转。(公式: C*1.8+32=F)
🖊 分析: 本题涉及到互相转化问题,即一个函数实现两种功能,考虑设置两个参数,一个用于判断是摄氏度转华氏度还是华氏度转摄氏度,一个用于传入温度值
🖊 参考代码:
# 华氏度与摄氏度转化 C*1.8+32=F
def calculate(typeNum, inputnum):
# typeNum 为 1 则为摄氏度转华氏度
if typeNum == 1:
result = inputnum * 1.8 + 32
print(inputnum, "℃ = ", result, "F")
# typeNum 为 1 则为摄氏度转华氏度
elif typeNum == 2:
result = (inputnum - 32) / 1.8
print(inputnum, "F = ", result, "℃")
else:
print("输入有误")
# 测试
typenum = int(input("请选择输入的类型,摄氏度/华氏度(1/2): "))
inputnum = float(input("请输入温度值: "))
calculate(typenum, inputnum)
🍑 运行结果:


🐈 问题: 堆里有 16 颗豆子,有两个玩家(假设一个玩家是电脑)每个玩家都可以从堆中的 16 颗豆子中取出 1 颗, 2 颗或者 3 颗豆子。每个玩家在每回合中必须从堆中取出一定数目的豆子。玩家轮流取出豆子,取到最后 一颗豆子的玩家是输家。 请你编写程序,模拟豆堆游戏。
🖊 思路: 写一个人取豆子的函数 ; 帮电脑设计一个算法,实现取豆子的函数 ; 在主程序中进行输流调用,谁最后拿到 1 粒豆子谁就输。
🖊 参考代码:
import random
# 玩家
def people(n):
print("-------------------------------------------")
while True:
pick_people = int(input("你打算取的豆子数: "))
if 1 <= pick_people <= 3:
break
else:
print("每次取出的豆子数应为1——3,请重新输入!")
continue
print("豆子剩余数量:", n - pick_people)
return n - pick_people
# 电脑
def computer(n):
pick_computer = random.randint(1, 3)
print("电脑玩家取出豆子数:", pick_computer)
print("豆子剩余数量:", n - pick_computer)
return n - pick_computer
def play():
total = 16
print("豆子的总数为:", total)
while True:
total = people(total)
if total <= 0:
print("很抱歉,你输了")
break
total = computer(total)
if total <= 0:
print("恭喜你,你赢了")
break
# 开始游戏
play()
🍑 运行结果:

🌟以上便是本文的全部内容啦,后续内容将会持续免费更新,如果文章对你有所帮助,麻烦动动小手点个赞 + 关注,非常感谢 ❤️ ❤️ ❤️ !
如果有问题,欢迎私信或者评论区!

共勉:“你间歇性的努力和蒙混过日子,都是对之前努力的清零。”

关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
我想在一个没有Sass引擎的类中使用Sass颜色函数。我已经在项目中使用了sassgem,所以我认为搭载会像以下一样简单:classRectangleincludeSass::Script::FunctionsdefcolorSass::Script::Color.new([0x82,0x39,0x06])enddefrender#hamlengineexecutedwithcontextofself#sothatwithintemlateicouldcall#%stop{offset:'0%',stop:{color:lighten(color)}}endend更新:参见上面的#re
我正在尝试用ruby中的gsub函数替换字符串中的某些单词,但有时效果很好,在某些情况下会出现此错误?这种格式有什么问题吗NoMethodError(undefinedmethod`gsub!'fornil:NilClass):模型.rbclassTest"replacethisID1",WAY=>"replacethisID2andID3",DELTA=>"replacethisID4"}end另一个模型.rbclassCheck 最佳答案 啊,我找到了!gsub!是一个非常奇怪的方法。首先,它替换了字符串,所以它实际上修改了
我有一些代码在几个不同的位置之一运行:作为具有调试输出的命令行工具,作为不接受任何输出的更大程序的一部分,以及在Rails环境中。有时我需要根据代码的位置对代码进行细微的更改,我意识到以下样式似乎可行:print"Testingnestedfunctionsdefined\n"CLI=trueifCLIdeftest_printprint"CommandLineVersion\n"endelsedeftest_printprint"ReleaseVersion\n"endendtest_print()这导致:TestingnestedfunctionsdefinedCommandLin
几个月前,我读了一篇关于rubygem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
如何在Ruby中按名称传递函数?(我使用Ruby才几个小时,所以我还在想办法。)nums=[1,2,3,4]#Thisworks,butismoreverbosethanI'dlikenums.eachdo|i|putsiend#InJS,Icouldjustdosomethinglike:#nums.forEach(console.log)#InF#,itwouldbesomethinglike:#List.iternums(printf"%A")#InRuby,IwishIcoulddosomethinglike:nums.eachputs在Ruby中能不能做到类似的简洁?我可以只
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的