用函数连接程序的变量



我的程序必须从用户那里获取整数N(例如5(,创建一个从1到20的N个整数随机数列表(例如[1,15,12,19,5](,并使用函数计算这些数字的平均值和标准偏差。到目前为止,我的程序是:

import random
import math
def stats(calculation):
    '''
    [9,20,15,9,11,19,2,4,16,8] -> MO = 11.30, SD = 6.07
    '''
    L=[]
    total = 0
    mathsum = 0
    for i in range(0,N,1):
        x=random.randint(1,20)
        L.append(x)
    for num in L:
        total += num
    MO = (total)/N
    for i in range(0,N,1):
        mathsum +=(L[i]-MO)**2
    sd = math.sqrt((1/(N-1))*mathsum)
    return N, L, '{:2.2f}'.format(MO), '{:2.2f}'.format(sd)
N=int(input('Give integer: '))
results = stats(N)
print('Number of integers: ', N)
print('List: ',L)
print('Average: ', MO, end='t')
print('Standard deviation: ', sd)

它只显示列表的编号,但之后它给出错误,无法打印其他三个元素(L、MO、sd(。

问题出在哪里?

问题是您分配给results但没有解压缩的return语句。请看以下内容:

import random
import math
def stats(size):
    '''
    [9,20,15,9,11,19,2,4,16,8] -> MO = 11.30, SD = 6.07
    '''
    L=[random.randint(1,20) for _ in range(size)]
    total = sum(L)
    MO = total / size
    mathsum = sum((x-MO)**2 for x in L)
    sd = math.sqrt((1/(size-1))*mathsum)
    return L, '{:2.2f}'.format(MO), '{:2.2f}'.format(sd)
N=int(input('Give integer: '))
results = stats(N)
print('Number of integers: ', N)
print('List: ', results[0])
print('Average: ', results[1], end='t')
print('Standard deviation: ', results[2])

请注意,函数内部定义的变量不能由外部作用域访问。反之亦然,但不建议使用(globals函数中使用(。由于您返回的值超过 1 个,因此results成为您可以索引以获取内容tuple


撇开错误不谈,你的代码逻辑是合理的,但太冗长了。Python允许你编写更短,更整洁的代码。

您的代码存在一些设计问题,导致您遇到错误。

  1. 你的函数接受一个参数(calculation(,但不对它做任何事情。相反,它依赖于N是一个全局变量。这通常被认为是一个糟糕的设计。

  2. 您的函数返回一个元组,但您的调用代码不会对它执行任何操作。相反,它尝试访问在函数中创建的局部变量,从而导致NameError

作为修复,我建议将信息正确传递给函数,并且该函数应返回字典而不是元组(这将允许更清晰地访问返回的值而不是记住索引(。

def stats(n):
    '''
    [9,20,15,9,11,19,2,4,16,8] -> MO = 11.30, SD = 6.07
    '''
    L = []
    total = 0
    mathsum = 0
    for i in range(0, n, 1):
        x = random.randint(1, 20)
        L.append(x)
    for num in L:
        total += num
    MO = total / n
    for i in range(0, n):
        mathsum += (L[i] - MO) ** 2
    sd = math.sqrt((1 / (n - 1)) * mathsum)
    return {'n': n,
            'numbers': L,
            'average': '{:2.2f}'.format(MO),
            'sd': '{:2.2f}'.format(sd)}

n = int(input('Give integer: '))
results = stats(n)
print('Number of integers: ', results['n'])
print('List: ', results['numbers'])
print('Average: ', results['average'], end='t')
print('Standard deviation: ', results['sd'])

相关内容

  • 没有找到相关文章

最新更新