【问题标题】:What is wrong with maxx functionmaxx 函数有什么问题
【发布时间】:2019-04-24 13:52:45
【问题描述】:

我是新来的。我正在尝试回答以下问题。

  1. 编写一个程序,生成一个包含 20 个介于 1 和 100 之间的随机数的列表。 (a) 打印清单。 (b) 打印列表中元素的平均值。 (c) 打印列表中的最大值和最小值。 (d) 打印列表中第二大和第二小的条目 (e) 打印列表中有多少个偶数。

我的问题是问题(c)

v=[...]

maxx=v[0]

for i in range(0,len(v)-1):
    if maxx<v[i]:
        maxx=v[i]
print(maxx)

我知道这个算法可以解决我的问题。但是我想了解我的 max 函数有什么问题

import random 

v=[]
sum=0
avg=0
maxx=0
minn=0

def generate(v):
    for i in range(0,20): 
        x=random.randint(1,100) 
        v.append(x)
    return v 
print(generate(v))

def soma(sum):
    for k in range(0,len(v)): 
        sum=sum+v[k] 
    return sum

def average(avg):
    avg=soma(sum)/20 
    return avg
print(average(avg))

def maxx(maxx):
    maxx=v[0] 
    for i in range(0,len(v)-1):
        if v[i+1]>v[i]:
            maxx=v[i+1]
        else:
            maxx=v[i]
    return maxx
print(maxx(maxx))


I expect the function to generate the maximum number in the list and not the last number as it is happening.


import random
v=[]
sum=0
avg=0
maxx=0
minn=0

def generate(v):
    for i in range(0,20): 
        x=random.randint(1,100) 
        v.append(x) 
    return v 
print(generate(v))

def soma(sum):
    for k in range(0,len(v)): 
        sum=sum+v[k]
    return sum

def average(avg):
    avg=soma(sum)/20 
    return avg
print(average(avg))

def maxx(maxx):
    maxx=v[0] 
    for i in range(0,len(v)-1):
        if v[i+1]>v[i]:
            maxx=v[i+1]
        else:
            maxx=v[i]
    return maxx
print(maxx(maxx))

【问题讨论】:

  • 我不明白这个问题。什么是输入,什么是期望输出与实际输出?
  • 对不起,我把 cood 发了两次。我想知道我的 maxx 函数有什么问题。它不返回最大值,而是返回数组中的最后一个值
  • if v[i+1]&gt;v[i] – 每个元素都应与当前最大值进行比较,而不是与之前的元素进行比较。
  • 但是例如对于 i =0 如果 v[1]>v[0] 最大值应该是 v[1] 否则是 v[0]。为什么我不能这样做
  • maxx=v[0] 还会覆盖您传递给函数的任何参数。

标签: python python-3.x


【解决方案1】:

您设置maxx 函数的方式只会让列表的最后一个或倒数第二个元素成为最大值。而不是与v[i] 比较,您需要与您当前的最大值进行比较:

def maxx(maxx):
    maxx=v[0] 
    for i in range(0,len(v)-1):
        if v[i+1]>maxx:
            maxx=v[i+1]
    return maxx

【讨论】:

    【解决方案2】:

    有几种方法可以改进您的实现,包括使用 enumerate 循环列表索引和项目以及使用可挖掘的名称变量。

    def maxx(_list):
        _max = -float("inf")
        for n in _list:
        # use for i,n in enumerate(_list): if you need i
            if n > _max:
                _max = n
        return _max
    

    【讨论】:

    • 但我的理解是,您以低于列表中任何元素的值开始最大值。但是使用该函数,您正在循环列表,并且您仅将当前元素与您设置的最大值进行比较。但是你怎么知道当前元素是否比之前的元素大或小呢?
    • 这就是为什么我将当前元素 v[j] 与下面的 v[j+1] 进行比较
    • @Luismaia1994 你不在乎它是否比之前的大。您只关心它是否比您迄今为止见过的最大的更大。
    • 如果你从不使用i,为什么还要使用enumerate()
    • 我想我现在明白了。我们最初将 tha maxx 设置为我们知道低于列表中所有值的值。但是当我们迭代时,我们将当前元素与 maxx 进行比较。如果当前元素高于 maxx,则当前元素变为 maxx。谢谢大家的回答
    猜你喜欢
    • 2013-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-11
    • 2017-03-26
    相关资源
    最近更新 更多