鱼C论坛

 找回密码
 立即注册
查看: 22|回复: 3

[技术交流] 练习2 数字求和

[复制链接]
发表于 1 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x

编写一个mysum函数,它与内建的sum函数做的是同样的事情。但不同的是,它需要接受数量可变的参数,而不是将一个
数字序列当作唯一的参数。因此,尽管你可以直接调用sum([1,2,3])​,但你现在需要改为调用mysum(1,2,3)
或者mysum(10,20,30,40,50)​。

mysum函数是一个简单的例子,有助于说明如何使用Python的星号运算符(也就是*)来允许一个函数接受任意数量的参
数。我们在参数名numbers前面加上*,也就是告诉Python,这个参数将会接受所有的传入值,因此numbers永远是一个元
组。即使没有任何参数被传入这个函数,numbers仍会是一个元组,即便是一个空元组,也始终是一个元组类型。当你想
接受数量未知的参数时,星号运算符就会变得特别有用。一般来说,你会期望每次传入的参数都是同样类型的,即便Python
对此并没有强制的规则。根据我的经验,在这种情况下,你应该先拿到由所有的输入值组成的元组(在本例中是numbers)​,
然后用for循环或列表解析来遍历其中每一个元素。

  1. def mysum(*numbers):
  2.     output = 0
  3.     for number in numbers:
  4.         output += number
  5.         return output
  6. print(mysum(10, 20, 30, 40))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 1 小时前 | 显示全部楼层
鱼油你好!这个练习的关键在于理解 *numbers 会把所有传入参数收集成一个元组。你给的代码里有个常见的小错误:


  1. def mysum(*numbers):
  2.     output = 0
  3.     for number in numbers:
  4.         output += number
  5.         return output  # 这个 return 缩进错了
复制代码

上面代码中 return output 写在 for 循环内部,导致第一次循环就返回,结果只加了第一个数,后面的数根本没处理。应该把它移到循环外面,等所有数字加完后再返回。


正确写法:


  1. def mysum(*numbers):
  2.     output = 0
  3.     for number in numbers:
  4.         output += number
  5.     return output  # 循环结束后才返回

  6. print(mysum(10, 20, 30, 40))  # 输出 100
复制代码

另外,也可以直接用内置的 sum 配合元组:


  1. def mysum(*numbers):
  2.     return sum(numbers)
复制代码

这样更简洁。记住:星号参数收集的 numbers 永远是元组,空调用时就是空元组,所以 mysum() 会返回 0(因为 sum(()) 也是 0)。


以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 1 小时前 | 显示全部楼层
练习1 猜数字游戏
正如你可能知道的,Python只提供两种循环:for和while。理解如何编写和使用它们,将在你的整个Python职业生涯中起到重要作用。
事实上,几乎每种类型的数据都知道自己该如何配合for循环工作,这使得for循环十分有用且非常普遍。如果你正在处理数据库记录、
XML文件元素,或是使用正则表达式搜索文本后得到的结果,那么你会经常用到for循环。在这个练习中,你需要做的是:·编写一个
函数(guessing_game)​,不接受任何传入参数。·运行时,这个函数会从0到100(含100)中随机选出一个整数。·然后让用户猜测
选出的数是哪个。·每当用户输入一个猜测结果时,程序会给出下面三个提示之一:—太高;—太低;—猜对了。·如果用户猜对了,
则程序终止;否则会让用户再次尝试。·只有在用户猜对的情况下,程序才会退出。我们会使用random模块中的randint函数
(参见链接22)来生成一个随机整数。比如,你可以这么写:
  1. import random

  2. def guessing_game():
  3.     answer = random.randint(0, 100)

  4.     while True:
  5.         user_guess =int(input('What is your guess? '))
  6.         
  7.         if user_guess == answer:
  8.             print(f'Right! The answer is {user_guess}')
  9.             break

  10.         if user_guess < answer:
  11.             print(f'Your guess of {user_guess} is too low!')

  12.         else:
  13.             print(f'Your guess of {user_guess} is too high!')

  14. guessing_game()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 1 小时前 | 显示全部楼层
ling830 发表于 2026-08-08 07:33
练习1 猜数字游戏
正如你可能知道的,Python只提供 ...


你的 mysum 函数里,return output 被错误地放在了 for 循环内部。这样第一次循环就会直接返回,导致只累加了第一个数字(例如返回 10,而不是 100)。

修正方法:把 return output 移到 for 循环结束后。


  1. def mysum(*numbers):
  2.     output = 0
  3.     for number in numbers:
  4.         output += number
  5.     return output

  6. print(mysum(10, 20, 30, 40))  # 输出 100
复制代码


另外,你也提到了练习1的代码,那个 guessing_game 函数本身运行是正确的,没有问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-8-8 08:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表