Cześć. Muszę napisać program którzy tworzy tablice kwadratową o wymiarach 101x101, która wygląda tak:
1 0 0 0 0 0 1
1 1 0 0 0 1 1
1 1 1 0 1 1 1
1 1 1 1 1 1 1
1 1 1 0 1 1 1
1 1 0 0 0 1 1
1 0 0 0 0 0 1
Trzeba to zrobić bez użycia pętli
oczywiście to rysunek poglądowy, w mniejszym wydaniu :D Proszę o jakąś podpowiedź
0
0
Weż p = 101
:
def f(m, n, k):
if n == -1:
print(k * [1])
return
a = [1]*m + n * [0] + m * [1]
print(a)
f(m + 1, n - 2, k)
def f2(m, n, k):
if n == k - 2:
print(1 * [1] + n * [0] + 1 * [1])
return
a = [1]*m + n * [0] + m * [1]
print(a)
f2(m - 1, n + 2, k)
if __name__ == '__main__':
p = 11
f(1, p - 2, p)
f2(p // 2, 1, p)
0
Można też tak:
import numpy as np
n = 51
print(np.vstack((np.hstack((np.tri(n), np.fliplr(np.tri(n))[:,1:])), np.flipud(np.hstack((np.tri(n), np.fliplr(np.tri(n))[:,1:]))[0:-1,:]))))
Jest to ponad dwukrotnie szybsza metoda.
0
To na pewno to samo? Nie wygląda.
[[ 1. 0. 0. ..., 0. 0. 0.]
[ 1. 1. 0. ..., 0. 0. 0.]
[ 1. 1. 1. ..., 0. 0. 0.]
...,
[ 1. 1. 1. ..., 0. 0. 0.]
[ 1. 1. 0. ..., 0. 0. 0.]
[ 1. 0. 0. ..., 0. 0. 0.]]
0
list comprehension pewnie też się liczy jako pętla, ale co tam:
w = 7
h = 7
def compute_value(x, y):
x = min(x, w - x - 1)
return (y >= x and y < h - x) and 1 or 0
result = [[compute_value(x, y) for y in range(h)] for x in range(w)]
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.