0
def list_stats(values, num_int, low_range, high_range):  # function to fix
    values = generate_integer_list(num_int, low_range, high_range)
    new_val = values.sort()
    low_val = new_val[0]
    high_val = new_val[num_int - 1]
    total = 0
    i = 0
    for num in range(num_int-1):
        i = i + 1
        num = values[i]
        total = total + num
    avg = total/num_int
    return total, low_val, high_val, avg


def generate_integer_list(num_int, low_range, high_range): # generates random #'s
    values = []
    for count in range(num_int):
        number = random.randint(low_range, high_range)
        values.append(number)
    return values

我必须在生成的列表中找到最大和最小的数字,得到列表中所有数字的总和和平均值。我的数字是由 generate_integer_list 生成的。

我使用 sort 函数对生成的列表进行排序,然后获取该列表中的第一个和最后一个数字作为最小和最大。但是,返回的值无论如何都不正确。我已经尝试给排序列表一个新名称,但这不起作用。

我可以返回正确值的唯一方法是如果我打印排序列表,但对于这个问题我不允许这样做。我怎样才能解决这个问题?

4

2 回答 2

2

您计算总跳过第一个值的代码;只需直接循环数字列表,无需在此处创建范围:

total = 0
for num in values:
    total = total + num

您可以在不使用排序的情况下做到这一点;您已经必须遍历所有数字:

def list_stats(values, num_int, low_range, high_range):
    values = generate_integer_list(num_int, low_range, high_range)
    total = 0
    low_val = high_val = values[0]  # something to start with
    for num in values:
        total += num
        if num < low_val:
            low_val = num
        if num > high_val:
            high_val = num
    avg = total / num_int
    return total, low_val, high_val, avg

我替换为数字total = total + numtotal += num因为它归结为相同的东西。

我还从值列表中的第一个值开始low_val和结束;high_val然后,循环将在进行时找到任何更低或更高的值。

于 2013-11-05T18:41:32.587 回答
1

如果这是您选择的方向,您可以使用几个 BIF 来简化此操作。

sum(numlist) # the sum of your random list
sum(numlist) / len(numlist) # average your list
sorted(numlist, key=int)[0] # lowest element
numlist[len(numlist) - 1] # list is already sorted this gives you the max

只是快速的片段;我没有重写你的代码。

于 2013-11-05T19:16:39.533 回答