【问题标题】:Returning multiple integers as separate variables返回多个整数作为单独的变量
【发布时间】:2012-10-29 09:48:23
【问题描述】:

我正在尝试制作一个程序,从用户那里获取 5 个整数,然后找到它们的平均值。我已经将它设置为接收 5 个数字,但是如何将它们全部作为单独的变量返回,以便以后可以使用它们?谢谢!

def main():
    x = 0
    testScoreNumber = 1
    while x < 5:
        getNumber_0_100(testScoreNumber)
        x += 1
        testScoreNumber += 1

    calcAverage(score1, score2, score3, score4, score5)

    print(calculatedAverage)

def getNumber_0_100(testnumber):
    test = int(input("Enter test score " + str(testnumber) + ":"))
    testcount = 0
    while testcount < 1:
        test = int(input("Enter test score " + str(testnumber) + ":"))

        if test > 0 or test < 100:
            testcount += 1

    return test

^这里有问题,每次运行这个函数,我希望它返回一个不同的值给不同的变量。前任。测试1,测试2,测试3。

def calcAverage(_score1,_score2,_score3,_score4,_score5):
    total = _score1 + _score2 + _score3 + _score4 + _score5
    calculatedAverage = total/5

    return calculatedAverage

【问题讨论】:

    标签: python python-3.x return return-value


    【解决方案1】:

    您需要将结果存储在某处。动态创建变量名通常(总是?)是个坏主意(尽管可以使用globals)。存储结果的典型位置是列表或字典——在这种情况下,我会使用列表。

    更改这部分代码:

    x = 0
    testScoreNumber = 1
    while x < 5:
        getNumber_0_100(testScoreNumber)
        x += 1
        testScoreNumber += 1
    

    到:

    results = []
    for x in range(5):
        results.append( getNumber_0_100(x+1) )
    

    可以进一步压缩:

    results = [ getNumber_0_100(x+1) for x in range(5) ]
    

    然后您可以将该结果列表传递给您的下一个函数:

    avg = get_ave(results[0],results[1],...)
    print(avg)
    

    或者,您可以使用拆包运算符来简写:

    avg = get_ave(*results)
    print(avg)
    

    【讨论】:

    • +1 可以很好地解释所有步骤。 (虽然“从 1 到 5 的所有数字”最好写成 x for x in range(1, 6) 而不是 x+1 for x in range(5)。)
    • @abarnert -- 是的。我不知道哪个更好。我喜欢range(5),因为很明显你最终会得到 5 个元素——这似乎是对 OP 代码的更接近的翻译——但从 6 中减去 1 也不是太难:-)跨度>
    • 我也不确定哪个更好,这就是我写“可能”的原因。我有一个朋友曾经教过入门编程,他让学生在第一天写一个closed_range函数,这样他们就可以写closed_range(1, 5),直到他们习惯于从0开始思考……我认为这可能会发生有点过分了,但是嘿,我不是老师。
    • 我在这里和那里教一门课,但主要是研究生——他们通常能够弄清楚这样的事情:)
    • getNumber的参数改成什么?还是有关系?需要对该功能进行哪些更改?谢谢。
    【解决方案2】:

    返回函数不负责说明调用者对其返回值做了什么。在您的情况下,让 main 有一个添加返回值的列表会很简单。你可以这样做:

    scores = []
    for i in range(5):
        scores.append(getNumber_0_100(i))
    
    calcAverage(*scores)
    

    请注意,*scores 是将列表作为参数传递给您的 calcAverage 函数。最好让 calculateAverage 成为一个通用函数,它接受一个值列表并计算它们的平均值(即不仅仅适用于五个数字):

    def calcAverage(numbers):
        return sum(numbers) / len(numbers)
    

    然后您只需使用calcAverage(scores) 调用它

    编写第一部分的更 Pythonic 方式可能是 scores = [getNumber_0_100(i) for i in range(5)]

    【讨论】:

      【解决方案3】:

      Python 允许你返回一个元组,当你收到返回值时你可以展开这个元组。例如:

      def return_multiple():
          # do something to calculate test1, test2, and test3
          return (test1, test2, test3)
      
      val1, val2, val3 = return_multiple()
      

      这里的限制是您需要知道要返回的变量数量。如果输入的数量是可变的,则最好使用列表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-20
        • 2021-01-14
        • 2015-01-16
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多