练习2 数字求和
编写一个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循环或列表解析来遍历其中每一个元素。
def mysum(*numbers):
output = 0
for number in numbers:
output += number
return output
print(mysum(10, 20, 30, 40)) 鱼油你好!这个练习的关键在于理解 *numbers 会把所有传入参数收集成一个元组。你给的代码里有个常见的小错误:
def mysum(*numbers):
output = 0
for number in numbers:
output += number
return output# 这个 return 缩进错了
上面代码中 return output 写在 for 循环内部,导致第一次循环就返回,结果只加了第一个数,后面的数根本没处理。应该把它移到循环外面,等所有数字加完后再返回。
正确写法:
def mysum(*numbers):
output = 0
for number in numbers:
output += number
return output# 循环结束后才返回
print(mysum(10, 20, 30, 40))# 输出 100
另外,也可以直接用内置的 sum 配合元组:
def mysum(*numbers):
return sum(numbers)
这样更简洁。记住:星号参数收集的 numbers 永远是元组,空调用时就是空元组,所以 mysum() 会返回 0(因为 sum(()) 也是 0)。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 练习1 猜数字游戏
正如你可能知道的,Python只提供两种循环:for和while。理解如何编写和使用它们,将在你的整个Python职业生涯中起到重要作用。
事实上,几乎每种类型的数据都知道自己该如何配合for循环工作,这使得for循环十分有用且非常普遍。如果你正在处理数据库记录、
XML文件元素,或是使用正则表达式搜索文本后得到的结果,那么你会经常用到for循环。在这个练习中,你需要做的是:·编写一个
函数(guessing_game),不接受任何传入参数。·运行时,这个函数会从0到100(含100)中随机选出一个整数。·然后让用户猜测
选出的数是哪个。·每当用户输入一个猜测结果时,程序会给出下面三个提示之一:—太高;—太低;—猜对了。·如果用户猜对了,
则程序终止;否则会让用户再次尝试。·只有在用户猜对的情况下,程序才会退出。我们会使用random模块中的randint函数
(参见链接22)来生成一个随机整数。比如,你可以这么写:
import random
def guessing_game():
answer = random.randint(0, 100)
while True:
user_guess =int(input('What is your guess? '))
if user_guess == answer:
print(f'Right! The answer is {user_guess}')
break
if user_guess < answer:
print(f'Your guess of {user_guess} is too low!')
else:
print(f'Your guess of {user_guess} is too high!')
guessing_game() ling830 发表于 2026-08-08 07:33
练习1 猜数字游戏
正如你可能知道的,Python只提供 ...
你的 mysum 函数里,return output 被错误地放在了 for 循环内部。这样第一次循环就会直接返回,导致只累加了第一个数字(例如返回 10,而不是 100)。
修正方法:把 return output 移到 for 循环结束后。
def mysum(*numbers):
output = 0
for number in numbers:
output += number
return output
print(mysum(10, 20, 30, 40))# 输出 100
另外,你也提到了练习1的代码,那个 guessing_game 函数本身运行是正确的,没有问题。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页:
[1]