Page 1 of 1
moving box!
Posted: Sun Sep 26, 2010 6:52 am
by Isaac
This is a text-art animated box, python program.
Code: Select all
import os
import math
class box:
def clear(self):
os.system(\"clear\")
def count(self,a):
self.a=\" \"*int(round(math.cos(a)*50)+50) #controls horizontal offset
self.b=int(round(math.sin(a)*20)+20) #controls vertical offset
def box(self):
print self.a,\"____\\n\",self.a,\"[ ]\\n\",self.a,\"[__]\"#draws box & horizontal offset
def voffset(self):
b=0
while b<=self.b:
print
b+=1
go=box()
a=0
while a<40:#the number after the < sign controls the duration.
go.clear()
go.count(a)
go.voffset()
go.box()
a+=0.02 #lower the number the slower the speed.
Posted: Mon Sep 27, 2010 3:51 am
by Jeff250
Not bad for starting out but too many lines... this is Python, not Java or C#.
The following should be functionally equivalent except for some parameters I changed to reflect my CPU speed and terminal size:
Code: Select all
import os
import math
for a in [x * 0.002 for x in range(0, 10000)]:
os.system('clear')
print '\\n' * int(round(math.sin(a) * 10) + 10)
space = ' ' * int(round(math.cos(a) * 37) + 37)
print '%s____\\n%s[ ]\\n%s[__]' % ((space,) * 3)
The following one is more CPU-friendly:
Code: Select all
import os
import math
import time
for a in [x * 0.02 for x in range(0, 10000)]:
os.system('clear')
print '\\n' * int(round(math.sin(a) * 10) + 10)
space = ' ' * int(round(math.cos(a) * 37) + 37)
print '%s____\\n%s[ ]\\n%s[__]' % ((space,) * 3)
time.sleep(0.01)
Also, since you're now sharing Python code, you should read this:
http://www.python.org/dev/peps/pep-0008/
Posted: Mon Sep 27, 2010 9:18 am
by Isaac
That's amazing! I'm amazed at two things: First, I knew I was using too many lines, but you've shown me how much I was off by. I don't know if people write programs by writing a rough draft then final draft, which has a better use of space. Also, I've never used \"for\" in the way you do. I'm going to investigate that before moving forward. I'll also look into time.sleep(), which is also new to me.
I read the introduction in that link and I will read the rest this week, though it shouldn't take long; I don't want to rush through it; it looks important.
On a python forum all I got was, \"cute\" and \"fun but useless\". Your post is far more valuable. Thank you!
Posted: Mon Sep 27, 2010 9:39 am
by Sirius
\"Drafts\" in that sense aren't common as far as I've seen - not for use of space or anything like that - but there is a practice known as refactoring which sometimes serves similar purposes. It's usually intended to make code more maintainable though.
Re:
Posted: Mon Sep 27, 2010 2:34 pm
by Jeff250
Isaac wrote:Also, I've never used "for" in the way you do. I'm going to investigate that before moving forward.
The first "for" is a for loop. In Python, for loops are like the "for each" loops of other languages. They iterate over something iterable (like a list), assigning each value to the variable left of "in".
The second "for" is in a
list comprehension. The documentation should get you started. Something that the documentation doesn't really cover well:
Code: Select all
xs = [1, 2, 3]
ys = [4, 5, 6]
pairwise_sums = [x + y for x, y in zip(xs, ys)]
cartesian_product = [(x, y) for x in xs for y in ys]
So to do something pairwise on two lists, use one "for" over the zip'd lists. Since zip is variadic, you can actually extend this pattern to n-tuple-wise on n lists. To do something on every possible combination of one thing from the first list and one thing from the second list, use two "for"'s. Again, you can extend this pattern to n lists and n "for"'s.
Posted: Tue Sep 28, 2010 10:55 am
by Isaac
Thanks Jeff. I have used \"for\" loops, but only for the simplest things, like
>>> for letter in \"LETTERS\":
... print letter,\") \"
I thought that's all one could do with them. I will study that page you gave me, List Comprehension. Thank you!
Thank you too sirius!