0

我有一个制作表格的功能

--------------------------------------------------------------------
|Name  |     A      |     B     |     C      |    D     |    E      |
--------------------------------------------------------------------
|  1   |    1.0     |    2.0    |    3.0     |   4.0    |   5.0     |
|  2   |    6.0     |    7.0    |    8.0     |   9.0    |   0.0     |
|  3   |    1.1     |    2.2    |    3.3     |   0.1    |   0.3     |
--------------------------------------------------------------------

之后我需要询问用户他们需要做什么,要么得到最小值,要么得到最大值。之后我需要问他们是否想通过行或列做 min 到目前为止我可以得到第 1 行的 min 但是当我尝试做第 2 行或任何列时它仍然给我第 1 行的相同值.

def minimum(y,l):
    for y in l:
        if y == 1:
            i= 0
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
        elif y == 2:
            i = 5
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
        return a


def menu(x,l): 
    if x == 1:
        make_table(l)
    if x == 2:
        y = input("enter a row (as a number) or a column (as an uppercase letter)")
        if y in [ '1','2','3']:
            mini = minimum(y, l)
            print("Minimum is:", mini)
    if x == 3:
        print ('bye')

我需要一个关于 min 的帮助,然后我可以用同样的方式为 max 工作,谢谢

4

3 回答 3

0

为什么不将您的值存储在一个 numpy 二维数组中?

import numpy as np

a = np.array(l).reshape(3,5)
minByCol = np.amin(a, axis=0) #array([ 1. ,  2. ,  3. ,  0.1,  0. ])
minByRow = np.amin(a,axis=1)  #array([ 1. ,  0. ,  0.1])

编辑:由于你不能导入任何东西,我认为这是某种任意的作业问题。

我不倾向于为你做功课,但这里有一些想法。你为什么不吃一片而不是a=min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])你可能有的尴尬a = min(l[i:i+5])

而不是采取案例并i为每个案例手动设置值,为什么不根据值设置iy,然后您可以摆脱if语句。对于有 5 列的表格,按行排列,您将拥有i = (y-1)*5

于 2013-10-31T01:37:29.737 回答
0
def minimum(y,l):
    a = 0
    for y in l:
        if y == 1:
            i= 0
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
        elif y == 2:
            i = 5
            w=(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
            a= min(l[i],l[i+1],l[i+2],l[i+3],l[i+4])
    return a

如果用户输入是 3,你会怎么做?你还没有考虑那个案子。

于 2013-10-31T00:52:57.107 回答
0

您是否知道可以调用minmax使用列表作为参数的事实?

假设您的数据类似于:

l= [[1.0, 2.0, 3.0, 4.0, 5.0],
    [6.0, 7.0, 8.0, 9.0, 0.0],
    [1.0, 2.2, 3.3, 0.1, 0.3]]

如果用户想要第 y 行的最小值,您只需调用min(l[y-1])(也就是说,如果您的行从 1 开始编号)

现在,如果用户想要列的最小值,那就有点困难了(但只是一点点)

  • 首先,您必须从信中获取索引。函数将ordchar 转换为 int。“A”是 65,因此要获取列索引,请调用index = char(letter)-65.

  • 然后,您需要转置原始数据的行和列。该zip功能将帮助您做到这一点。

所以:

index = char(letter) - 65
transpo = zip(*l)
print min(transpo[index])
于 2013-10-31T11:34:19.613 回答