Python焚诀之函数

Python焚诀之函数

Python焚诀之函数

题目1:简单问候函数

编写一个函数say_hello(name),接收一个名字参数,返回"你好,{name}!"格式的字符串。

要求:

  1. 定义函数,带一个参数
  2. 使用 return 返回结果
  3. 调用函数并打印输出

运行示例:

请输入你的名字:李四 你好,李四!

# 1defsay_hello(name):returnf'你好,{name}!'name=input('请输入你的名字:')print(say_hello(name))

题目2:两数之和

编写一个函数add(a, b),接收两个数字参数,返回它们的和。

要求:

  1. 定义函数,接收两个参数
  2. 使用 return 返回计算结果
  3. 获取用户输入的两个数字(转换为浮点数)
  4. 调用函数并输出结果

运行示例:

请输入第一个数字:10 请输入第二个数字:20 两数之和为:30

# 2defadd(a,b):returna+b x=float(input('num1:'))y=float(input('num2:'))print(f'{x}+{y}={add(x,y)}')

题目3:最大值函数

编写一个函数max_of_three(a, b, c),接收三个数字参数,返回其中最大的那个数。

要求:

  1. 定义函数,接收三个参数
  2. 使用 if-elif-else 判断大小
  3. 使用 return 返回最大值
  4. 调用函数并输出结果

运行示例:

请输入第一个数字:15 请输入第二个数字:8 请输入第三个数字:22 最大值为:22

#3 给出两种参考defmax3(a,b,c):ifb>a:t=bifb<c:t=celse:t=belifb<a:t=aifa<c:t=celse:t=aelse:t=aifa<c:t=celse:t=areturnt x=float(input('the first number: '))y=float(input('the second number: '))z=float(input('the third number: '))print(f'max is{max3(x,y,z)}')defmax_of_three(a,b,c):ifa>=banda>=c:returnaelifb>=aandb>=c:returnbelse:returnc x=float(input('请输入第一个数字:'))y=float(input('请输入第二个数字:'))z=float(input('请输入第三个数字:'))print(f'最大值为:{max_of_three(x,y,z)}')

题目4:姓名处理函数

编写一个函数format_name(first, last),接收姓和名两个参数,返回"姓.名"格式的字符串。

要求:

  1. 定义函数,接收两个参数
  2. 使用 return 返回格式化的结果
  3. 获取用户输入的姓和名
  4. 调用函数并输出结果

运行示例:

请输入姓:张 请输入名:三 格式化结果为:张.三

#4defformat_name(s1,s2):returnf"{s1}.{s2}"s1=input('请输入姓:')s2=input('请输入名:')print(f'格式化结果为 :{format_name(s1,s2)}')

题目5:列表求和

编写一个函数sum_list(nums),接收一个数字列表,返回列表中所有数字的总和。

要求:

  1. 定义函数,接收一个列表参数
  2. 使用 for 循环遍历列表累加
  3. 使用 return 返回总和
  4. 定义列表并调用函数输出结果

运行示例:

列表 [10, 20, 30, 40] 的总和为:100

#5defsum_list(a):s=0foriinrange(len(a)):s+=a[i]returnf'列表{a}的总和为:{s}'defsum_list1(a):s=0foriina:# i = 10, 20, 30, 40(元素本身)s+=ireturnf'列表{a}的总和为:{s}'a=[10,20,30,40]print(sum_list(a))# C vs Python 循环碎碎念# C语言(计数循环):# c# for (int i = 0; i < 3; i++) {# printf("%d", i); // i = 0, 1, 2# }# // 思维:我要循环3次,i记录当前是第几次# Python(遍历循环):# python# for i in [10, 20, 30]: or for i in range(len(a)) :# print(i) # i = 10, 20, 30# # 思维:我要遍历列表里的每个元素,i是元素本身# Python 不可以 for i in 具体数字# 选择了 in range 累加就要 s += a[i]# 选择了 for i in a 直接用 s += a

题目6:名字统计器

编写一个程序,反复让用户输入名字,输入quit时结束,然后将所有名字存入列表,最后打印所有名字。

要求:

  1. 使用 while 循环接收输入
  2. 使用列表的 append() 方法添加名字
  3. 输入quit时使用 break 退出循环
  4. 输出所有输入的名字

运行示例:

请输入名字(输入quit结束):张三 请输入名字(输入quit结束):李四 请输入名字(输入quit结束):王五 请输入名字(输入quit结束):quit 你输入的名字有:['张三', '李四', '王五']

#6defcollect():a=[]whileTrue:name=input('请输入名字:')ifname=='quit':breaka.append(name)returna result=collect()print(result)

题目7:列表平均值

编写一个函数average_list(nums),接收一个数字列表,返回列表中所有数字的平均值。

要求:

  1. 定义函数,接收一个列表参数
  2. 使用 sum() 函数求和,再除以列表长度
  3. 使用 return 返回平均值(保留2位小数)
  4. 定义列表并调用函数输出结果

运行示例:

列表 [85, 90, 78, 92, 88] 的平均值为:86.60
#7defaverage_list(l):s=0foriinl:s+=i avg=s/len(l)returnavg a=[85,90,78,92,88]print(f'列表{a}的平均值为:{average_list(a):.2f}')

Python函数焚诀:从C语言思维到Python思维的转变

今天完成了七个Python基础练习,从最简单的问候函数到列表平均值计算,看似简单的题目却让我深刻体会到思维转换的重要性。

最大的挑战来自for循环。作为C语言的"老用户",我习惯性地认为for i in range(len(a))中的i就是计数器,循环次数由range()决定。这种惯性思维导致我在做列表求和时犯了一个经典错误:for i in range(len(a)): s += i,结果把索引值0+1+2+3=6当成了列表元素的和。当意识到错误时,我才真正理解了Python中for循环的本质——遍历可迭代对象中的每个元素,而不是计数。range(len(a))生成的是[0,1,2,3],遍历的是索引;直接for i in a遍历的才是元素本身。这个认知的转变,让我对"迭代"有了更深的理解。

另一个让我印象深刻的是函数参数的传递。在题目6中,我最初写了一个带参数s的函数,却发现参数完全没用,最后删掉才明白——函数参数是为了接收外部数据,如果函数内部不需要,就不该定义。还有break必须放在循环内部的规则,也是通过报错才真正记住的。

此外,变量的命名习惯也值得反思。namenamessumtotal,看似细微的差异,却直接影响代码的可读性。用names表示列表、name表示单个名字,这种单复数对应关系让我不再混淆。

回顾这七道题,真正的问题不在语法本身,而在于用C语言的思路写Python。Python的"万物皆对象"和"迭代器"概念,需要我用新的思维方式去理解。接下来的学习中,我要时刻提醒自己:忘记C语言的计数器思维,拥抱Python的迭代哲学