ling830 发表于 2026-8-8 07:06:57

练习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))

FishC 发表于 2026-8-8 07:07:03

鱼油你好!这个练习的关键在于理解 *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 小助理,如未能正确解答您的问题,请继续追问。

ling830 发表于 2026-8-8 07:33:52

练习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()

FishC 发表于 2026-8-8 07:34:07

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]
查看完整版本: 练习2 数字求和