Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

loop numbers down and up and not using recursion in python

I have a small problem with my code. I can't seem to figure out how to do this. I can get it to work with two for loops. But in the exercise it says that i only can use one loop to get the result. The code is supposed to execute this:

bounce2(4):

  • 4
  • 3
  • 2
  • 1
  • 0
  • 1
  • 2
  • 3
  • 4

What I have come up with:

def bounce2(n):
    for x in range(n,-1,-1):
    print(x)

Which prints out 4,3,2,1,0 But now i dont know what to do.. I have tried different if statements such as:

def bounce2(n):
   for x in range(n,-1,-1):
   print(x)
   if n == 0:
   x = x + 1
   print(x)

But they only print one integer because they are out of the loop. Same thing goes if i try to make the if-statement inside the loop, then it prints out something like 433221100. I dont know how to get the numbers to switch places. The print statement should also be an integer and not a string. So i can't use replaced.

Really need help to figure out the logic. All help is appreciated.

like image 411
teslagosu Avatar asked Jun 03 '26 16:06

teslagosu


2 Answers

So, a little bit of my thought process before showing you the code. Clearly there are nine lines, or more generally n * 2 + 1 lines. Because we need to count down to 0 and back up. That's how many times you need to call print.

Now, if you add line numbers to the expected output and think of it as a table describing a function f(i, n) where i is the line number, and n is the starting and ending value. what is f? Can you write down the formula? e.g.

i f(i, 4)
0  4
1  3
2  2
3  1
4  0
5  1
6  2
7  3
8  4

We can write down the basic structure of the code, we still don't know what f look like but assume we have it:

for i in range(2*n+1):
    print f(i)

And, what is f? Now you need to be a little creative and maybe experiment a bit. What I did was to try basic arithmetic combinations of i and n to match f(i, n), and I quickly noticed that n - i works until we reach the second half of the output, which only differs by a - sign.

i f(i, 4) n - i
0  4       4
1  3       3
2  2       2
3  1       1
4  0       0
5  1       -1
6  2       -2
7  3       -3
8  4       -4

Soooo, take the absolute value of n - i or i - n, whatever.

def f(i, n):
    return abs(n-i)
like image 141
xiaofeng.li Avatar answered Jun 06 '26 04:06

xiaofeng.li


Here is what I believe to be a pretty elegant solution:

def bounce(n):
    for x in range(-n, n+1):
        print(abs(x))

Our loop goes from the negative of n to the positive of n, printing the absolute value.

like image 44
Blake Lockley Avatar answered Jun 06 '26 05:06

Blake Lockley



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!