Re: iterating initalizations

2008-12-23 Thread Aaron Stepp

import random
from rtcmix import *
from chimes_source import * # Chime.play()
from rhythmblock import * # rhythmBlock.rhythmTwist() and  
rhythmBlock.printStuff()
from pitchblock import * # pitchBlock.pitchTwist() and  
pitchBlock.printStuff()

from lenEval import *  #greaterThan.sovler()

indexrand = random.Random()
indexrand.seed(2)

chime = Chime()
notes = pitchBlock()
rhythm = rhythmBlock()
solve = greaterThan()

class arrayBlock:

def __init__(self, theTempo, start):
self.__A = []
self.__B = []
self.__start = start
self.__tempo = theTempo

def player(self, length, tempo, octave, pan, seed):

tempo = (120, self.__tempo)

for a in range(length):

one = indexrand.randint(0, 3)

two = indexrand.randint(0, 7)

self.__A = self.__A + notes.pitchTwist(one , two)

for b in range(length):

one = indexrand.randint(0, 3)

two = indexrand.randint(0, 7)

self.__B = self.__B + rhythm.rhythmTwist(one , two)

lenA = len(self.__A)
lenB = len(self.__B)

var = solve.solver(lenA, lenB)


for c in range(var):

print self.__A[c]

self.__start = self.__start + tb(self.__B[var])

chime.play(self.__start, self.__A[var], octave, pan, 
seed)

This almost does exactly what I want, and is far cleaner than my  
previous attempts.


The only problem is that now all my arguments are being passed as zeros!

I assume this has to do with WHEN I'm referencing self.__A and self.__B?

AS


On Dec 23, 2008, at 10:20 AM, Steve Holden wrote:


D'Arcy J.M. Cain wrote:

On Mon, 22 Dec 2008 22:32:17 -0500
Aaron Stepp stepp.aa...@gmail.com wrote:

Instead of writing a long list of initializations like so:

A = [ ]
B = [ ]
...
Y = [ ]
Z = [ ]

I'd like to save space by more elegantly turning this into a  
loop.  If


Well, if all you want is a loop:

   for v in vars:
   locals()[v] = []


Note that this isn't guaranteed to work. While locals() will return a
dict containing the names and values from the local namespace, you  
won't
affect the local namespace by assigning values to the appropriate  
keys:



def f():

...   a = hello
...   locals()[a] = goodbye
...   print a
...

f()

hello




If you look at the function's code you will see that the local a is
accessed using the LOAD_FAST and STORE_FAST opcodes, which take
advantage of the knowledge that the name is local - the interpreter
analyzed the function body looking for assignments to non-globals, and
optimizes its treatment of such names.


dis.dis(f)

 2   0 LOAD_CONST   1 ('hello')
 3 STORE_FAST   0 (a)

 3   6 LOAD_CONST   2 ('goodbye')
 9 LOAD_GLOBAL  0 (locals)
12 CALL_FUNCTION0
15 LOAD_CONST   3 ('a')
18 STORE_SUBSCR

 4  19 LOAD_FAST0 (a)
22 PRINT_ITEM
23 PRINT_NEWLINE
24 LOAD_CONST   0 (None)
27 RETURN_VALUE





It's hard to tell if that's what you actually need though without
deeper analysis of your requirements.


I think it's unlikely that the OP really does need to create names
dynamically, and should look at using either a dict indexed by the
letters of self.__abet, or a list indexed from 0 to 24 instead. But  
you

*are* correct about the need for a little more information ;-)

regards
Steve


--
Steve Holden+1 571 484 6266   +1 800 494 3119
Holden Web LLC  http://www.holdenweb.com/

--
http://mail.python.org/mailman/listinfo/python-list



--
http://mail.python.org/mailman/listinfo/python-list


iterating initalizations

2008-12-22 Thread Aaron Stepp

Hi all:

I'm new to python and trying to save time and code by iterating  
through list initializations as well as the assignments.  I have the  
following code:


import random
from rtcmix import *
from chimes_source import *
from rhythmblock import *
from pitchblock import *

indexrand = random.Random()
indexrand.seed(2)

rhythm = rhythmBlock()
pitch = pitchBlock()

class pitchAndRhythm:

def __init__self:

self.__abet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'


def listCreate(self, num):

if num  25:

print Oops.  This won't work

else:

for a in range(num):

b = indexrand.randint(0, 3)

c = indexrand.randint(0, 7)

index = self.__abet[a]

index = [ ]

index = index.append(rhythm.rhythmTwist(b, c))


This doesn't do what I expect (probably because I don't have a clue  
what I'm doing!): initalizing, then filling new arrays, each new one  
called A[ ], then B[ ], etc.


This seems very un-pythonic, and I'm sure there is a right way to do  
it.  I'm just lost!


Thanks

Aaron Stepp
--
http://mail.python.org/mailman/listinfo/python-list


Re: iterating initalizations

2008-12-22 Thread Aaron Stepp


On Dec 22, 2008, at 10:15 PM, r wrote:


I can't check you code because i don't have these modules but here is
the code with proper indention

import random
from rtcmix import *
from chimes_source import *
from rhythmblock import *
from pitchblock import *
indexrand = random.Random()
indexrand.seed(2)
rhythm = rhythmBlock()
pitch = pitchBlock()

class pitchAndRhythm:
   def __init__(self):
   self.__abet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
   def listCreate(self, num):
   if num  25:
   print Oops.  This won't work
   else:
   for a in range(num):
   b = indexrand.randint(0, 3)
   c = indexrand.randint(0, 7)
   index = self.__abet[a]
   index = [ ]
   index = index.append(rhythm.rhythmTwist(b, c))

take 2: notice the ( and ) around the arg to __init__



Thanks for the help so far, I think I'm starting to get a hang of the  
syntax.


I think I need to state my goal more clearly.

Instead of writing a long list of initializations like so:

A = [ ]
B = [ ]
...
Y = [ ]
Z = [ ]

I'd like to save space by more elegantly turning this into a loop.  If  
I need to just write it out, I guess that's ok... but it would be much  
cleaner.  I'm a composer, not a programmer, so some of this is quite  
above me.


I usually ask as a last resort, but I've been through the tutorial and  
didn't find this.  I've got a couple python books, but I'd like to  
finish this piece sooner than later.


Thanks!

AS

--
http://mail.python.org/mailman/listinfo/python-list


Re: iterating initalizations

2008-12-22 Thread Aaron Stepp


On Dec 22, 2008, at 10:43 PM, Chris Rebert wrote:

On Mon, Dec 22, 2008 at 7:32 PM, Aaron Stepp stepp.aa...@gmail.com  
wrote:

snip


Thanks for the help so far, I think I'm starting to get a hang of the
syntax.

I think I need to state my goal more clearly.

Instead of writing a long list of initializations like so:

A = [ ]
B = [ ]
...
Y = [ ]
Z = [ ]

I'd like to save space by more elegantly turning this into a loop.   
If I

need to just write it out, I guess that's ok... but it would be much
cleaner.  I'm a composer, not a programmer, so some of this is  
quite above

me.



So, are these variables supposed to be module-level, or attributes of
class pitchAndRhythm, or what?
Also, are you going to use the variables normally or are you going to
need variable variables (e.g. like $$var in PHP, which gives the
value of the variable with the name of the string stored in $var)?

Cheers,
Chris

--
Follow the path of the Iguana...
http://rebertia.com



The're going to only be part of the pitchAndRhythm class.  Simply put,  
I just need enough arrays to hold a list of pitches/rhythms.  Then  
I'll have each list member returned to an instrument defined in  
another module.


As I'm hacking away at the code, I'm realizing that maybe I can do  
this with just and A = [] and B = [].  But I'm not sure...


Thanks again.

AS

--
http://mail.python.org/mailman/listinfo/python-list