如何将默认输入与条件输入相结合,以便在Python中执行计算

2024-04-25 21:17:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个函数,根据输入计算一些东西。我已经尝试过这样做,如果没有给出输入,那么它在默认情况下被设置为0。我要么提供ad,要么提供bc,但不提供交叉

import numpy as np

data_t = np.random.uniform(2.25, 2.75, size=10)
data_a = np.random.uniform(9.5, 10.5, size=(20,10));  data_a = list(data_a)
data_b = np.random.uniform(6.5, 7.5, size=(20,10));   data_b = list(data_b)
data_c = np.random.uniform(14.5, 15.5, size=(20,10)); data_c = list(data_c)
data_d = np.random.uniform(18.5, 19.5, size=(20,10)); data_d = list(data_d)

def TEST(t, a=0, b=0, c=0, d=0):
    t = np.array(t)
    if a and d == 0:
        m, n = np.array(a.shape)
        x1 = np.array([[b[jx, ix] + t[jx]  for ix, i in enumerate(range(n))] for jx, _ in enumerate(range(m))])
        y1 = np.array([[c[jx, ix] + t[jx]  for ix, i in enumerate(range(n))] for jx, _ in enumerate(range(m))])
    elif b and c == 0:
        m, n = np.array(a.shape)
        x2 = np.array([[a[jx, ix] - t[jx]  for ix, i in enumerate(range(n))] for jx, _ in enumerate(range(m))])
        y2 = np.array([[d[jx, ix] - t[jx]  for ix, i in enumerate(range(n))] for jx, _ in enumerate(range(m))])
    else: 
        raise ValueError('Something is wrong.')

test = TEST(t=data_t, a=data_a, b=0, c=0, d=data_d)

很明显,我做了一些与Python如何解释ifand相结合的错误的事情,但我不知道怎样做才是正确的方法。我最终得到了我创建的ValueError

  • 如何正确地做我想做的事

Tags: andintestfordatasizenprange
1条回答
网友
1楼 · 发布于 2024-04-25 21:17:20

谢谢你,克里斯·道尔,让我明白了。正如他在上面的评论中所说,我应该将条件设置为if a == 0 and d == 0。我还通过以下方式改进了其余部分:

def TEST(t, a=0, b=0, c=0, d=0):
    if a == 0 and d == 0:
        x1 = np.array([[i + j for i in k] for j, k in zip(t, b)])
        y1 = np.array([[i + j for i in k] for j, k in zip(t, c)])
        return x1, y1
    elif b == 0 and c == 0:
        x2 = np.array([[i - j for i in k] for j, k in zip(t, a)])
        y2 = np.array([[i - j for i in k] for j, k in zip(t, d)])
        return x2, y2
    else:
        raise ValueError('Something is wrong.')

现在一切都很好,这都要感谢@Chris Doyle。再次感谢你

相关问题 更多 >

    热门问题