Как объединить ввод по умолчанию с условным для выполнения вычислений в Python - PullRequest
0 голосов
/ 14 октября 2019

Я хотел бы сделать функцию, которая вычисляет что-то в зависимости от ввода. Я попытался сделать так, чтобы, если ввод не был задан, то по умолчанию он был установлен как 0. Я либо предоставлю a и d или b и c, но не кроссовер.

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 интерпретирует if в сочетании с and, но я понятия не имею, как правильно сделать это. В итоге я получаю ValueError, который я создал.

  • Как правильно сделать то, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 15 октября 2019

Спасибо, @Chris Doyle, за то, что поправили меня. Как он сказал в своем комментарии выше, я должен установить условное значение 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. Еще раз спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...