tag:blogger.com,1999:blog-15135513362966105352024-03-13T20:05:31.817-07:00Pythonic ProseA python example based blog that shows how to accomplish python goals and how to correct python errors.Unknownnoreply@blogger.comBlogger86125tag:blogger.com,1999:blog-1513551336296610535.post-17040860761566005632013-12-16T11:26:00.001-08:002013-12-16T11:26:35.407-08:00Python - bubble sort or was that sift sort<br />
# Here is an implementation of bubble sort<br />
# or as some call it sift sort, settle sort,<br />
# whatever you want to call it, here it is:<br />
def siftSort(originalList):<br />
size = len(originalList)<br />
sifted = False<br />
while not sifted:<br />
sifted = True<br />
for i in range(0, len(originalList)):<br />
pos = i<br />
if (i>=size-1):<br />
break;<br />
if originalList[pos] > originalList[pos+1]:<br />
sifted = False;<br />
originalList[pos+1], originalList[pos] = originalList[pos], originalList[pos+1]<br />
<br />
return originalList<br />
<br />
<br />
<br />
if (__name__ == '__main__'):<br />
# my 'random' list that needs sorting<br />
myList = [987,9999,25,61,0,14,61,1234,99,986]<br />
print("the original list: {0}".format(myList))<br />
print("the sorted list: {0}".format(siftSort(myList)))<br />
<br />
<br />
# output:<br />
# the original list: [987, 9999, 25, 61, 0, 14, 61, 1234, 99, 986]<br />
# the sorted list: [0, 14, 25, 61, 61, 99, 986, 987, 1234, 9999]<br />
<br />Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-81021587199600687712011-05-24T07:30:00.001-07:002011-05-24T07:30:31.189-07:00Python - Determine Primality of a number<pre>
<span class="comment">#</span><span class="comment"> Determining primality by using a simple trial division test.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> This approach tests whether n is a multiple of an integer i</span>
<span class="comment">#</span><span class="comment"> between 2 and √n. If it is a multiple of any of these integers</span>
<span class="comment">#</span><span class="comment"> then it is not a prime.</span>
<span class="ANY_KEYWORD">import</span> math
<span class="ANY_KEYWORD">import</span> time
<span class="ANY_KEYWORD">def</span> isPrime(n):
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> range(2, int(math.sqrt(n))):
<span class="ANY_KEYWORD">if</span> n % i == 0:
<span class="ANY_KEYWORD">return</span> False
<span class="ANY_KEYWORD">return</span> True
<span class="ANY_KEYWORD">def</span> withTimer(n):
start = time.time()
prime = isPrime(n)
elapsed = time.time() - start
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">{0} {1} time:{2}</span><span class="STRING_LITERAL">"</span>).format(prime, n, elapsed)
<span class="comment">#</span><span class="comment"> Primality of 2 to 13 digit known primes</span>
withTimer(13)
withTimer(715827883)
withTimer(2932031007403)
<span class="comment">#</span><span class="comment"> test non primes</span>
withTimer(52)
withTimer(5820384023)
withTimer(2059384726303)
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> True </span><span class="comment">13 time:0.0</span>
<span class="comment">#</span><span class="comment"> True 715827883 time:0.00300002098083</span>
<span class="comment">#</span><span class="comment"> True 2932031007403 time:0.521000146866</span>
<span class="comment">#</span><span class="comment"> False 52 time:0.0</span>
<span class="comment">#</span><span class="comment"> False 582</span><span class="comment">0384023 time:0.000999927520752</span>
<span class="comment">#</span><span class="comment"> False 2059384726303 time:0.029000043869</span>
</pre>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1513551336296610535.post-13435557841074130532011-03-03T13:08:00.000-08:002011-03-03T13:08:11.928-08:00Python - rock paper scissors game from the command line<pre><span class="comment">#</span><span class="comment"> Here is a command line Rock Paper Scissor game.</span>
<span class="comment">#</span><span class="comment"> As you can see by my output I am not so good. ;)</span>
<span class="ANY_KEYWORD">import</span> random
<span class="ANY_KEYWORD">class</span> RockPaperScissors():
<span class="STRING_LITERAL">"""</span>
<span class="STRING_LITERAL"> Play Rock Paper Sc</span><span class="STRING_LITERAL">issors with Python CLI!</span>
<span class="STRING_LITERAL">"""</span>
<span class="ANY_KEYWORD">def</span> __init__(self):
<span class="comment">#</span><span class="comment"> setup the random chooser for the computer</span>
self.rand = random.Random()
self.cScore = 0 <span class="comment">#</span><span class="comment"> computer score</span>
self.hScore = 0 <span class="comment">#</span><span class="comment"> human score</span>
<span class="ANY_KEYWORD">def</span> getComputerMove(self):
<span class="ANY_KEYWORD">return</span> self.rand.randrange(1,4)
<span class="ANY_KEYWORD">def</span> getHumanMove(self):
<span class="ANY_KEYWORD">while</span> True:
choice = input(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Make your move: rock (1), paper (2), scissors(3): </span><span class="STRING_LITERAL">"</span>)
choice = choice.strip()
<span class="ANY_KEYWORD">if</span> choice == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">1</span><span class="STRING_LITERAL">"</span> <span class="ANY_KEYWORD">or</span> choice == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">rock</span><span class="STRING_LITERAL">"</span>:
<span class="ANY_KEYWORD">return</span> 1
<span class="ANY_KEYWORD">if</span> choice == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">2</span><span class="STRING_LITERAL">"</span> <span class="ANY_KEYWORD">or</span> choice == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">paper</span><span class="STRING_LITERAL">"</span>:
<span class="ANY_KEYWORD">return</span> 2
<span class="ANY_KEYWORD">if</span> choice == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">3</span><span class="STRING_LITERAL">"</span> <span class="ANY_KEYWORD">or</span> choice == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">scissors</span><span class="STRING_LITERAL">"</span>:
<span class="ANY_KEYWORD">return</span> 3
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">I didn't understand your choic</span><span class="STRING_LITERAL">e. Please try again</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> decideWinner(self, c, h):
<span class="STRING_LITERAL">"""</span>
<span class="STRING_LITERAL"> rock breaks scissors</span>
<span class="STRING_LITERAL"> paper covers rock</span>
<span class="STRING_LITERAL"> scissors cuts paper</span>
<span class="STRING_LITERAL">"""</span>
<span class="ANY_KEYWORD">if</span> (c, h) == (1, 3):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">rock breaks scissors</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">computer wins</span><span class="STRING_LITERAL">"</span>)
self.cScore+=1
<span class="ANY_KEYWORD">elif</span> (h, c) == (1, 3):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">rock breaks scissors</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">you win</span><span class="STRING_LITERAL">"</span>)
self.hScore+=1
<span class="ANY_KEYWORD">elif</span> (c, h) == (2, 1):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">paper covers rock</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">computer wins</span><span class="STRING_LITERAL">"</span>)
self.cScore+=1
<span class="ANY_KEYWORD">elif</span> (h, c) == (2, 1):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">paper covers rock</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">you win</span><span class="STRING_LITERAL">"</span>)
self.hScore+=1
<span class="ANY_KEYWORD">elif</span> (c, h) == (3, 2):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">scissors cuts paper</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">computer wins</span><span class="STRING_LITERAL">"</span>)
self.cScore+=1
<span class="ANY_KEYWORD">elif</span> (h, c) == (3, 2):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">scissors cuts paper</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">you win</span><span class="STRING_LITERAL">"</span>)
self.hScore+=1
<span class="ANY_KEYWORD">else</span>:
<span class="ANY_KEYWORD">pr</span><span class="ANY_KEYWORD">int</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Tie!</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> showScore(self):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Score:</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Computer: </span><span class="STRING_LITERAL">"</span>, self.cScore, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> You: </span><span class="STRING_LITERAL">"</span>, self.hScore)
<span class="ANY_KEYWORD">def</span> playAgain(self):
yn = input(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Play Again? (y/n): </span><span class="STRING_LITERAL">"</span>)
yn = yn.strip()
yn = yn.lower()
<span class="ANY_KEYWORD">if</span> yn == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">n</span><span class="STRING_LITERAL">"</span> <span class="ANY_KEYWORD">or</span> yn == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">no</span><span class="STRING_LITERAL">"</span>:
<span class="ANY_KEYWORD">return</span> False
<span class="ANY_KEYWORD">return</span> True
<span class="ANY_KEYWORD">def</span> gameLoop(self):
<span class="ANY_KEYWORD">while</span> True:
<span class="ANY_KEYWORD">print</span>()
<span class="ANY_KEYWORD">print</span>()
computerMove = self.getComputerMove()
humanMove = self.getHumanMove()
<span class="ANY_KEYWORD">print</span>()
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">you chose: </span><span class="STRING_LITERAL">"</span>, humanMove, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> computer chose: </span><span class="STRING_LITERAL">"</span>, computerMove)
self.decideWinner(computerMove, humanMove)
<span class="ANY_KEYWORD">print</span>()
self.showScore()
<span class="ANY_KEYWORD">if</span> self.playAgain() == False:
<span class="ANY_KEYWORD">return</span>
<span class="ANY_KEYWORD">if</span> __name__ == <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">__main__</span><span class="STRING_LITERAL">'</span>:
rps = RockPaperScissors()
rps.gameLoop()
<span class="comment">#</span><span class="comment"># my output:</span>
<span class="comment">#</span><span class="comment"># Make </span><span class="comment">your move: rock (1), paper (2), scissors(3): 2</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># you chose: 2 computer chose: 3</span>
<span class="comment">#</span><span class="comment"># scissors cuts paper</span>
<span class="comment">#</span><span class="comment"># computer wins</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># Score:</span>
<span class="comment">#</span><span class="comment"># Computer: 1 You: 0</span>
<span class="comment">#</span><span class="comment"># Play Ag</span><span class="comment">ain? (y/n): y</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># Make your move: rock (1), paper (2), scissors(3): 1</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># you chose: 1 computer chose: 1</span>
<span class="comment">#</span><span class="comment"># Tie!</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># Score:</span>
<span class="comment">#</span><span class="comment"># Com</span><span class="comment">puter: 1 You: 0</span>
<span class="comment">#</span><span class="comment"># Play Again? (y/n): y</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># Make your move: rock (1), paper (2), scissors(3): 3</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># you chose: 3 computer chose: 1</span>
<span class="comment">#</span><span class="comment">#</span><span class="comment"> rock breaks scissors</span>
<span class="comment">#</span><span class="comment"># computer wins</span>
<span class="comment">#</span><span class="comment">#</span>
<span class="comment">#</span><span class="comment"># Score:</span>
<span class="comment">#</span><span class="comment"># Computer: 2 You: 0</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-78846395928617192392011-03-03T07:52:00.000-08:002011-03-03T07:52:52.122-08:00Python - Compute the factorial of N with recursion (among others)<pre><span class="comment">#</span><span class="comment"> Calculating the factorial of a number</span>
<span class="comment">#</span><span class="comment"> is a good way to practice recursion. Below</span>
<span class="comment">#</span><span class="comment"> are examples of both recursive and iterative</span>
<span class="comment">#</span><span class="comment"> approaches to calculating a factor</span><span class="comment">ial. Of course</span>
<span class="comment">#</span><span class="comment"> python has its own builtin math module that</span>
<span class="comment">#</span><span class="comment"> can also take care of factorials.</span>
<span class="ANY_KEYWORD">import</span> math
<span class="comment">#</span><span class="comment"> A recursive function to calcul</span><span class="comment">ate the</span>
<span class="comment">#</span><span class="comment"> factorial of N</span>
<span class="ANY_KEYWORD">def</span> recursiveFactorial(n):
<span class="ANY_KEYWORD">if</span> n == 1:
<span class="ANY_KEYWORD">return</span> n
<span class="ANY_KEYWORD">return</span> n * recursiveFactorial(n - 1)
<span class="comment">#</span><span class="comment"> Iterativ</span><span class="comment">e calculation of the factorial</span>
<span class="comment">#</span><span class="comment"> of N</span>
<span class="ANY_KEYWORD">def</span> iterativeFactorial(n):
result = 1
<span class="ANY_KEYWORD">while</span> n > 1:
result *= n
n = n-1
<span class="ANY_KEYWORD">return</span> result
<span class="comment">#</span><span class="comment"> Built</span><span class="comment">in python math.factorial of N</span>
<span class="ANY_KEYWORD">def</span> pythonLib(n):
<span class="ANY_KEYWORD">return</span> math.factorial(n)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Iterative factorial of 5: </span><span class="STRING_LITERAL">"</span>, iterativeFactorial(5))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Recursive fact</span><span class="STRING_LITERAL">orial of 5: </span><span class="STRING_LITERAL">"</span>, recursiveFactorial(5))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">math.factorial of 5: </span><span class="STRING_LITERAL">"</span>, pythonLib(5))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Iterative factorial of 10: </span><span class="STRING_LITERAL">"</span>, iterativeFactorial(10))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Recursive fact</span><span class="STRING_LITERAL">orial of 10: </span><span class="STRING_LITERAL">"</span>, recursiveFactorial(10))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">math.factorial of 10: </span><span class="STRING_LITERAL">"</span>, pythonLib(10))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Iterative factorial of 15: </span><span class="STRING_LITERAL">"</span>, iterativeFactorial(15))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Recursive fa</span><span class="STRING_LITERAL">ctorial of 15: </span><span class="STRING_LITERAL">"</span>, recursiveFactorial(15))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">math.factorial of 15: </span><span class="STRING_LITERAL">"</span>, pythonLib(15))
<span class="comment">#</span><span class="comment"> my results:</span>
<span class="comment">#</span><span class="comment"> Iterative factorial of 5: 120</span>
<span class="comment">#</span><span class="comment"> Recursive factorial of 5: 120</span>
<span class="comment">#</span><span class="comment"> math.factorial of 5: 120</span>
<span class="comment">#</span><span class="comment"> Iterative factorial of 10: 3628800</span>
<span class="comment">#</span><span class="comment"> Recursive factorial of 10: 3628800</span>
<span class="comment">#</span><span class="comment"> math.factorial of 10: </span><span class="comment"> 3628800</span>
<span class="comment">#</span><span class="comment"> Iterative factorial of 15: 1307674368000</span>
<span class="comment">#</span><span class="comment"> Recursive factorial of 15: 1307674368000</span>
<span class="comment">#</span><span class="comment"> math.factorial of 15: 1307674368000</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-41909928589525336702011-02-08T14:30:00.000-08:002011-02-08T14:30:10.211-08:00Python - working with fractions<pre><span class="comment">#</span><span class="comment"> Add, Subract, Multiply or Divide Fractions with python</span>
<span class="comment">#</span><span class="comment"> use the built in python Fraction module</span>
<span class="ANY_KEYWORD">from</span> fractions <span class="ANY_KEYWORD">import</span> Fraction
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Enter two fractions.</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> Get the two fraction</span><span class="comment">s</span>
a = Fraction(input(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Enter the first fraction: </span><span class="STRING_LITERAL">"</span>))
b = Fraction(input(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Enter the second fraction: </span><span class="STRING_LITERAL">"</span>))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Add: </span><span class="STRING_LITERAL">"</span>, a + b)
<span class="ANY_KEYWORD">prin</span><span class="ANY_KEYWORD">t</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Subtract: </span><span class="STRING_LITERAL">"</span>, a - b)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Multiply: </span><span class="STRING_LITERAL">"</span>, a * b)
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Divide: </span><span class="STRING_LITERAL">"</span>, a / b)
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"># Enter two fractions.</span>
<span class="comment">#</span><span class="comment"># Enter the first fraction: 1/2</span>
<span class="comment">#</span><span class="comment"># En</span><span class="comment">ter the second fraction: 2/5</span>
<span class="comment">#</span><span class="comment"># Add: 9/10</span>
<span class="comment">#</span><span class="comment"># Subtract: 1/10</span>
<span class="comment">#</span><span class="comment"># Multiply: 1/5</span>
<span class="comment">#</span><span class="comment"># Divide: 5/4</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-57858731250665521242011-02-03T10:19:00.000-08:002011-02-03T10:19:58.348-08:00Python - Roman Numeral to Number Generator<pre><span class="comment">#</span><span class="comment"> Convert a roman numeral to a number.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> If you are interested in <a href="http://pythonicprose.blogspot.com/2011/02/python-roman-numeral-generator.html">roman numerals check out my other post </a></span>
<span class="comment">#</span><span class="comment"> python script that takes a number and generates a roman numeral</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> For a life time of knowledge checkout:</span>
<span class="comment">#</span><span class="comment"> http://en.wikipedia.org/wiki/Roman_numerals</span>
<span class="comment">#</span>
<span class="ANY_KEYWORD">def</span> ConvertRomanNumeralToNumber(roman_numeral):
number_result = 0
roman_numerals = {
1:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">I</span><span class="STRING_LITERAL">"</span>, 4:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">IV</span><span class="STRING_LITERAL">"</span>, 5:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">V</span><span class="STRING_LITERAL">"</span>, 9:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">IX</span><span class="STRING_LITERAL">"</span>,
10:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">X</span><span class="STRING_LITERAL">"</span>, 40:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">XL</span><span class="STRING_LITERAL">"</span>, 50:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">L</span><span class="STRING_LITERAL">"</span>,
90:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">XC</span><span class="STRING_LITERAL">"</span>, 100:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">C</span><span class="STRING_LITERAL">"</span>, 400:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">CD</span><span class="STRING_LITERAL">"</span>,
500:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">D</span><span class="STRING_LITERAL">"</span>, 900:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">CM</span><span class="STRING_LITERAL">"</span>, 1000:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">M</span><span class="STRING_LITERAL">"</span>}
<span class="comment">#</span><span class="comment"> Iterate through the roman numerals. But you see here that I sort them to</span>
<span class="comment">#</span><span class="comment"> get </span><span class="comment">the largest string size first: "CD" comes before "I"</span>
<span class="ANY_KEYWORD">for</span> numeral_value <span class="ANY_KEYWORD">in</span> sorted(roman_numerals,
key=<span class="ANY_KEYWORD">lambda</span> roman: len(roman_numerals[roman]),
reverse=True):
keep_converting = True
<span class="ANY_KEYWORD">while</span> keep_converting:
<span class="ANY_KEYWORD">if</span> roman_numeral.find(roman_numerals[numeral_value]) != -1:
number_result += numeral_value
roman_numeral = roman_numeral.replace(roman_numerals[numeral_value], <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">"</span>, 1)
<span class="ANY_KEYWORD">else</span>:
keep_converting = False
<span class="ANY_KEYWORD">return</span> number_result
<span class="ANY_KEYWORD">print</span>(ConvertRomanNumeralToNumber(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">MCDXLIV</span><span class="STRING_LITERAL">"</span>))
<span class="ANY_KEYWORD">print</span>(ConvertRomanNumeralToNumber(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">MMMDCCCLXXXVIII</span><span class="STRING_LITERAL">"</span>))
<span class="ANY_KEYWORD">print</span>(ConvertRomanNumeralToNumber(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">MMMCMXCIX</span><span class="STRING_LITERAL">"</span>))
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> 1444</span>
<span class="comment">#</span><span class="comment"> 3</span><span class="comment">888</span>
<span class="comment">#</span><span class="comment"> 3999</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-80457171530246386032011-02-03T10:17:00.000-08:002011-02-03T10:20:51.701-08:00Python - Roman Numeral Generator<pre><span class="comment">#</span><span class="comment"> Convert a number to a roman numeral.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> If you are interested in <a href="http://pythonicprose.blogspot.com/2011/02/python-roman-numeral-to-number.html">roman numerals check out my other post to convert roman numerals back to numbers</a></span>
<span class="comment">#</span><span class="comment"> python script that takes roman numerals and generates numbers.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> To increase your life time of knowledge read up on roman numerals:</span>
<span class="comment">#</span><span class="comment"> http://en.wikipedia.org/wiki/Roman_numerals</span>
<span class="ANY_KEYWORD">def</span> ConvertNumberToRomanNumeral(number):
roman_numeral_result = <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">"</span>
<span class="comment">#</span><span class="comment"> Roman numeral dict. Place approved roman numeral key:value pairs</span>
<span class="comment">#</span><span class="comment"> in the dict and </span><span class="comment">they will be used.</span>
roman_numerals = {
1:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">I</span><span class="STRING_LITERAL">"</span>, 4:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">IV</span><span class="STRING_LITERAL">"</span>, 5:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">V</span><span class="STRING_LITERAL">"</span>, 9:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">IX</span><span class="STRING_LITERAL">"</span>,
10:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">X</span><span class="STRING_LITERAL">"</span>, 40:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">XL</span><span class="STRING_LITERAL">"</span>, 50:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">L</span><span class="STRING_LITERAL">"</span>,
90:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">XC</span><span class="STRING_LITERAL">"</span>, 100:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">C</span><span class="STRING_LITERAL">"</span>, 400:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">CD</span><span class="STRING_LITERAL">"</span>,
500:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">D</span><span class="STRING_LITERAL">"</span>, 900:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">CM</span><span class="STRING_LITERAL">"</span>, 1000:<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">M</span><span class="STRING_LITERAL">"</span>}
<span class="comment">#</span><span class="comment"> Iterate from highest to lowest through the roman numerals.</span>
<span class="ANY_KEYWORD">for</span> numeral_value <span class="ANY_KEYWORD">in</span> sorted(roman_numerals.keys(), reverse=True):
<span class="comment">#</span><span class="comment"> Continue replacing large roman numerals while the number is</span>
<span class="comment">#</span><span class="comment"> high enough.</span>
<span class="ANY_KEYWORD">while</span> (number >= numeral_value):
<span class="comment">#</span><span class="comment"> Build the Roman Numeral string.</span>
roman_numeral_result += roman_numerals[numeral_value]
<span class="comment">#</span><span class="comment"> De</span><span class="comment">crease the working number by the roman numeral value just</span>
<span class="comment">#</span><span class="comment"> added to the roman numeral result.</span>
number -= numeral_value
<span class="ANY_KEYWORD">return</span> roman_numeral_result
<span class="ANY_KEYWORD">print</span>(ConvertNumberToRomanNumeral(1444))
<span class="ANY_KEYWORD">print</span>(ConvertNumberToRomanNumeral(3888))
<span class="ANY_KEYWORD">print</span>(ConvertNumberToRomanNumeral(3999))
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> MCDXLIV</span>
<span class="comment">#</span><span class="comment"> MMMDCCCLXXXVIII</span>
<span class="comment">#</span> <span class="comment"> MMMCMXCIX</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-61520869918105072752010-10-15T13:26:00.001-07:002010-10-15T13:26:44.808-07:00Python - Anagram generator<pre><span class="comment">#</span><span class="comment"> python anagram generator</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> This anagram generator uses a</span>
<span class="comment">#</span><span class="comment"> text file as a reference for</span>
<span class="comment">#</span><span class="comment"> appropriate words.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> The word file I used is in the</span>
<span class="comment">#</span><span class="comment"> follo</span><span class="comment">wing format (each word has</span>
<span class="comment">#</span><span class="comment"> it's own line):</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> act</span>
<span class="comment">#</span><span class="comment"> addition</span>
<span class="comment">#</span><span class="comment"> adjustment</span>
<span class="comment">#</span><span class="comment"> advertisement</span>
<span class="comment">#</span><span class="comment"> after</span>
<span class="comment">#</span><span class="comment"> again</span>
<span class="comment">#</span><span class="comment"> against</span>
<span class="comment">#</span><span class="comment"> ... and on and on...</span>
<span class="comment">#</span>
<span class="ANY_KEYWORD">def</span> isAnagramOf(attempt, original):
<span class="comment">#</span><span class="comment"> all the same case</span>
attempt = attempt.strip()
<span class="ANY_KEYWORD">if</span> len(attempt) < 1: <span class="comment">#</span><span class="comment"> only actual words</span>
<span class="ANY_KEYWORD">return</span> False
attempt, original = attempt.lower(), original.lower()
<span class="ANY_KEYWORD">for</span> character <span class="ANY_KEYWORD">in</span> attempt:
position = original.find(character)
<span class="ANY_KEYWORD">if</span> (position == -1):
<span class="ANY_KEYWORD">return</span> False
original = original.replace(character, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>, 1)
<span class="ANY_KEYWORD">return</span> True
<span class="ANY_KEYWORD">def</span> getAnagramsFor(text):
anagrams = []
wordlist = open(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">wordlist.txt</span><span class="STRING_LITERAL">"</span>, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">r</span><span class="STRING_LITERAL">'</span>)
<span class="ANY_KEYWORD">for</span> line <span class="ANY_KEYWORD">in</span> wordlist:
line = line.strip(<span class="STRING_LITERAL">"</span><span class="ST0">\n</span><span class="STRING_LITERAL">"</span>) <span class="comment">#</span><span class="comment">strip the carriage return</span>
<span class="ANY_KEYWORD">if</span> isAnagramOf(line, text):
anagrams.append(line)
<span class="ANY_KEYWORD">return</span> anagrams
matching_anagrams = getAnagramsFor(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">p</span><span class="STRING_LITERAL">ythonic prose</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span>(len(matching_anagrams), <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">total anagrams generated</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">for</span> ana <span class="ANY_KEYWORD">in</span> matching_anagrams:
<span class="ANY_KEYWORD">print</span>(ana)
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> 66 tot</span><span class="comment">al anagrams generated</span>
<span class="comment">#</span><span class="comment"> chest</span>
<span class="comment">#</span><span class="comment"> chin</span>
<span class="comment">#</span><span class="comment"> copper</span>
<span class="comment">#</span><span class="comment"> copy</span>
<span class="comment">#</span><span class="comment"> cry</span>
<span class="comment">#</span><span class="comment"> he</span>
<span class="comment">#</span><span class="comment"> history</span>
<span class="comment">#</span><span class="comment"> hope</span>
<span class="comment">#</span><span class="comment"> ... skip a few ...</span>
<span class="comment">#</span><span class="comment"> theory</span>
<span class="comment">#</span><span class="comment"> thin</span>
<span class="comment">#</span><span class="comment"> this</span>
<span class="comment">#</span><span class="comment"> tin</span>
<span class="comment">#</span><span class="comment"> to</span>
<span class="comment">#</span><span class="comment"> toe</span>
<span class="comment">#</span><span class="comment"> top</span>
<span class="comment">#</span> <span class="comment">yes</span>
</pre>Unknownnoreply@blogger.com2tag:blogger.com,1999:blog-1513551336296610535.post-10343259874801495172010-10-15T12:46:00.000-07:002010-10-15T12:46:25.041-07:00Python - Anagram detector<pre><span class="comment">#</span><span class="comment"> A python Anagram detector</span>
<span class="comment">#</span><span class="comment"> manipulate anagrams with python</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> Python could no doubt solve this in</span>
<span class="comment">#</span><span class="comment"> many ways.... here is one:</span>
<span class="comment">#</span><span class="comment"> determine whether a </span><span class="comment">string is an anagram</span>
<span class="comment">#</span><span class="comment"> of another string</span>
<span class="ANY_KEYWORD">def</span> isAnagramOf(attempt, original):
<span class="comment">#</span><span class="comment"> all the same case</span>
attempt, original = attempt.lower(), original.lower()
<span class="ANY_KEYWORD">for</span> character <span class="ANY_KEYWORD">in</span> attempt:
position = original.find(character)
<span class="ANY_KEYWORD">if</span> (position == -1):
<span class="ANY_KEYWORD">return</span> False
original = original.replace(character, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>, 1)
<span class="ANY_KEYWORD">return</span> True
original = <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Texas Ranger</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Is Rage an anagram of</span><span class="STRING_LITERAL">"</span>, original, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">=</span><span class="STRING_LITERAL">"</span>,
isAnagramOf(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Anger</span><span class="STRING_LITERAL">"</span>, original))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Is Extra Angers an anagram of</span><span class="STRING_LITERAL">"</span>, original, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">=</span><span class="STRING_LITERAL">"</span>,
isAnagramOf(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Extra Angers</span><span class="STRING_LITERAL">"</span>, original))
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Is Extra Angered an an</span><span class="STRING_LITERAL">agram of</span><span class="STRING_LITERAL">"</span>, original, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">=</span><span class="STRING_LITERAL">"</span>,
isAnagramOf(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Extra Angered</span><span class="STRING_LITERAL">"</span>, original))
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> Is Rage an anagram of Texas Ranger = True</span>
<span class="comment">#</span><span class="comment"> Is Extra Angers </span><span class="comment">an anagram of Texas Ranger = True</span>
<span class="comment">#</span><span class="comment"> Is Extra Angered an anagram of Texas Ranger = False</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-89638663955641434062010-10-15T10:25:00.000-07:002010-10-15T10:25:56.036-07:00Python - palindrome detector<pre><span class="comment">#</span><span class="comment"> palindrome detector</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> parse text and print out palindromes</span>
<span class="comment">#</span><span class="comment"> make a map to remove punctuation</span>
punc = {<span class="STRING_LITERAL">"</span> <span class="STRING_LITERAL">"</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">,</span><span class="STRING_LITERAL">"</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">.</span><span class="STRING_LITERAL">"</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">!</span><span class="STRING_LITERAL">"</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">?</span><span class="STRING_LITERAL">"</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">"</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">'</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">:</span><span class="STRING_LITERAL">'</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="ST0">\n</span><span class="STRING_LITERAL">'</span>:<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>}
puncMap = str.maketrans(punc)
<span class="comment">#</span><span class="comment"> determines whether given text is a palindrome</span>
<span class="ANY_KEYWORD">def</span> isPalindrome(text):
<span class="comment">#</span><span class="comment"> change to all the same case</span>
text = text.lower()
<span class="comment">#</span><span class="comment"> remove punctuation</span>
text = text.translate(puncMap)
<span class="comment">#</span><span class="comment"> to c</span><span class="comment">ount as a palindrome it must have</span>
<span class="comment">#</span><span class="comment"> at least 2 valid characters</span>
<span class="ANY_KEYWORD">if</span> (len(text) < 2):
<span class="ANY_KEYWORD">return</span> False
<span class="comment">#</span><span class="comment"> palindrome if it reads the same</span>
<span class="comment">#</span><span class="comment"> front</span><span class="comment"> or backwards</span>
<span class="ANY_KEYWORD">return</span> text == text[::-1]
givenText = <span class="STRING_LITERAL">"""</span>
<span class="STRING_LITERAL"> Hi Mom, welcome. A man, a plan, a canal, panama. And </span>
<span class="STRING_LITERAL"> other text. </span>
<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">""</span>
<span class="comment">#</span><span class="comment"> first check the whole text</span>
<span class="ANY_KEYWORD">if</span> (isPalindrome(givenText)):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">The entire text: '</span><span class="STRING_LITERAL">"</span> + givenText.strip() + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">' is a palindr</span><span class="STRING_LITERAL">ome.</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> now check by sentence</span>
<span class="ANY_KEYWORD">for</span> sentence <span class="ANY_KEYWORD">in</span> givenText.split(<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">.</span><span class="STRING_LITERAL">'</span>):
<span class="ANY_KEYWORD">if</span> (isPalindrome(sentence)):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">The sentence: '</span><span class="STRING_LITERAL">"</span> + sentence.strip() + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">' is a palindrome.</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> now check every word</span>
<span class="ANY_KEYWORD">for</span> word <span class="ANY_KEYWORD">in</span> givenText.split(<span class="STRING_LITERAL">'</span> <span class="STRING_LITERAL">'</span>):
<span class="ANY_KEYWORD">if</span> (isPalindrome(word)):
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">The word: '</span><span class="STRING_LITERAL">"</span> + word.strip() + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">' is a palindrome.</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> The sentence: 'A man, a plan, a canal, panama' is a palindrome.</span>
<span class="comment">#</span><span class="comment"> The word: 'Mom,' is a palindrome.</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-70088880616996503422010-08-20T12:55:00.000-07:002010-10-15T13:27:30.727-07:00Python - limit cpu percentage for script<pre><span class="comment">#</span><span class="comment"> It is sometimes useful to monitor how much cpu time or</span>
<span class="comment">#</span><span class="comment"> cpu percentage your script is consuming.</span>
<span class="comment">#</span><span class="comment"> This script will limit the</span><span class="comment"> cpu usage of your script</span>
<span class="comment">#</span><span class="comment"> This example demostrates how to calculate the system</span>
<span class="comment">#</span><span class="comment"> and user cpu time and cpu percentage</span>
<span class="comment">#</span><span class="comment"> Note: this example is in pytho</span><span class="comment">n 3.0</span>
<span class="comment">#</span><span class="comment"> however, it is easily ported back to 2.x</span>
<span class="comment">#</span><span class="comment"> by replaceing print() with print</span>
<span class="ANY_KEYWORD">import</span> os
<span class="ANY_KEYWORD">import</span> time
<span class="ANY_KEYWORD">def</span> getPercentage(unew, uold, start):
<span class="STRING_LITERAL">"""</span>
<span class="STRING_LITERAL"> calculate the percentage of cpu time</span>
<span class="STRING_LITERAL">"""</span>
<span class="ANY_KEYWORD">return</span> 100 * (float(unew) - float(uold)) / (time.time()-float(start))
<span class="ANY_KEYWORD">def</span> looper(timeCount, percentageGoal):
<span class="STRING_LITERAL">"""</span>
<span class="STRING_LITERAL"> loop over many tasks and keep the total cpu percentage</span>
<span class="STRING_LITERAL"> consumtion to a d</span><span class="STRING_LITERAL">esired level</span>
<span class="STRING_LITERAL">"""</span>
start = time.time()
time.sleep(0.1)
keepLooping = True
uold, sold, cold, c, e = os.times()
percentage = 0.0
<span class="ANY_KEYWORD">while</span> keepLooping:
unew, snew, cnew, c, e = os.times()
<span class="comment">#</span><span class="comment"> since we are calculating the times from before we s</span><span class="comment">tarted looping the</span>
<span class="comment">#</span><span class="comment"> percentages will be averaged over the duration of the script.</span>
<span class="ANY_KEYWORD">print</span> (<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">user %</span><span class="STRING_LITERAL">"</span>, percentage)
<span class="comment">#</span><span class="comment"> This just toggl</span><span class="comment">es to stop looping</span>
<span class="comment">#</span><span class="comment"> when a time has been reached. In a real</span>
<span class="comment">#</span><span class="comment"> script you would check for more work and</span>
<span class="comment">#</span><span class="comment"> toggle off when there is no more work </span><span class="comment">to</span>
<span class="comment">#</span><span class="comment"> be done.</span>
<span class="ANY_KEYWORD">if</span> time.time()-start > timeCount:
keepLooping = False
<span class="comment">#</span><span class="comment">else:</span>
<span class="comment">#</span><span class="comment"> print( time.ti</span><span class="comment">me()-start)</span>
<span class="comment">#</span><span class="comment"> do work:</span>
<span class="comment">#</span><span class="comment"> In order for this script to actually help limit</span>
<span class="comment">#</span><span class="comment"> the cpu usage you would need to brea</span><span class="comment">k your script into</span>
<span class="comment">#</span><span class="comment"> sections.</span>
<span class="comment">#</span><span class="comment"> For example: if you were going to iterate through a large</span>
<span class="comment">#</span><span class="comment"> list of data and per</span><span class="comment">form actions on the contents</span>
<span class="comment">#</span><span class="comment"> of the list then you should perform on action here</span>
<span class="comment">#</span><span class="comment"> and keep looping through until all the action</span><span class="comment">s</span>
<span class="comment">#</span><span class="comment"> are accomplished.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> in this case we're just eating cpu so we get some numbers</span>
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">d</span><span class="STRING_LITERAL">o work...</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> range(1,1000000):
b = 8*342*i*234
<span class="comment">#</span><span class="comment"> tone back cpu usage</span>
<span class="ANY_KEYWORD">while</span> True:
percentage = getPercentage(unew, uold, start)
<span class="ANY_KEYWORD">if</span> percentage > percentageGoal:
time.sleep(0.1)
<span class="ANY_KEYWORD">else</span>:
<span class="ANY_KEYWORD">break</span>;
<span class="ANY_KEYWORD">if</span> __name__ == <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">__main__</span><span class="STRING_LITERAL">'</span>:
<span class="comment">#</span><span class="comment"> loop through work (for 4 seconds) and keep the cpu %</span>
<span class="comment">#</span><span class="comment"> to less than 30%</span>
looper(4, 30)
<span class="comment">#</span><span class="comment"># my output:</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 0.0</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 0.0</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 29.6673831301</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 29.1137166495</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % </span><span class="comment">29.7617156875</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 29.5707887319</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 29.8122197706</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 29.3053848216</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">user % 29.9385051866</span>
<span class="comment">#</span><span class="comment">#</span> <span class="comment">do work...</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-45144415111244251052010-07-26T09:44:00.000-07:002010-07-26T09:44:55.344-07:00Python - simple event programming<pre><span class="comment">#</span><span class="comment"> simple event programming with python</span>
<span class="comment">#</span><span class="comment"> this example is written in p3k ... but can</span>
<span class="comment">#</span><span class="comment"> be easily ported to 2.x</span>
<span class="comment">#</span><span class="comment"> Event Thrower</span>
<span class="ANY_KEYWORD">class</span> QueenBee(object):
<span class="ANY_KEYWORD">def</span> __init__(self):
self.subscriber_to_event_list = []
<span class="ANY_KEYWORD">def</span> addSubscriberToEvent(self, subscriber, eventText):
<span class="STRING_LITERAL">'''</span><span class="STRING_LITERAL"> subscribe bees</span><span class="STRING_LITERAL"> to eventText commands </span><span class="STRING_LITERAL">'''</span>
se = (subscriber, eventText)
self.subscriber_to_event_list.append(se)
<span class="ANY_KEYWORD">def</span> issueCommand(self, eventText):
<span class="STRING_LITERAL">'''</span><span class="STRING_LITERAL"> raise event to followers </span><span class="STRING_LITERAL">'''</span>
<span class="ANY_KEYWORD">for</span> se <span class="ANY_KEYWORD">in</span> self.subscriber_to_event_list:
sub = se[0]
eve = se[1]
<span class="ANY_KEYWORD">if</span> eve == eventText:
sub(eve)
<span class="comment">#</span><span class="comment"> event subscriber</span>
<span class="ANY_KEYWORD">class</span> WorkerBee(object):
<span class="ANY_KEYWORD">def</span> __init__(self, name, event):
self.name = name
<span class="ANY_KEYWORD">def</span> receiveEvent(self, eventName):
<span class="STRING_LITERAL">'''</span><span class="STRING_LITERAL"> begin work from here </span><span class="STRING_LITERAL">'''</span>
<span class="ANY_KEYWORD">print</span> (self.name + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> 'By Your Command,' rece</span><span class="STRING_LITERAL">ived event: </span><span class="STRING_LITERAL">"</span> + eventName)
qb = QueenBee()
<span class="comment">#</span><span class="comment"> worker bees</span>
bList = []
<span class="comment">#</span><span class="comment"> subscribe bees to commands (events)</span>
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> range(10):
bName = <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">b</span><span class="STRING_LITERAL">"</span>+str(i)
eventText = <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Do More Work</span><span class="STRING_LITERAL">"</span>
b = WorkerBee(bName, eventText)
qb.addSubscriberToEvent(b.receiveEvent, eventText)
bList.append(b)
<span class="comment">#</span><span class="comment"> queen bee issu</span><span class="comment">es command that bees are not subscribed to</span>
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">unscribed to command output: </span><span class="STRING_LITERAL">"</span>)
qb.issueCommand(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">make me a sandwhich</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> nothing happens</span>
<span class="ANY_KEYWORD">print</span>()
<span class="ANY_KEYWORD">print</span>(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">subscribed event</span><span class="STRING_LITERAL"> issued:</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> queen bee issues subscribed to event</span>
qb.issueCommand(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Do More Work</span><span class="STRING_LITERAL">"</span>)
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-20196622069729681012010-04-14T14:18:00.000-07:002010-04-14T14:18:02.868-07:00Python - frequency and location of words in text<pre><span class="comment">#</span><span class="comment"> Split a paragraph into lines and find</span>
<span class="comment">#</span><span class="comment"> the frequency and line number of words.</span>
<span class="ANY_KEYWORD">from</span> operator <span class="ANY_KEYWORD">import</span> itemgetter
<span class="comment">#</span><span class="comment"> words and locations are stored in a dict</span>
wordDict = {}
<span class="comment">#</span><span class="comment"> the text we will parse</span>
text = <span class="STRING_LITERAL">'''</span><span class="STRING_LITERAL"> this is the text on line one.</span>
<span class="STRING_LITERAL">this is line two text.</span>
<span class="STRING_LITERAL">here is the text of line number three.</span><span class="STRING_LITERAL">'''</span>
<span class="ANY_KEYWORD">def</span> groupWords(text):
lineCount = 0
<span class="comment">#</span><span class="comment"> break down by lines</span>
<span class="ANY_KEYWORD">for</span> line <span class="ANY_KEYWORD">in</span> text.split(<span class="STRING_LITERAL">'</span><span class="ST0">\n</span><span class="STRING_LITERAL">'</span>):
line = line.strip(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">.,!?:;'</span><span class="STRING_LITERAL">"</span>) <span class="comment">#</span><span class="comment"> strip puncuation</span>
lineCount += 1
upLine = line.upper() <span class="comment">#</span><span class="comment"> words are words..case no matter</span>
<span class="comment">#</span><span class="comment"> break line into words</span>
<span class="ANY_KEYWORD">f</span><span class="ANY_KEYWORD">or</span> word <span class="ANY_KEYWORD">in</span> upLine.split():
<span class="ANY_KEYWORD">if</span> wordDict.has_key(word):
<span class="comment">#</span><span class="comment"> then add to the key</span>
tempValue = wordDict[word]
wordDict[word] = str(tempValue) + <span class="STRING_LITERAL">"</span> <span class="STRING_LITERAL">"</span> + str(lineCount)
<span class="ANY_KEYWORD">else</span>:
<span class="comment">#</span><span class="comment"> add it</span>
wordDict[word] = <span class="STRING_LITERAL">"</span> <span class="STRING_LITERAL">"</span> + str(lineCount)
groupWords(text)
<span class="comment">#</span><span class="comment"> alphabetic</span><span class="comment">al output</span>
<span class="ANY_KEYWORD">for</span> k <span class="ANY_KEYWORD">in</span> sorted(wordDict.iterkeys()):
<span class="ANY_KEYWORD">print</span> k + str(wordDict[k])
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"># HERE 3</span>
<span class="comment">#</span><span class="comment"># IS 1 2 3</span>
<span class="comment">#</span><span class="comment"># LINE 1 2 3</span>
<span class="comment">#</span><span class="comment"># NU</span><span class="comment">MBER 3</span>
<span class="comment">#</span><span class="comment"># OF 3</span>
<span class="comment">#</span><span class="comment"># ON 1</span>
<span class="comment">#</span><span class="comment"># ONE 1</span>
<span class="comment">#</span><span class="comment"># TEXT 1 2 3</span>
<span class="comment">#</span><span class="comment"># THE 1 3</span>
<span class="comment">#</span><span class="comment"># THIS 1 2</span>
<span class="comment">#</span><span class="comment"># THREE 3</span>
<span class="comment">#</span><span class="comment"># TWO 2</span>
<span class="comment">#</span><span class="comment"> most frequent style output</span>
<span class="comment">#</span><span class="comment"> put th</span><span class="comment">e dict in a list</span>
wordList = []
<span class="ANY_KEYWORD">for</span> k <span class="ANY_KEYWORD">in</span> wordDict.iterkeys():
wordList.append((str(len(wordDict[k].replace(<span class="STRING_LITERAL">'</span> <span class="STRING_LITERAL">'</span>,<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">'</span>))),
str(k),
wordDict[k]))
<span class="ANY_KEYWORD">for</span> word <span class="ANY_KEYWORD">in</span> sorted(wordList, key=itemgetter(0), reverse=True):
<span class="ANY_KEYWORD">print</span> word[0], word[1], <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">:</span><span class="STRING_LITERAL">"</span>+word[2]
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"># 3 TEXT : 1 2 3</span>
<span class="comment">#</span><span class="comment"># 3 IS : 1 2 3</span>
<span class="comment">#</span><span class="comment"># 3 LINE : 1 2 3</span>
<span class="comment">#</span><span class="comment"># 2 THIS : 1 2</span>
<span class="comment">#</span><span class="comment"># 2 THE : 1 3</span>
<span class="comment">#</span><span class="comment"># 1 ON : 1</span>
<span class="comment">#</span><span class="comment"># 1 TWO : 2</span>
<span class="comment">#</span><span class="comment"># 1 HERE : 3</span>
<span class="comment">#</span><span class="comment"># 1 ONE : 1</span>
<span class="comment">#</span><span class="comment"># 1 NUMBER : 3</span>
<span class="comment">#</span><span class="comment"># 1 OF : 3</span>
<span class="comment">#</span><span class="comment"># 1 THREE : 3</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-57992598197147559382010-04-12T08:59:00.000-07:002010-04-12T08:59:27.455-07:00Python - Finding GCD with Euclids Algorithm<pre><span class="comment">#</span><span class="comment"> Implementing the Euclidean Algorithm</span>
<span class="comment">#</span><span class="comment"> is simple in python.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> Euclid's algorithm is used to efficiently</span>
<span class="comment">#</span><span class="comment"> find two numbers greatest common divisor (GCD)</span>
<span class="comment">#</span><span class="comment"> Divisio</span><span class="comment">n based Euclidean algorithm</span>
<span class="ANY_KEYWORD">def</span> gcd(a,b):
<span class="ANY_KEYWORD">while</span> b != 0:
temp = b
b = a%b
a = temp
<span class="ANY_KEYWORD">return</span> a
<span class="comment">#</span><span class="comment"> Recursive based Euclidean algo</span><span class="comment">rithm</span>
<span class="ANY_KEYWORD">def</span> recursiveGCD(a,b):
<span class="ANY_KEYWORD">if</span> b==0:
<span class="ANY_KEYWORD">return</span> a
<span class="ANY_KEYWORD">else</span>:
<span class="ANY_KEYWORD">return</span> recursiveGCD(b, a%b)
<span class="comment">#</span><span class="comment"> just to prove they both w</span><span class="comment">ork the same:</span>
<span class="ANY_KEYWORD">def</span> findGCD(a,b):
divisionStyle = gcd(a,b)
recursiveStyle = recursiveGCD(a,b)
<span class="ANY_KEYWORD">if</span> divisionStyle != recursiveStyle:
<span class="ANY_KEYWORD">return</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Fail...GCDs differ</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">else</span>:
<span class="ANY_KEYWORD">return</span> divisionStyle
<span class="ANY_KEYWORD">print</span> findGCD(1071, 462)
<span class="ANY_KEYWORD">print</span> findGCD(5, 10)
<span class="ANY_KEYWORD">print</span> findGCD(5214, 24324)
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> 21</span>
<span class="comment">#</span><span class="comment"> 5</span>
<span class="comment">#</span><span class="comment"> 6</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-20126987454119501152010-04-07T13:49:00.000-07:002010-04-07T13:49:46.804-07:00Python - Tkinter frontend example to ping<pre><span class="comment">#</span><span class="comment"> python GUI example using Tkinter</span>
<span class="comment">#</span><span class="comment"> Everyone likes to ping servers and what</span>
<span class="comment">#</span><span class="comment"> not so this example is a front end</span>
<span class="comment">#</span><span class="comment"> to the well used ping command.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> Python has q</span><span class="comment">uite a few different</span>
<span class="comment">#</span><span class="comment"> frameworks to choose from. For</span>
<span class="comment">#</span><span class="comment"> this example I'll use the basic</span>
<span class="comment">#</span><span class="comment"> Tkinter that ships with most python</span>
<span class="comment">#</span><span class="comment"> installers.</span>
<span class="comment">#</span>
<span class="ANY_KEYWORD">from</span> Tkinter <span class="ANY_KEYWORD">import</span> *
<span class="ANY_KEYWORD">from</span> subprocess <span class="ANY_KEYWORD">import</span> PIPE, Popen
<span class="ANY_KEYWORD">class</span> App:
<span class="ANY_KEYWORD">def</span> __init__(self, master):
frame = Frame(master)
frame.grid()
<span class="comment">#</span><span class="comment"> create and position widgets</span>
self.label = Label(frame, text=<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Enter IP Address or Server Name:</span><span class="STRING_LITERAL">"</span>)
self.label.grid(row=0, column=0, sticky=W)
self.textbox = Text(frame, height=1, width=40)
self.textbox.grid(row=1, column=0, columnspan=2, sticky=W)
self.textbox.insert(END, <span class="STRING_LITERAL">"</span><span class="ST0">www.google.com</span><span class="STRING_LITERAL">"</span>)
self.resultsBox = Text(frame, height=10, width=60)
self.resultsBox.grid(row=3, column=0, columnspan=3, sticky=W)
self.hi_there = Button(frame, text=<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Ping</span><span class="STRING_LITERAL">"</span>,
width=10, command=self.doPing)
self.hi_there.grid(row=1, column=2, sticky=W)
<span class="ANY_KEYWORD">def</span> doPing(self):
<span class="comment">#</span><span class="comment"> reset result box</span>
self.resultsBox.delete(1.0, END)
<span class="comment">#</span><span class="comment"> get text</span>
texttext = self.textbox.get(1.0, END)
exelist = [<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">ping</span><span class="STRING_LITERAL">'</span>, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">-n</span><span class="STRING_LITERAL">'</span>, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">1</span><span class="STRING_LITERAL">'</span>]
exelist.append(texttext)
<span class="comment">#</span><span class="comment"> Execute command (these ping commands are window</span><span class="comment">s specific).</span>
<span class="comment">#</span><span class="comment"> In Linux you would use the '-c' to specify count.</span>
exe = Popen(exelist, shell=False, stdout=PIPE, stderr=PIPE)
out, err = exe.communicate()
<span class="ANY_KEYWORD">while</span> out:
self.resultsBox.insert(END, out)
out, err = exe.communicate()
root = Tk()
app = App(root)
root.mainloop()
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-88156609527061283572010-04-07T08:40:00.000-07:002010-04-07T08:40:01.954-07:00Python - event programming example<pre><span class="comment">#</span><span class="comment"> Event programming in python</span>
<span class="comment">#</span><span class="comment"> Python doesn't have a standard 'only' way</span>
<span class="comment">#</span><span class="comment"> of doing events. You can create your own</span>
<span class="comment">#</span><span class="comment"> pythonic events like so.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> In the ex</span><span class="comment">ample you'll notice that the Musician</span>
<span class="comment">#</span><span class="comment"> handles all the recieved events. You could</span>
<span class="comment">#</span><span class="comment"> have just as easily created specific event</span>
<span class="comment">#</span><span class="comment"> handlers for the reacting classes. </span><span class="comment"> Whatever</span>
<span class="comment">#</span><span class="comment"> makes sense for your application is good.</span>
<span class="comment">#</span><span class="comment"> Python is flexible!</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> This would be a way that</span>
<span class="comment">#</span><span class="comment"> python could implement events o</span><span class="comment">r delegates.</span>
<span class="ANY_KEYWORD">import</span> time
<span class="comment">#</span><span class="comment"> Important class that will raise events</span>
<span class="ANY_KEYWORD">class</span> Orchestrator(object):
<span class="ANY_KEYWORD">def</span> __init__(self):
<span class="comment">#</span><span class="comment"> You'll noti</span><span class="comment">ce that the events instances</span>
<span class="comment">#</span><span class="comment"> of the subscribers are stored in these</span>
<span class="comment">#</span><span class="comment"> lists. Having a list allows multiple</span>
<span class="comment">#</span><span class="comment"> subscribers to the ev</span><span class="comment">ent.</span>
self.armsRaise = []
self.pointsAtMe = []
<span class="ANY_KEYWORD">def</span> subscribeToArmRaiseEvent(self, event):
<span class="comment">#</span><span class="comment"> we append the </span><span class="comment">instance methods to the</span>
<span class="comment">#</span><span class="comment"> event lists</span>
self.armsRaise.append(event)
<span class="ANY_KEYWORD">def</span> subscribeToPointsAtMeEvent(self, event):
<span class="comment">#</span><span class="comment"> we append </span><span class="comment">the instance methods to the</span>
<span class="comment">#</span><span class="comment"> event lists</span>
self.pointsAtMe.append(event)
<span class="ANY_KEYWORD">def</span> raiseArmRaiseEvent(self):
<span class="comment">#</span><span class="comment"> iterating through the li</span><span class="comment">sts we call</span>
<span class="comment">#</span><span class="comment"> each of the instance methods</span>
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> self.armsRaise:
i(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Arms Raised</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> raisePointsAtMeEvent(self):
<span class="comment">#</span><span class="comment"> iterating through the lists we call</span>
<span class="comment">#</span><span class="comment"> each of the instance methods</span>
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> self.pointsAtMe:
i(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Points at me</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> raiseArms(self):
self.raiseArmRaiseEvent()
<span class="ANY_KEYWORD">def</span> pointAtMusician(self):
self.raisePointsAtMeEvent()
<span class="comment">#</span><span class="comment"> class that reacts to events</span>
<span class="ANY_KEYWORD">class</span> Musician(object):
<span class="ANY_KEYWORD">def</span> __init__(self, name):
self.name = name
<span class="ANY_KEYWORD">def</span> receiveEvent(self, msg):
<span class="ANY_KEYWORD">if</span> msg == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Arms Raised</span><span class="STRING_LITERAL">"</span>:
<span class="ANY_KEYWORD">print</span> self.name + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> hold up instrument</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">if</span> msg == <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Points at me</span><span class="STRING_LITERAL">"</span>:
<span class="ANY_KEYWORD">print</span> self.name + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> play instr</span><span class="STRING_LITERAL">ument</span><span class="STRING_LITERAL">"</span>
<span class="comment">#</span><span class="comment"> players</span>
o = Orchestrator()
m = Musician(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">trumpet</span><span class="STRING_LITERAL">"</span>)
m2 = Musician(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">clarinet</span><span class="STRING_LITERAL">"</span>)
<span class="comment">#</span><span class="comment"> Subscribe to the Orchestrator events:</span>
<span class="comment">#</span><span class="comment"> We're</span><span class="comment"> really just assigning instance methods</span>
<span class="comment">#</span><span class="comment"> of our Musician objects to the Orchestra object.</span>
o.subscribeToArmRaiseEvent(m.receiveEvent)
o.subscribeToPointsAtMeEvent(m.receiveEvent)
o.subscribeToArmRaiseEvent(m2.receiveEvent)
o.subscribeToPointsAtMeEvent(m2.receiveEvent)
<span class="comment">#</span><span class="comment"> Concert begins</span>
o.raiseArms()
<span class="comment">#</span><span class="comment"> ... </span><span class="comment">other actions and events</span>
<span class="comment">#</span><span class="comment"> represented by:</span>
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">do bee doo be dooo be do do do</span><span class="STRING_LITERAL">"</span>
time.sleep(4)
<span class="comment">#</span><span class="comment"> finally gets to your part of the song</span>
o.pointAtMusician()
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> trumpet hold up instrument</span>
<span class="comment">#</span><span class="comment"> clarinet hold up instrument</span>
<span class="comment">#</span><span class="comment"> do bee doo be dooo be do do do</span>
<span class="comment">#</span><span class="comment"> trumpet play</span><span class="comment"> instrument</span>
<span class="comment">#</span><span class="comment"> clarinet play instrument</span>
</pre>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1513551336296610535.post-2348940809255405282010-03-31T11:21:00.001-07:002010-03-31T11:21:56.545-07:00Python - insult generator<pre><span class="comment">#</span><span class="comment"> negative reinforcement through insults</span>
<span class="comment">#</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> Sometimes negative reinforcement is the way to go.</span>
<span class="comment">#</span><span class="comment"> For the times when you need a kick in the pants</span>
<span class="comment">#</span><span class="comment"> rather than a pat o</span><span class="comment">n the back I whipped up this</span>
<span class="comment">#</span><span class="comment"> insult generator.</span>
<span class="comment">#</span><span class="comment"> It will churn out more insults then you can shake</span>
<span class="comment">#</span><span class="comment"> a stick at.</span>
<span class="ANY_KEYWORD">import</span> random
<span class="ANY_KEYWORD">class</span> insultGenerator(object):
<span class="ANY_KEYWORD">def</span> __init__(self):
<span class="comment">#</span><span class="comment"> setup the lists of insult fodder</span>
self.nounList = [<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">loser</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">j</span><span class="STRING_LITERAL">erk</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">nerd</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">doodie head</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">butthead</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">bonehead</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">dunce</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">moron</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">nerf herder</span><span class="STRING_LITERAL">'</span>]
self.adjectiveList = [<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">smelly</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">ugly</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">gimpy</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">slimy</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">crabby</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">scabby</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">scratchy</span><span class="STRING_LITERAL">'</span>]
self.connectorList = [<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">are one</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">are the biggest</span><span class="STRING_LITERAL">'</span>,
<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">are becoming a</span><span class="STRING_LITERAL">'</span>]
<span class="ANY_KEYWORD">def</span> getInsult(self):
insult = <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">you</span><span class="STRING_LITERAL">"</span>
<span class="comment">#</span><span class="comment"> connector phrase</span>
connector = random.randint(1, len(self.connectorList))
insult += <span class="STRING_LITERAL">"</span> <span class="STRING_LITERAL">"</span> + self.connectorList[connector-1]
<span class="comment">#</span><span class="comment"> adjectives</span>
adjCount = random.randint(2,4)
random.shuffle(self.adjectiveList)
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> xrange(0,adjCount):
<span class="ANY_KEYWORD">if</span> i != 0:
insult += <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">, </span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">else</span>:
insult += <span class="STRING_LITERAL">"</span> <span class="STRING_LITERAL">"</span>
insult += self.adjectiveList[i]
<span class="comment">#</span><span class="comment"> ending noun</span>
noun = random.randint(1,len(self.nounList))
insult += <span class="STRING_LITERAL">"</span> <span class="STRING_LITERAL">"</span> + self.nounList[noun-1]
<span class="ANY_KEYWORD">return</span> insult
<span class="comment">#</span><span class="comment"> a little example to get some insults flowing</span>
<span class="ANY_KEYWORD">if</span> __name__ == <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">__main__</span><span class="STRING_LITERAL">'</span>:
ig = insultGenerator()
<span class="ANY_KEYWORD">print</span> ig.getInsult()
<span class="ANY_KEYWORD">print</span> ig.getInsult()
<span class="ANY_KEYWORD">print</span> ig.getInsult()
<span class="ANY_KEYWORD">print</span> ig.getInsult()
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span><span class="comment"> you are one ugly, slimy, scabby lo</span><span class="comment">ser</span>
<span class="comment">#</span><span class="comment"> you are the biggest scabby, slimy nerd</span>
<span class="comment">#</span><span class="comment"> you are becoming a scabby, ugly, gimpy butthead</span>
<span class="comment">#</span><span class="comment"> you are one slimy, smelly, cr</span><span class="comment">abby bonehead</span>
</pre>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1513551336296610535.post-65189846858054983572010-03-27T10:57:00.000-07:002010-03-27T10:57:41.254-07:00Python - unit tests with the unittest module<pre><span class="comment"># python has a built in unit test module "unittest"</span>
<span class="comment">#</span>
<span class="comment"># Using python's unittest module is similar to NUnit</span>
<span class="comment"># or JUnit (if you are familiar with those).</span>
<span class="comment">#</span>
<span class="ANY_KEYWORD">import</span> unittest
<span class="comment"># my example function</span>
<span class="comment"># Normally you would have the class in its own</span>
<span class="comment"># file and then just import ExampleFunction into</span>
<span class="comment"># the unit test file.</span>
<span class="ANY_KEYWORD">class</span> ExampleFunction(object):
<span class="ANY_KEYWORD">def</span> __init__(self):
self.example = 0
self.example2 = 1
self.example3 = 2
<span class="ANY_KEYWORD">def</span> processVariable(self, item):
item *= self.example2 * self.example3
<span class="ANY_KEYWORD">return</span> item
<span class="ANY_KEYWORD">def</span> setExampleVariables(self, example):
self.example = example
self.example2 = self.example + 1
self.example3 = self.example2 + 1
<span class="comment"># The test class inherits from unittest's TestCase.</span>
<span class="comment"># Inheriting ensures that the tests will run when you</span>
<span class="comment"># call unittest.Main()</span>
<span class="ANY_KEYWORD">class</span> TestExampleFunction(unittest.TestCase):
<span class="ANY_KEYWORD">def</span> setUp(self):
self.ef = ExampleFunction()
<span class="ANY_KEYWORD">def</span> test_defaults(self):
<span class="comment"># There are a lot types of asserts available</span>
<span class="comment"># I only demo the assertEqual here.</span>
self.assertEqual(self.ef.example, 0, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example is not set to 0</span><span class="STRING_LITERAL">"</span>)
self.assertEqual(self.ef.example2, 1, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example2 is not set to 1</span><span class="STRING_LITERAL">"</span>)
self.assertEqual(self.ef.example3, 2, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example3 is not set to 2</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> test_processVariable(self):
self.assertEqual(self.ef.processVariable(1), 2, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example error message</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> test_setExampleVariables(self):
self.ef.setExampleVariables(5)
self.assertEqual(self.ef.example, 5, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example is not set to 0</span><span class="STRING_LITERAL">"</span>)
self.assertEqual(self.ef.example2, 6, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example2 is not set to 1</span><span class="STRING_LITERAL">"</span>)
self.assertEqual(self.ef.example3, 7, <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">example3 is not set to 2</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">if</span> __name__ == <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">__main__</span><span class="STRING_LITERAL">'</span>:
unittest.main()
<span class="comment"># My Output:</span>
<span class="comment"># ...</span>
<span class="comment"># -------------------------------------</span>
<span class="comment"># Ran 3 tests in 0.000s</span>
<span class="comment">#</span>
<span class="comment"># OK</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-89817281264882632702010-03-23T20:50:00.001-07:002010-03-23T20:50:45.778-07:00Python - calling super class methods from derived classes<pre><span class="comment"># An inheritance, abstract classes, and</span>
<span class="comment"># calling super class methods from derived</span>
<span class="comment"># classes example</span>
<span class="ANY_KEYWORD">class</span> AbstractBot(object):
<span class="ANY_KEYWORD">def</span> __init__(self):
self.size = 0
self.speed = 1
self.pos = [0,0]
<span class="ANY_KEYWORD">def</span> applyPos(self, xy):
self.pos[0] += xy[0] * self.speed
self.pos[1] += xy[1] * self.speed
<span class="ANY_KEYWORD">def</span> getCurrentPos(self):
<span class="ANY_KEYWORD">return</span> self.pos
<span class="ANY_KEYWORD">class</span> WalkingBot(AbstractBot):
<span class="ANY_KEYWORD">def</span> applyPos(self, xy):
super(WalkingBot, self).applyPos(xy)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">step, step</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">class</span> DrivingBot(AbstractBot):
<span class="ANY_KEYWORD">def</span> applyPos(self, xy):
super(DrivingBot, self).applyPos(xy)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">vroom, vroom</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">class</span> RunningBot(AbstractBot):
<span class="ANY_KEYWORD">def</span> __init__(self):
super(RunningBot, self).__init__()
self.speed = 5
<span class="ANY_KEYWORD">def</span> applyPos(self, xy):
super(RunningBot, self).applyPos(xy)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">trot, trot</span><span class="STRING_LITERAL">"</span>
bot1 = WalkingBot()
bot2 = DrivingBot()
bot3 = RunningBot()
bots = [bot1, bot2, bot3]
distance = (1,1)
<span class="ANY_KEYWORD">for</span> step <span class="ANY_KEYWORD">in</span> xrange(3):
<span class="ANY_KEYWORD">for</span> bot <span class="ANY_KEYWORD">in</span> bots:
bot.applyPos(distance)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">position: </span><span class="STRING_LITERAL">'</span> + str(bot.getCurrentPos())
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-61651200268735674602010-03-08T05:59:00.000-08:002010-03-08T05:59:11.410-08:00Python - creating an interface with python<pre><span class="comment"># python doesn't formally support an interface.</span>
<span class="comment"># You can work around this and support the spirit</span>
<span class="comment"># of an interface by creating abstract classes that</span>
<span class="comment"># have empty methods that just raise exceptions if</span>
<span class="comment"># haven't been implemented.</span>
<span class="ANY_KEYWORD">class</span> Vehicle:
<span class="ANY_KEYWORD">def</span> __init__(self, model):
self.model = model
<span class="ANY_KEYWORD">def</span> returnModel(self):
<span class="ANY_KEYWORD">raise</span> NotImplementedError(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Subclass must implement</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">def</span> calculateTaxes(self):
<span class="ANY_KEYWORD">raise</span> NotImplementedError(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Subclass must implement</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">class</span> Toyota(Vehicle):
<span class="ANY_KEYWORD">pass</span>
t = Toyota(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Carolla</span><span class="STRING_LITERAL">"</span>)
t.returnModel()
<span class="comment">#output:</span>
<span class="comment"># NotImplementedError: Subclass must implement</span>
<span class="comment"># You are required to implement the defined methods ( just</span>
<span class="comment"># like when using an interface</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-42912755686921522612010-02-25T12:20:00.000-08:002010-02-25T12:20:13.696-08:00Python - a simple polymorphism example<pre><span class="comment">#</span><span class="comment"> A quick example of polymorphism at work in python</span>
<span class="ANY_KEYWORD">class</span> Food(object):
<span class="ANY_KEYWORD">def</span> __init__(self, name, calories):
self.name = name
self.calories = calories
<span class="ANY_KEYWORD">def</span> tastesLike(self):
<span class="ANY_KEYWORD">raise</span> NotImplementedException(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Subclasses are responsible for creating this method</span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">class</span> HotDog(Food):
<span class="ANY_KEYWORD">def</span> tastesLike(self):
<span class="ANY_KEYWORD">return</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Extremely processed meat</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">class</span> Hamburger(Food):
<span class="ANY_KEYWORD">def</span> tastesLike(self):
<span class="ANY_KEYWORD">return</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">grilled goodness</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">c</span><span class="ANY_KEYWORD">lass</span> ChickenPatty(Food):
<span class="ANY_KEYWORD">def</span> tastesLike(self):
<span class="ANY_KEYWORD">return</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">tastes like chicken</span><span class="STRING_LITERAL">"</span>
dinner = []
dinner.append(HotDog(<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">Beef/Turkey BallPark</span><span class="STRING_LITERAL">'</span>, 230))
dinner.append(Hamburger(<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">Lowfat Beef Patty</span><span class="STRING_LITERAL">'</span>, 260))
dinner.append(ChickenPatty(<span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">Micky Mouse shaped Chicken Tenders</span><span class="STRING_LITERAL">'</span>, 170))
<span class="comment">#</span><span class="comment"> even though each course of the dinner is a differnet t</span><span class="comment">ype</span>
<span class="comment">#</span><span class="comment"> we can process them all in the same loop</span>
<span class="ANY_KEYWORD">for</span> course <span class="ANY_KEYWORD">in</span> dinner:
<span class="ANY_KEYWORD">print</span> course.name + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> is type </span><span class="STRING_LITERAL">"</span> + str(type(course))
<span class="ANY_KEYWORD">pri</span><span class="ANY_KEYWORD">nt</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> has </span><span class="STRING_LITERAL">"</span> + str(course.calories) + <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> calories </span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL"> and tastes like </span><span class="STRING_LITERAL">"</span> + course.tastesLike()
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment">Beef/Turkey BallPark is type <class '__main__.HotDog'></span>
<span class="comment">#</span> <span class="comment"> has 230 calories</span>
<span class="comment">#</span><span class="comment"> and tastes like Extremely processed meat</span>
<span class="comment">#</span><span class="comment">Lowfat Beef Patty is type <class '__main__.Hamburger'></span>
<span class="comment">#</span><span class="comment"> has 260 calories</span>
<span class="comment">#</span><span class="comment"> and t</span><span class="comment">astes like grilled goodness</span>
<span class="comment">#</span><span class="comment">Micky Mouse shaped Chicken Tenders is type <class '__main__.ChickenPatty'></span>
<span class="comment">#</span><span class="comment"> has 170 calories</span>
<span class="comment">#</span><span class="comment"> and tastes like tastes like c</span><span class="comment">hicken</span>
</pre>Unknownnoreply@blogger.com1tag:blogger.com,1999:blog-1513551336296610535.post-76938345363014626242010-02-25T08:45:00.000-08:002010-02-25T08:55:04.479-08:00Python - the final countdown<pre><span class="comment">#</span><span class="comment"> There is more than one way to accomplish a task.</span>
<span class="comment">#</span><span class="comment"> I needed a method to countdown from a positive</span>
<span class="comment">#</span><span class="comment"> number down to 0. Here are three ways to solve</span>
<span class="comment">#</span><span class="comment"> the issue. Of course there</span><span class="comment"> are many more possible</span>
<span class="comment">#</span><span class="comment"> solutions.</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> I'd like to title this post "The Final Count Down"</span>
<span class="comment">#</span><span class="comment"> Listen to this tune whilst perusing the script:</span>
<span class="comment">#</span><span class="comment"> </span><span class="comment"><a href="http://www.youtube.com/watch?v=tt_ro2aerQg">www.youtube.com/watch?v=tt_ro2aerQg</a></span>
<span class="comment">#</span><span class="comment"> Using recursion always makes the girls swoon.</span>
<span class="ANY_KEYWORD">def</span> recursiveCountdown(number):
<span class="ANY_KEYWORD">print</span> number
<span class="ANY_KEYWORD">if</span> number > 0:
recursiveCountdown(number-1)
<span class="comment">#</span><span class="comment"> Old school while loop. This solution gets points</span>
<span class="comment">#</span><span class="comment"> for being the most obvious.</span>
<span class="ANY_KEYWORD">def</span> whileLoopCountdown(number):
<span class="ANY_KEYWORD">while</span> number > -1:
<span class="ANY_KEYWORD">print</span> number
number -= 1
<span class="comment">#</span><span class="comment"> Using python's xrange function is the most concise.</span>
<span class="ANY_KEYWORD">def</span> xrangeCountdown(number):
<span class="ANY_KEYWORD">for</span> i <span class="ANY_KEYWORD">in</span> xrange(number, -1, -1):
<span class="ANY_KEYWORD">print</span> i
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">It's the final countdown</span><span class="STRING_LITERAL">"</span>
number = input(<span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Enter number: </span><span class="STRING_LITERAL">"</span>)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">Recursive...</span><span class="STRING_LITERAL">"</span>
recursiveCountdown(number)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">While Loop...</span><span class="STRING_LITERAL">"</span>
whileLoopCountdown(number)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">xrange...</span><span class="STRING_LITERAL">"</span>
xrangeCountdown(number)
<span class="comment">#</span><span class="comment"> my output:</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment">It's the final coun</span><span class="comment">tdown</span>
<span class="comment">#</span><span class="comment">Enter number: 5</span>
<span class="comment">#</span><span class="comment">Recursive...</span>
<span class="comment">#</span><span class="comment">5</span>
<span class="comment">#</span><span class="comment">4</span>
<span class="comment">#</span><span class="comment">3</span>
<span class="comment">#</span><span class="comment">2</span>
<span class="comment">#</span><span class="comment">1</span>
<span class="comment">#</span><span class="comment">0</span>
<span class="comment">#</span><span class="comment">While Loop...</span>
<span class="comment">#</span><span class="comment">5</span>
<span class="comment">#</span><span class="comment">4</span>
<span class="comment">#</span><span class="comment">3</span>
<span class="comment">#</span><span class="comment">2</span>
<span class="comment">#</span><span class="comment">1</span>
<span class="comment">#</span><span class="comment">0</span>
<span class="comment">#</span><span class="comment">xrange...</span>
<span class="comment">#</span><span class="comment">5</span>
<span class="comment">#</span><span class="comment">4</span>
<span class="comment">#</span><span class="comment">3</span>
<span class="comment">#</span><span class="comment">2</span>
<span class="comment">#</span><span class="comment">1</span>
<span class="comment">#</span><span class="comment">0</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-32180308975690491062010-02-24T13:36:00.000-08:002010-02-24T13:36:09.373-08:00Python - Bulk rename a directory of files<pre>
<span class="comment">#</span><span class="comment"> I found myself with the need to rename my video</span>
<span class="comment">#</span><span class="comment"> collection. For some reason I decided that using</span>
<span class="comment">#</span><span class="comment"> spaces in a file name is</span><span class="comment"> lame....underscores should</span>
<span class="comment">#</span><span class="comment"> always be used. After two or three files of manually</span>
<span class="comment">#</span><span class="comment"> renaming I decided that python could do all the</span>
<span class="comment">#</span><span class="comment"> work for me.</span>
<span class="ANY_KEYWORD">import</span> os
<span class="ANY_KEYWORD">import</span> glob
<span class="comment">#</span><span class="comment"> My video collection is all matroska files. So</span>
<span class="comment">#</span><span class="comment"> the extension of them all is *.mkv format.</span>
files_to_change = <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">*.</span><span class="STRING_LITERAL">mkv</span><span class="STRING_LITERAL">'</span>
<span class="comment">#</span><span class="comment"> new and old versions of a space</span>
lame_space = <span class="STRING_LITERAL">'</span> <span class="STRING_LITERAL">'</span>;
cool_space = <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">_</span><span class="STRING_LITERAL">'</span>;
<span class="comment">#</span><span class="comment"> use glob to gather a list of matching files</span>
<span class="ANY_KEYWORD">for</span> f <span class="ANY_KEYWORD">in</span> glob.glob(files_to_change):
f2 = f
f2 = f2.replace(lame_space, cool_space)
<span class="comment">#</span><span class="comment"> add a little status for instant gratification</span>
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">renaming: </span><span class="STRING_LITERAL">'</span>, f, <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL"> -> </span><span class="STRING_LITERAL">'</span>, f2
os.rename(f, f2)
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">'</span><span class="STRING_LITERAL">All Done</span><span class="STRING_LITERAL">'</span>
<span class="comment">#</span><span class="comment"># my output:</span>
<span class="comment">#</span>
<span class="comment">#</span><span class="comment"> renaming: Me at home.mkv -> Me_at_home.mkv</span>
<span class="comment">#</span><span class="comment"> renaming: Max in kid po</span><span class="comment">ol.mkv -> Max_in_kid_pool.mkv</span>
<span class="comment">#</span><span class="comment"> ........ < and so on ></span>
<span class="comment">#</span><span class="comment"> All Done</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-3104230712139092942009-11-19T05:50:00.000-08:002009-11-19T05:50:23.461-08:00Python - processing command line arguments<pre><span class="comment"># python scripts are often run from the</span>
<span class="comment"># command line.</span>
<span class="comment"># python can retrieve and use command line</span>
<span class="comment"># arguments with the sys module.</span>
<span class="ANY_KEYWORD">import</span> sys
<span class="comment"># all arguments are stored in the sys.argv list</span>
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">number of arguments passed: </span><span class="STRING_LITERAL">"</span>, len(sys.argv)
<span class="comment"># process through the argument list</span>
<span class="ANY_KEYWORD">for</span> argument <span class="ANY_KEYWORD">in</span> sys.argv:
<span class="ANY_KEYWORD">print</span> argument
<span class="comment"># my input/output:</span>
<span class="comment"># python commandlinearguments.py one two three four five six seven</span>
<span class="comment"># number of arguments passed: 8</span>
<span class="comment"># commandlinearguments.py</span>
<span class="comment"># one</span>
<span class="comment"># two</span>
<span class="comment"># three</span>
<span class="comment"># four</span>
<span class="comment"># five</span>
<span class="comment"># six</span>
<span class="comment"># seven</span>
</pre>Unknownnoreply@blogger.com0tag:blogger.com,1999:blog-1513551336296610535.post-51602620111226346562009-11-18T10:50:00.001-08:002009-11-18T10:50:56.523-08:00Python - boolean and, or, and not<pre><span class="comment">#</span><span class="comment"> python includes the basic and,</span>
<span class="comment">#</span><span class="comment"> or, and not boolean operations</span>
a = 10
b = 20
c = 30
<span class="ANY_KEYWORD">if</span> a>9 <span class="ANY_KEYWORD">and</span> b+1==21 <span class="ANY_KEYWORD">and</span> c==a+b:
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">boolean 'and' example equates </span><span class="STRING_LITERAL">true</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">if</span> a==9 <span class="ANY_KEYWORD">or</span> b<10 <span class="ANY_KEYWORD">or</span> c<100:
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">only one of these expressions needs to be true</span><span class="STRING_LITERAL">"</span>
<span class="ANY_KEYWORD">if</span> <span class="ANY_KEYWORD">not</span> a+b==31:
<span class="ANY_KEYWORD">print</span> <span class="STRING_LITERAL">"</span><span class="STRING_LITERAL">if this is not</span><span class="STRING_LITERAL"> true</span><span class="STRING_LITERAL">"</span>
</pre>Unknownnoreply@blogger.com0