Python焚诀之函数

0

题目1:简单问候函数

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

要求:

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

运行示例:

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

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

题目2:两数之和

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

要求:

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

运行示例:

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

#  2
def add ( a,b ) :
    return a+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 给出两种参考
def max3 (a , b, c) :
    if b > a:
        t = b
        if b < c:
            t = c
        else:
            t = b
    elif b < a:
        t = a
        if a < c:
            t = c
        else:
            t = a
    else:
        t = a
        if a < c:
            t = c
        else:
            t = a
    return t
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)}')

def max_of_three(a, b, c):
    if a >= b and a >= c:
        return a
    elif b >= a and b >= c:
        return b
    else:
        return c

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. 调用函数并输出结果

运行示例:

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

#4
def format_name(s1,s2) :
    return f"{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

#5
def sum_list(a):
    s = 0
    for i in range (len(a)) :
        s += a[i]
    return f'列表{a}的总和为: {s}'

def sum_list1(a):
    s = 0
    for i in a:          # i = 10, 20, 30, 40(元素本身)
        s += i
    return f'列表{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
你输入的名字有:['张三', '李四', '王五']

#6
def collect () :
    a =[]
    while True :
     name = input('请输入名字:')
     if name == 'quit' :
       break
     a.append(name)
    return a
result = collect()
print(result)

题目7:列表平均值

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

要求:

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

运行示例:

列表 [85, 90, 78, 92, 88] 的平均值为:86.60
#7
def average_list(l) :
    s = 0
    for i in l :
        s += i
    avg = s / len(l)
    return avg
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的迭代哲学

更多推荐