[Tutor] Basic Question
Peter Otten
__peter__ at web.de
Fri Sep 10 10:07:40 EDT 2021
On 10/09/2021 10:21, Alan Gauld via Tutor wrote:
> On 09/09/2021 22:58, Osmaan Mysorewala via Tutor wrote:
>
>> One more question. In my get_neighbors function I use a terrible
>> if-statement spam, how would I go about replacing that?
> I assume you mean this section:
>
> def get_neighbors(a, b):
> neighbors = 0
> if old_arr[a + 1][b] == 1:
> neighbors = neighbors + 1
> if old_arr[a - 1][b] == 1:
> neighbors = neighbors + 1
> I don't think its terrible but it can be tidied up provided
> the values you store are zero and one. Then you can miss
> out the if statements and replace them with addition:
>
> neighbors = neighbors + old_arr[a + 1][b] # or using +=...
> neighbours += old_arr[a - 1][b]
> neighbours += old_arr[a][b+1]
Osmaan, while I agree with Alan that the if statements aren't "terrible"
I'd like to suggest that you revisit your failed attempt to use loops:
> for na in range(a - 1, a + 1):
> for nb in range(b - 1, b + 1):
> if (na != a and nb != b) and old_arr[na][nb]:
> neighbors = neighbors + 1
This should work once
(1) you get the range() calls right
hint: Python's ranges are "half open", i. e. they do not include the
last value:
>>> list(range(3))
[0, 1, 2]
>>> a = 42
>>> list(range(a-1, a+1))
[41, 42]
(2) in the first condition of the if statement you only exclude the cell
(a, b)
hint: start with an expression that's true for (a, b), then negate that with
if not (...to be done...) and old_arr[na][nb]:
...
More information about the Tutor
mailing list