#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. Большое вам спасибо! Я ценю отзывы и код. Я обязательно более внимательно посмотрю на свои результаты. Это очень помогло