Python edhesive 10.4

#python

#python

Вопрос:

Я пытался опубликовать этот вопрос на других веб-сайтах, и я получил, мягко говоря, мало отзывов, которые помогли бы. Это вопрос под рукой: изображение здесь

Код запрашивает разделить числа в 2d-массиве на 3, и если они не делятся на 3, то верните им значение 0 в массиве. Это текущий код, который у меня есть:

 a = [[34,38,50,44,39], 
     [42,36,40,43,44], 
     [24,31,46,40,45],
     [43,47,35,31,26],
     [37,28,20,36,50]]
     
#print it
def PrintIt(x):
    for r in range(len(x)):
        for c in range(len(x[0])):
            print(x[r][c], end = " ")
        print("")



   
#is supposed to divide and return the sum. but does not
def divSUM(x):
    sum = 3
    for r in range(len(x)):
        for c in range(len(x[0])):
            sum = x[r][c] % 3
            if sum != 0:
                return 0
            return sum
     
divSUM(a)
 

Разделение (divSUM) возвращает значение nothing. и я не уверен, будет ли работать numpy, каждый раз, когда я пытаюсь, он говорит, что он устарел, поэтому я предполагаю, что это не так. Любая помощь была бы приятной, но у меня в основном возникают проблемы с тем, чтобы не разделять число на 3 числа на 0.

Комментарии:

1. Ваш код не будет выполнять более одного цикла, так как ваш возврат находится внутри цикла.

Ответ №1:

При выполнении return функция останавливается. Вы можете добавить все значения в список и вернуть его.

Попробуйте это:

 a = [[34,38,50,44,39], 
     [42,36,40,43,44], 
     [24,31,46,40,45],
     [43,47,35,31,26],
     [37,28,20,36,50]]
     
#print it
def PrintIt(x):
    for r in x:
        for c in r:
            print(c, end = " ")
        print()


def divSUM(x):
    sum = 3
    output = []
    for r in x:
        tmp_lst = []
        for c in r:
            sum = c % 3
            if sum != 0:
                tmp_list.append(0)
            else:
                tmp_list.append(sum)
        output.append(tmp_lst)
   return output
     
print(divSUM(a))
 

Комментарии:

1. пожалуйста, поставьте галочку, если вам понравился мой ответ 🙂

2. Спасибо! Это очень помогло. Единственная проблема, с которой я сталкиваюсь сейчас, заключается в том, что все числа возвращаются обратно как 0. Я продолжу работать над этим. Еще раз спасибо :-]

3. @01010, посмотрите на условие if, если сумма не равна 0, вы добавляете 0, но если сумма равна нулю, то вы добавляете сумму, возможно, измените это: if sum != 0: tmp_list.append(0) else: tmp_list.append(sum) к этому: tmp_list.append(sum)

Ответ №2:

(Я понял, что если число % 3 == 0, вы указываете то же число, в противном случае вы ставите 0.)

Я предлагаю работать с numpy ним, это легко сделать в простой строке :

 import numpy as np
a = np.array([[34,38,50,44,39], 
              [42,36,40,43,44], 
              [24,31,46,40,45],
              [43,47,35,31,26],
              [37,28,20,36,50]])

result = np.where(a%3 ==0, a, 0)

>>>result
array([[ 0,  0,  0,  0, 39],
       [42, 36,  0,  0,  0],
       [24,  0,  0,  0, 45],
       [ 0,  0,  0,  0,  0],
       [ 0,  0,  0, 36,  0]])
 

В противном случае проблема с вашим кодом заключается в том, что вы неправильно выбираете место для размещения return .
Итак, вы должны сделать это:

 def divSUM(x):
    result = []
    for r in x:
        tmp = []
        for c in r:
            if c % 3 != 0:
                tmp.append(0)
            else:
                tmp.append(c)

        result.append(tmp)

    return result

 

Комментарии:

1. Большое вам спасибо! Я ценю отзывы и код. Я обязательно более внимательно посмотрю на свои результаты. Это очень помогло