[Tutor] manipulating data
I would like to have my data in a format so that I can create a contour plot. My data is in a file with a format, where there may be multiple fields field = 1 1a 0 2a 0 3a 5 4a 5 5a 5 6a 5 7a 5 8a 5 9a 0 10a 0 1b 0 2b 0 3b 5 4b 5 5b 5 6b 5 7b 5 8b 5 9b 0 10b 0 field = 2 1a 0 2a 0 3a 0 4a 4 5a 4 6a 4 7a 4 8a 0 9a 0 10a 0 1b 0 2b 0 3b 0 4b 4 5b 4 6b 4 7b 4 8b 0 9b 0 10b 0 field = 3 1a 0 2a 0 3a 0 4a 0 5a 3 6a 3 7a 0 8a 0 9a 0 10a 0 1b 0 2b 0 3b 0 4b 0 5b 3 6b 3 7b 0 8b 0 9b 0 10b 0 where, a b a b ab 10 00|00 00|00 00|00 9 00|00 00|00 00|00 8 01|10 00|00 00|00 7 01|10 00|00 00|00 6 01|10 00|00 000111|111000 5 01|10 00|00 000111|111000 4 01|10 00|00 00|00 3 01|10 00|00 00|00 2 00|00 00|00 00|00 1 00|00 00|00 00|00 I could possibly have many of these that I will add together and normalize to one. Also, there are 60 a and b blocks, the middle 40 are 0.5 times the width of the outer 20. I thought about filling an array, but there is not a one to one symmetry. I cannot seem to get my head around this. Can anybody help me get started? ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] making a typing speed tester
Hi Tom, I'm trying to write a program to test someones typing speed and show them their mistakes. However I'm getting weird results when looking for the differences in longer (than 100 chars) strings: import difflib # a tape measure string (just makes it easier to locate a given index) a = '1-3-5-7-9-12-15-18-21-24-27-30-33-36-39-42-45-48-51-54-57-60-63-66-69 -72-75-78-81-84-87-90-93-96-99-103-107-111-115-119-123-127-131-135-139 -143-147-151-155-159-163-167-171-175-179-183-187-191-195--200' # now with a few mistakes b = '1-3-5-7- l-12-15-18-21-24-27-30-33-36-39o42-45-48-51-54-57-60-63-66-69-72-75-78 -81-84-8k-90-93-96-9l-103-107-111-115-119-12b-1v7-131-135-139-143-147- 151-m55-159-163-167-a71-175j179-183-187-191-195--200' s = difflib.SequenceMatcher(None, a ,b) ms = s.get_matching_blocks() print ms [(0, 0, 8), (200, 200, 0)] Have I made a mistake or is this function designed to give up when the input strings get too long? If so what could I use instead to compute the mistakes in a typed text? Ok, I wasn't on the list last year, but I was a few days ago, so persistence pays off; partly, as I don't have a full answer. I got curious and looked at the source of difflib. There's a method __chain_b() which sets up the b2j variable, which contains the occurrences of characters in string b. So cutting b to 199 characters, it looks like this: b2j= 19 {'a': [168], 'b': [122], 'm': [152], 'k': [86], 'v': [125], '-': [1, 3, 5, 7, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 42, 45, 48, 51, 54, 57, 60, 63, 66, 69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99, 103, 107, 111, 115, 119, 123, 127, 131, 135, 139, 143, 147, 151, 155, 159, 163, 167, 171, 179, 183, 187, 191, 195, 196], 'l': [8, 98], 'o': [39], 'j': [175], '1': [0, 10, 13, 16, 20, 50, 80, 100, 104, 108, 109, 110, 112, 113, 116, 117, 120, 124, 128, 130, 132, 136, 140, 144, 148, 150, 156, 160, 164, 170, 172, 176, 180, 184, 188, 190, 192], '0': [29, 59, 89, 101, 105, 198], '3': [2, 28, 31, 32, 34, 37, 62, 92, 102, 129, 133, 137, 142, 162, 182], '2': [11, 19, 22, 25, 41, 71, 121, 197], '5': [4, 14, 44, 49, 52, 55, 74, 114, 134, 149, 153, 154, 157, 174, 194], '4': [23, 40, 43, 46, 53, 83, 141, 145], '7': [6, 26, 56, 70, 73, 76, 106, 126, 146, 166, 169, 173, 177, 186], '6': [35, 58, 61, 64, 65, 67, 95, 161, 165], '9': [38, 68, 88, 91, 94, 97, 118, 138, 158, 178, 189, 193], '8': [17, 47, 77, 79, 82, 85, 181, 185]} This little detour is because of how b2j is built. Here's a part from the comments of __chain_b(): # Before the tricks described here, __chain_b was by far the most # time-consuming routine in the whole module! If anyone sees # Jim Roskind, thank him again for profile.py -- I never would # have guessed that. And the part of the actual code reads: b = self.b n = len(b) self.b2j = b2j = {} populardict = {} for i, elt in enumerate(b): if elt in b2j: indices = b2j[elt] if n = 200 and len(indices) * 100 n: # --- !! populardict[elt] = 1 del indices[:] else: indices.append(i) else: b2j[elt] = [i] So you're right: it has a stop at the (somewhat arbitrarily) limit of 200 characters. How that exactly works, I don't know (needs more delving into the code), though it looks like there also need to be a lot of indices (len(indices*100n); I guess that's caused in your strings by the dashes, '1's and '0's (that's why I printed the b2j string). If you feel safe enough and on a fast platform, you can probably up that limit (or even put it somewhere as an optional variable in the code, which I would think is generally better). Not sure who the author of the module is (doesn't list in the file itself), but perhaps you can find out and email him/her, to see what can be altered. Hope that helps. Evert ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] New Introductory Book
Whatever the rationale for the price you could buy 2nd Ed 'Core', Chun *and *3rd edition(when it arrives) 'Learning Python', Lutz (the two standard, known and respected beginners texts) for the price of this. Mmm, I wonder what I would buy or rather have as a student. Eddie PS (My apologies for inadvertently sending this to the original poster instead of the list) ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] manipulating data
Bryan Fodness wrote: I also have some information at the beginning of the file and between each field. Is there a way to get the info at the beginning and tell it once it sees Leaf 1A to read the values for the next 120 and then repeat until there are no more Fields. This should be a pretty simple modification to the technique I showed you using f.next(). Just add another loop to process the header fields. If you have variable-length sections then you may have to 'prefetch' the next line, something like this: try: line = f.next() while True: if 'Leaf 1A' in line: break # process header line # 'line' already contains the next line while True: # process body line line = f.next() Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] manipulating data
Bryan Fodness wrote: I would like to have my data in a format so that I can create a contour plot. My data is in a file with a format, where there may be multiple fields field = 1 1a0 If your data is really this regular, it is pretty easy to parse. A useful technique is to access a file's next method directly. Something like this (not tested!): f = open('data.txt') fields = {} # build a dict of fields try: while True: # Get the field line line = f.next() field = int(line.split()[-1]) # last part of the line as an int f.next() # skip blank line data = {} # for each field, map (row, col) to value for i in range(20): # read 20 data lines line = f.next() ix, value = f.split() row = int(ix[:-1]) col = ix[-1] data[row, col] = int(value) fields[field] = data f.next() except StopIteration: pass This builds a dict whose keys are field numbers and values are themselves dicts mapping (row, col) pairs to a value. where, a b a b ab 1000|00 00|00 00|00 9 00|00 00|00 00|00 8 01|10 00|00 00|00 7 01|10 00|00 00|00 6 01|10 00|00 000111|111000 5 01|10 00|00 000111|111000 4 01|10 00|00 00|00 3 01|10 00|00 00|00 2 00|00 00|00 00|00 1 00|00 00|00 00|00 I guess this is the intended output? Do you want to actually create a printed table like this, or some kind of data structure that represents the table, or what? Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] New Introductory Book
Greetings, Many books have the source code available for download somewhere, or even a sample chapter? Are the examples in the book complete programs, or are they snippets illustrating a concept? If the programs are complete, what type of programs are they (business, science, other)? Does the source code work with GNU/Linux, or is it for MS-Windows only? -- b h a a l u u at g m a i l dot c o m http://www.geocities.com/ek.bhaaluu/index.html On Nov 6, 2007 6:15 PM, Michael H. Goldwasser [EMAIL PROTECTED] wrote: Thanks to the many voices supporting our decision to post to Tutor. We only posted to the most directly relevant mailing lists (announce, tutor, edusig). As an introductory book, it seemed quite appropriate for tutor. In fact, the topic of our (developing) book was raised in a thread on Tutor this past August 9/10th. Ironically, the topic at that time is the same as that raised by Chris Calloway's question today, about the $102 list price. The discrepency is because this is being published primarily as an academic book through Prentice Hall's Education line (as opposed to the Prentice Proffessional label that publishes books such as Wesley Chun's Core Python Programming). I'm not on the business side, so I don't know that I understand all the factors; could be a combination of the captive audience together with a lot of additional money spent on sending review copies to educators and sending representatives to campuses. In any event, we believe that the book can be quite useful outside the traditional classroom for new programmers or those new to object-oriented programming. Best regards, Michael ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] In-place expansion of list members... possible?
This question has probably been asked and answered many times, but I can't figure out how to word my question to get relevant results from Google. So I thought I'd try some human beings, eh? I'm working with delimited files (ANSI X12 EDI nonsense, to be precise.) First I load the records to a list: tmpSegs = inString.split(self.SegTerm) Now, I want to replace each string in that list with a string: for seg in tmpSegs: # 'seg' is short for 'segment' seg = seg.split(self.ElemSep) It doesn't work. If I check the contents of tmpSegs, it's still a list of strings - not a list of lists. So I do this instead: tmpSegs2 = [] for seg in tmpSegs: tmpSegs2.append(seg.split(self.sElemSep)) del tmpSegs This works. And, for the size of files that I'm likely to run into, creating the extra list and burning the old one is probably not going to swamp the machine - but it feels clumsy to me, like if I just knew the secret I could be much more elegant about it. I don't want the next guy who reads my code to scratch his head and say 'What was he thinking?' - especially if it's me in a year's time! What puzzles me most is that I can replace 'seg' with just about anything else - for seg in tmpSegs: seg = seg.strip() or for seg in tmpSegs: seg = 'bananas' or for seg in tmpSegs: seg = seg + ' bananas' and it works. So why can't I replace it with its own split? It's not a burning question - development continues - but I'm really curious. Thanks! -- www.fsrtechnologies.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
Marc Tompkins wrote: This question has probably been asked and answered many times, but I can't figure out how to word my question to get relevant results from Google. So I thought I'd try some human beings, eh? I'm working with delimited files (ANSI X12 EDI nonsense, to be precise.) First I load the records to a list: tmpSegs = inString.split(self.SegTerm) Now, I want to replace each string in that list with a string: for seg in tmpSegs: # 'seg' is short for 'segment' seg = seg.split(self.ElemSep) A list is an array of pointers to objects, what you've done here is create a new name referencing an item in the list, then making that new name point to something different. Try this (untested code): for index in xrange(0, len(tmpSegs)): tmpSegs[index] = tmpSegs[index].split(self.ElemSep) This will iterate through the list and set each reference in the list to point to your new object. Hope that helps, e. It doesn't work. If I check the contents of tmpSegs, it's still a list of strings - not a list of lists. So I do this instead: tmpSegs2 = [] for seg in tmpSegs: tmpSegs2.append(seg.split(self.sElemSep)) del tmpSegs This works. And, for the size of files that I'm likely to run into, creating the extra list and burning the old one is probably not going to swamp the machine - but it feels clumsy to me, like if I just knew the secret I could be much more elegant about it. I don't want the next guy who reads my code to scratch his head and say 'What was he thinking?' - especially if it's me in a year's time! What puzzles me most is that I can replace 'seg' with just about anything else - for seg in tmpSegs: seg = seg.strip() or for seg in tmpSegs: seg = 'bananas' or for seg in tmpSegs: seg = seg + ' bananas' and it works. So why can't I replace it with its own split? It's not a burning question - development continues - but I'm really curious. Thanks! -- www.fsrtechnologies.com http://www.fsrtechnologies.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] manipulating data
I also have some information at the beginning of the file and between each field. Is there a way to get the info at the beginning and tell it once it sees Leaf 1A to read the values for the next 120 and then repeat until there are no more Fields. File Rev = G Treatment = Dynamic Dose Last Name = Fodness First Name = Bryan Patient ID = 0001 Number of Fields = 4 Number of Leaves = 120 Tolerance = 0.50 Field = 10 Index = 0. Carriage Group = 1 Operator = Collimator = 0.0 Leaf 1A = 0.00 Leaf 2A = 0.00 Leaf 3A = 0.00 Leaf 4A = 0.00 ... Leaf 57B = 0.00 Leaf 58B = 0.00 Leaf 59B = 0.00 Leaf 60B = 0.00 Note = 0 Shape = 4 500 500 500 -500 -500 -500 -500 500 Magnification = 1.00 Field = 8 Index = 0.4000 Carriage Group = 1 Operator = Collimator = 0.0 Leaf 1A = 0.00 Leaf 2A = 0.00 Leaf 3A = 0.00 Leaf 4A = 0.00 ... Leaf 57B = 0.00 Leaf 58B = 0.00 Leaf 59B = 0.00 Leaf 60B = 0.00 Note = 0 Shape = 4 400 400 400 -400 -400 -400 -400 400 Magnification = 1.00 I would like to have a data structure that I can use in one of the graphing utilities (matpolotlib?). I probably want to populate an array with values, but I have not figured out how I want to do that yet. On Nov 7, 2007 8:52 AM, Kent Johnson [EMAIL PROTECTED] wrote: Bryan Fodness wrote: I would like to have my data in a format so that I can create a contour plot. My data is in a file with a format, where there may be multiple fields field = 1 1a0 If your data is really this regular, it is pretty easy to parse. A useful technique is to access a file's next method directly. Something like this (not tested!): f = open('data.txt') fields = {} # build a dict of fields try: while True: # Get the field line line = f.next() field = int(line.split()[-1]) # last part of the line as an int f.next() # skip blank line data = {} # for each field, map (row, col) to value for i in range(20): # read 20 data lines line = f.next() ix, value = f.split() row = int(ix[:-1]) col = ix[-1] data[row, col] = int(value) fields[field] = data f.next() except StopIteration: pass This builds a dict whose keys are field numbers and values are themselves dicts mapping (row, col) pairs to a value. where, a b a b ab 1000|00 00|00 00|00 9 00|00 00|00 00|00 8 01|10 00|00 00|00 7 01|10 00|00 00|00 6 01|10 00|00 000111|111000 5 01|10 00|00 000111|111000 4 01|10 00|00 00|00 3 01|10 00|00 00|00 2 00|00 00|00 00|00 1 00|00 00|00 00|00 I guess this is the intended output? Do you want to actually create a printed table like this, or some kind of data structure that represents the table, or what? Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] making a typing speed tester
Hi, I asked this question last year but got no response. I'm trying to write a program to test someones typing speed and show them their mistakes. However I'm getting weird results when looking for the differences in longer (than 100 chars) strings: import difflib # a tape measure string (just makes it easier to locate a given index) a = '1-3-5-7-9-12-15-18-21-24-27-30-33-36-39-42-45-48-51-54-57-60-63-66-69-72-75-78-81-84-87-90-93-96-99-103-107-111-115-119-123-127-131-135-139-143-147-151-155-159-163-167-171-175-179-183-187-191-195--200' # now with a few mistakes b = '1-3-5-7-l-12-15-18-21-24-27-30-33-36-39o42-45-48-51-54-57-60-63-66-69-72-75-78-81-84-8k-90-93-96-9l-103-107-111-115-119-12b-1v7-131-135-139-143-147-151-m55-159-163-167-a71-175j179-183-187-191-195--200' s = difflib.SequenceMatcher(None, a ,b) ms = s.get_matching_blocks() print ms [(0, 0, 8), (200, 200, 0)] Have I made a mistake or is this function designed to give up when the input strings get too long? If so what could I use instead to compute the mistakes in a typed text? Thanks in advance, Thomas ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
Marc Tompkins wrote: I'm working with delimited files (ANSI X12 EDI nonsense, to be precise.) First I load the records to a list: tmpSegs = inString.split(self.SegTerm) Now, I want to replace each string in that list with a string: for seg in tmpSegs: # 'seg' is short for 'segment' seg = seg.split(self.ElemSep) It doesn't work. If I check the contents of tmpSegs, it's still a list of strings - not a list of lists. So I do this instead: tmpSegs2 = [] for seg in tmpSegs: tmpSegs2.append(seg.split(self.sElemSep)) del tmpSegs This works. And, for the size of files that I'm likely to run into, creating the extra list and burning the old one is probably not going to swamp the machine - but it feels clumsy to me, like if I just knew the secret I could be much more elegant about it. Creating a new list is fine, actually. You can do it more elegantly with a list comprehension, and it's fine to assign to the same name, which will implicitly delete the old list: tmpSegs = [ seg.split(self.ElemSep) for seg in tmpSegs ] If you really want to replace elements in the same list you can use enumerate to get indices: for i, seg in enumerate(tmpSegs): tmpSegs[i] = seg.split(self.ElemSep) or use slice assignment: tmpSegs[:] = [ seg.split(self.ElemSep) for seg in tmpSegs ] but I doubt those are needed in this case. What puzzles me most is that I can replace 'seg' with just about anything else - for seg in tmpSegs: seg = seg.strip() or for seg in tmpSegs: seg = 'bananas' or for seg in tmpSegs: seg = seg + ' bananas' and it works. So why can't I replace it with its own split? If by 'it works' you mean that tmpSegs is changed...you are mistaken or there is something you are not showing. Can you show why you think this changes tmpSegs? Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
Try this (untested code): for index in xrange(0, len(tmpSegs)): tmpSegs[index] = tmpSegs[index].split(self.ElemSep) Thank you - that works nicely, and it's a much better replacement for something else I was doing to achieve the same result (you know, the old count+=1 nonsense - every day, in every way, I'm struggling to become more and more Pythonic.) Now, I did already (intellectually) understand this: A list is an array of pointers to objects, what you've done here is create a new name referencing an item in the list, then making that new name point to something different. Given that, however, I still don't entirely understand why the other examples I gave DO work. Seems it should be one or the other, no? I'm probably just being dense, though. Marc -- www.fsrtechnologies.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
What puzzles me most is that I can replace 'seg' with just about anything else - for seg in tmpSegs: seg = seg.strip() or for seg in tmpSegs: seg = 'bananas' or for seg in tmpSegs: seg = seg + ' bananas' and it works. So why can't I replace it with its own split? If by 'it works' you mean that tmpSegs is changed...you are mistaken or there is something you are not showing. Can you show why you think this changes tmpSegs? I see I have been misled by trying too many things in a short time and confusing my results. I could have sworn that late last night, before I hit on the solution of assigning to a new list altogether, I tried the above examples and followed them with another for seg in tmpSegs loop that simply printed the contents. I now suspect myself of being too sleepy (and probably inadvertently assigning to a new list anyway!) at the time, because - as you already know - when I try it now, tmpSegs is unchanged. I hang my head in shame. Thanks for the responses - Marc -- www.fsrtechnologies.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
Kent Johnson wrote: Marc Tompkins wrote: I'm working with delimited files (ANSI X12 EDI nonsense, to be precise.) First I load the records to a list: tmpSegs = inString.split(self.SegTerm) Now, I want to replace each string in that list with a string: for seg in tmpSegs: # 'seg' is short for 'segment' seg = seg.split(self.ElemSep) It doesn't work. If I check the contents of tmpSegs, it's still a list of strings - not a list of lists. So I do this instead: tmpSegs2 = [] for seg in tmpSegs: tmpSegs2.append(seg.split(self.sElemSep)) del tmpSegs This works. And, for the size of files that I'm likely to run into, creating the extra list and burning the old one is probably not going to swamp the machine - but it feels clumsy to me, like if I just knew the secret I could be much more elegant about it. Creating a new list is fine, actually. You can do it more elegantly with a list comprehension, and it's fine to assign to the same name, which will implicitly delete the old list: tmpSegs = [ seg.split(self.ElemSep) for seg in tmpSegs ] If you really want to replace elements in the same list you can use enumerate to get indices: for i, seg in enumerate(tmpSegs): tmpSegs[i] = seg.split(self.ElemSep) Very nice use of enumerate(), I like this better than my solution. Thanks, Kent. or use slice assignment: tmpSegs[:] = [ seg.split(self.ElemSep) for seg in tmpSegs ] but I doubt those are needed in this case. What puzzles me most is that I can replace 'seg' with just about anything else - for seg in tmpSegs: seg = seg.strip() or for seg in tmpSegs: seg = 'bananas' or for seg in tmpSegs: seg = seg + ' bananas' and it works. So why can't I replace it with its own split? If by 'it works' you mean that tmpSegs is changed...you are mistaken or there is something you are not showing. Can you show why you think this changes tmpSegs? Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
John Fouhy wrote: On 08/11/2007, Marc Tompkins [EMAIL PROTECTED] wrote: Now, I did already (intellectually) understand this: A list is an array of pointers to objects, what you've done here is create a new name referencing an item in the list, then making that new name point to something different. Given that, however, I still don't entirely understand why the other examples I gave DO work. Seems it should be one or the other, no? Could you post some code/results (or an interpreter session) showing one of the other examples working? If you did, for example, tmpSegs = inString.split(self.SegTerm) for seg in tmpSegs: seg = 'bananas' I would expect tmpSegs to be unchanged. If it is changed, then that seems strange to me.. I'd like to see it, too. I'll admit, I didn't finish reading your post, so I missed replying to that, but honestly I don't think it should do what you say it does. :-) ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] In-place expansion of list members... possible?
On 08/11/2007, Marc Tompkins [EMAIL PROTECTED] wrote: Now, I did already (intellectually) understand this: A list is an array of pointers to objects, what you've done here is create a new name referencing an item in the list, then making that new name point to something different. Given that, however, I still don't entirely understand why the other examples I gave DO work. Seems it should be one or the other, no? Could you post some code/results (or an interpreter session) showing one of the other examples working? If you did, for example, tmpSegs = inString.split(self.SegTerm) for seg in tmpSegs: seg = 'bananas' I would expect tmpSegs to be unchanged. If it is changed, then that seems strange to me.. -- John. ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] Elegant argument index sort
I'm sorting a 1-d (NumPy) matrix array (a) and wanting the index results (b). This is what I have: b = a.argsort(0) b = b+1 The one (1) is added to b so that there isn't a zero index element. Is there a more elegant way to do this? Dinesh ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] New Introductory Book
eddie, Whatever the rationale for the price you could buy 2nd Ed 'Core', Chun *and *3rd edition(when it arrives) 'Learning Python', Lutz (the two standard, known and respected beginners texts) for the price of this. Mmm, I wonder what I would buy or rather have as a student. i've been skimming through michael's and david's book over the past week. fiscally, you are correct with your remark, but i have to be honest and say that michael's and david's book spends a bit more time introducing the concepts of OOP/OOD more carefully and more thought out than either mine or david's and mark's books. our books target existing programmers who (may already have some OO under their belt and/or) want to pick up python right away, rather than someone new to object-oriented methodologies (and perhaps programming) using python as the primary development vehicle. of course there is an OO intro in Core Python, but it is not a thorough treatment. as i've hinted, it's really the target audience. still, your point is well taken. fwiw, most aspects of the selling of a book (including its cover price) is almost -always out of the control of the author(s). cheers, -- wesley - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Core Python Programming, Prentice Hall, (c)2007,2001 http://corepython.com wesley.j.chun :: wescpy-at-gmail.com python training and technical consulting cyberweb.consulting : silicon valley, ca http://cyberwebconsulting.com ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] repeated times
I'm not sure if this is what youre asking but if you want to collect all of the output into a file without overwriting, open the output file with a instead of w and the output will. be appended. Iwould suggest in that case that you include info about the user input so you can distinguish the output . Hth Sent from my iPhone On Nov 7, 2007, at 6:30 PM, linda.s [EMAIL PROTECTED] wrote: On 11/4/07, Aditya Lal [EMAIL PROTECTED] wrote: On 11/4/07, Thorsten Kampe [EMAIL PROTECTED] wrote: * linda.s (Sun, 4 Nov 2007 01:39:46 -0800) On Nov 2, 2007 1:03 AM, ALAN GAULD [EMAIL PROTECTED] wrote: I want to run an .exe file and get the output many times. Given that I know that you know about loops I have to ask what you see as the problem? I want to run it many times and export all the output to a text file. OK, Do you mean you want to run the program multiple times but put the output in the same file? Yes. For example, I want to run the exe file one hundred times and save all the results into one file. Is there any example code to do that? There's no reason to do that in Python. You should use a batch or shell script for that. If you really insist on using Python then look at the subprocess module... Thorsten On Unix, you can execute script filename on the command prompt. This will create a new session in which you execute the program as many times. After you are done press ^D to come out of session. Everything of that session will be saved in the file filename. On Windows, you can probably build something like script in python. BTW, does your executable takes any user inputs ? -- Aditya My executable takes any user inputs and the input will be adjusted based on the former result. So I need do some analysis based on the output every time. hanks, Linda ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] From Numpy Import *
On Wednesday November 7, 2007, Dinesh B Vadhia wrote: Hello! The standard Python practice for importing modules is, for example: import sys import os etc. In NumPy (and SciPy) the 'book' suggests using: from numpy import * from scipy import * However, when I instead use 'import numpy' it causes all sorts of errors in my existing code. The issue is the following. The numpy module includes many definitions, for example a class named array. When you use the syntax, from numpy import * That takes all definitions from the module and places them into your current namespace. At this point, it would be fine to use a command such as values = array([1.0, 2.0, 3.0]) which instantiates a (numpy) array. If you instead use the syntax import numpy things brings that module as a whole into your namespace, but to access definitions from that module you have to give a qualified name, for example as values = numpy.array([1.0, 2.0, 3.0]) You cannot simply use the word array as in the first scenario. This would explain why your existing code would no longer work with the change. What do you suggest? The advantage of the from numpy import * syntax is mostly convenience. However, the better style is import numpy precisely becuase it does not automatically introduce many other definitions into your current namespace. If you were using some other package that also defined an array and then you were to use the from numpy import *, the new definition would override the other definition. The use of qualified names helps to avoid these collisions and makes clear where those definitions are coming from. With regard, Michael ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
[Tutor] From Numpy Import *
Hello! The standard Python practice for importing modules is, for example: import sys import os etc. In NumPy (and SciPy) the 'book' suggests using: from numpy import * from scipy import * However, when I instead use 'import numpy' it causes all sorts of errors in my existing code. What do you suggest? Dinesh ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] From Numpy Import *
Michael H. Goldwasser wrote: from numpy import * import numpy There is a third option which provides the safety/control of import numpy with a little less typing: import numpy as np values = np.array([1.0, 2.0, 3.0]) and you can also import just the names you need: from numpy import array values = array(...) Kent ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor
Re: [Tutor] repeated times
On 11/4/07, Aditya Lal [EMAIL PROTECTED] wrote: On 11/4/07, Thorsten Kampe [EMAIL PROTECTED] wrote: * linda.s (Sun, 4 Nov 2007 01:39:46 -0800) On Nov 2, 2007 1:03 AM, ALAN GAULD [EMAIL PROTECTED] wrote: I want to run an .exe file and get the output many times. Given that I know that you know about loops I have to ask what you see as the problem? I want to run it many times and export all the output to a text file. OK, Do you mean you want to run the program multiple times but put the output in the same file? Yes. For example, I want to run the exe file one hundred times and save all the results into one file. Is there any example code to do that? There's no reason to do that in Python. You should use a batch or shell script for that. If you really insist on using Python then look at the subprocess module... Thorsten On Unix, you can execute script filename on the command prompt. This will create a new session in which you execute the program as many times. After you are done press ^D to come out of session. Everything of that session will be saved in the file filename. On Windows, you can probably build something like script in python. BTW, does your executable takes any user inputs ? -- Aditya My executable takes any user inputs and the input will be adjusted based on the former result. So I need do some analysis based on the output every time. hanks, Linda ___ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor