def blue():     global blue_old     global blue_new     while blue_old &gt; blue_new:         blue_old = blue_old - 0.01         print blue_old         os.system("echo 21=" + str(blue_old) +  " &gt; /dev/pi-blaster")             time.sleep(0.01)      while blue_old &lt; blue_new:         blue_old = blue_old + 0.01         os.system("echo 21=" + str(blue_old) +  " &gt; /dev/pi-blaster")               time.sleep(0.01)      print "blue done: " + str(blue_old)      Hi, using threading method in Python I have this code to control intensity of RGB LED strip via RPi. Basically when new value is higher than current, it adds value 0.01 in loop until new and old values are equal, to have a nice brightening effect.  If new value is lower than current it does exact opposite, decreasing value in 0.01 steps, but if I want to complete shut it down(value = 0) I get this output:  0.1 0.09 0.08 0.07 0.06 0.05 0.04 0.03 0.02 0.01 -7.52869988574e-16   Why am I getting this strange negative number instead of 0?  You can run this if you want to test:  import os import time import threading  blue_old = float(1) blue_new = float(0)  def blue():     global blue_old     global blue_new     while blue_old &gt; blue_new:         blue_old = blue_old - 0.01         print blue_old             time.sleep(0.01)      while blue_old &lt; blue_new:         blue_old = blue_old + 0.01         print blue_old            time.sleep(0.01)      print "blue done: " + str(blue_old)  blue = threading.Thread(target=blue).start()    Thanks.
27
Consider the following code:   0.1 + 0.2 == 0.3  -&gt;  false   0.1 + 0.2         -&gt;  0.30000000000000004   Why do these inaccuracies happen?
100688
If this is my subprocess:  import time, sys for i in range(200):     sys.stdout.write( 'reading %i\n'%i )     time.sleep(.02)   And this is the script controlling and modifying the output of the subprocess:  import subprocess, time, sys  print 'starting'  proc = subprocess.Popen(     'c:/test_apps/testcr.py',     shell=True,     stdin=subprocess.PIPE,     stdout=subprocess.PIPE  )  print 'process created'  while True:     #next_line = proc.communicate()[0]     next_line = proc.stdout.readline()     if next_line == '' and proc.poll() != None:         break     sys.stdout.write(next_line)     sys.stdout.flush()  print 'done'   Why is readline and communicate waiting until the process is done running?  Is there a simple way to pass (and modify) the subprocess' stdout real-time?  BTW, I've seen , but I don't need the logging features (and havn't bothered understand much of it).  I'm on Windows XP.
35834
I ran this command to try and get my python program to run in the background and let me exit the SSH connection I am using:  nohup python files.py &gt;&gt; files.log &amp;   I then check ps to check it worked   $ ps a   PID TTY      STAT   TIME COMMAND 13059 pts/0    Ss     0:00 -bash 13327 pts/0    R+     0:00 ps a [1]+  Exit 1                  nohup python files.py &gt;&gt; files.log   What does this [1]+  Exit 1 mean?  And how can I run my program in the background letting me exit correctly?
48151
When writing a batch file to automate something on a Windows box, I've needed to pause its execution for several seconds (usually in a test/wait loop, waiting for a process to start). At the time, the best solution I could find uses ping (I kid you not) to achieve the desired effect. I've found a better write-up of it , which describes a callable "wait.bat", implemented as follows:  @ping 127.0.0.1 -n 2 -w 1000 &gt; nul @ping 127.0.0.1 -n %1% -w 1000&gt; nul   You can then include calls to wait.bat in your own batch file, passing in the number of seconds to sleep.   (at last!). In the meantime, for those of us still using Windows&nbsp;XP, Windows 2000 or (sadly) , is there a better way?  I modified the sleep.py script in the , so that it defaults to one second if no arguments are passed on the command line:  import time, sys  time.sleep(float(sys.argv[1]) if len(sys.argv) &gt; 1 else 1)
2897
Today, I was caught redhanded while attempting to code golf a password generator for Twitter.  import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))   90 chars. Since that is a lot of spare space, I decided to raise the bar and make it executable too.  echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))"&gt;pg;chmod +x pg;./pg   139 chars. Nice, except obviously bash chokes on the exclamation point.  badp@delta:~$ echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))"&gt;pg;chmod +x pg;./pg bash: !/usr/bin/python\nimport: event not found   Pesky exclamation point. "Let's escape it," I thought! I do have one spare character after all.  echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))"&gt;pg;chmod +x pg;./pg   Obviously...  badp@delta:~$ echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))"&gt;pg;chmod +x pg;./pg ./pg: line 2: syntax error near unexpected token `(' ./pg: line 2: `import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))' badp@delta:~$ cat pg #\!/usr/bin/python import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))   Leaving my asinine code golfing aside -- I can't explain this.  With \!, the exclamation point was escaped, except it really wasn't, because the \! was left as-is for echo to pick up.  One solution could have been using \x21 instead, but I'm not convinced that's the proper way of escaping an exclamation point in a bash command.  tl;dr: How do you properly escape an exclamation point in a bash command?
18549
I read the original , I understand, but I don't do Python.  How would I "reset" my settings as shown? I've had trouble with these forever, so my Solid lighting as I work is bizarre. Even with a new startup they're kaflooey.  Added bonus: How to "put back" the settings I have now if I screw up?
1022
The following code works as expected in both Python 2.5 and 3.0:  a, b, c = (1, 2, 3)  print(a, b, c)  def test():     print(a)     print(b)     print(c)    # (A)     #c+=1       # (B) test()   However, when I uncomment line (B), I get an UnboundLocalError: 'c' not assigned at line (A). The values of a and b are printed correctly. This has me completely baffled for two reasons:   Why is there a runtime error thrown at line (A) because of a later statement on line (B)? Why are variables a and b printed as expected, while c raises an error?   The only explanation I can come up with is that a local variable c is created by the assignment c+=1, which takes precedent over the "global" variable c even before the local variable is created. Of course, it doesn't make sense for a variable to "steal" scope before it exists.  Could someone please explain this behavior?
10842
What is the difference between old style and new style classes in Python?  When should I use one or the other?
85002
I have this code in my LaTeX:   \FPset{totalHours}{0}  \newcommand{\entry}[5]{     \FPeval{totalHours}{(totalHours)+#5}     #1 &amp; #2 &amp; #3 &amp; #4 &amp; #5 \\ }   Where \entry is meant to be an entry in a time log. The 5th argument is a number representing the number of hours in that entry. I want to keep a running total of the hours in a variable I can print later on, totalHours.   This seems to do the \FPeval but then totalHours gets reset to 0 by the next time I write \entry. What is the correct way to keep a running total? Thanks.
13230
I would like to think that some of the software I'm writing today will be used in 30 years. But I am also aware that a lot of it is based upon the UNIX tradition of exposing time as the number of seconds since 1970.  #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;limits.h&gt;  void print(time_t rt) {     struct tm * t = gmtime(&amp;rt);     puts(asctime(t)); }  int main() {     print(0);     print(time(0));     print(LONG_MAX);     print(LONG_MAX+1); }   Execution results in:   Thu Jan  1 00:00:00 1970 Sat Aug 30 18:37:08 2008 Tue Jan 19 03:14:07 2038 Fri Dec 13 20:45:52 1901           The functions ctime(), gmtime(), and localtime() all take as an argument a time value representing the time in seconds since the Epoch (00:00:00 UTC, January 1, 1970; see time(3) ).      I wonder if there is anything proactive to do in this area as a programmer, or are we to trust that all software systems (aka Operating Systems) will some how be magically upgraded in the future?  Update It would seem that indeed 64-bit systems are safe from this:  import java.util.*;  class TimeTest {     public static void main(String[] args) {         print(0);         print(System.currentTimeMillis());         print(Long.MAX_VALUE);         print(Long.MAX_VALUE + 1);     }      static void print(long l) {         System.out.println(new Date(l));     } }    Wed Dec 31 16:00:00 PST 1969 Sat Aug 30 12:02:40 PDT 2008 Sat Aug 16 23:12:55 PST 292278994 Sun Dec 02 08:47:04 PST 292269055   But what about the year 292278994?
24669
I have a  and I connected it to my servo () per these details:   PIC pin 1 to positive pin 8 to negative pin 2 to servo red wire (signal) servo brown wire to negative servo orange to positive (servo has three colors: brown, red and orange wires)   I programmed PIC with this code:      #include &lt;xc.h&gt;     #define _XTAL_FREQ 20000000     #pragma config WDTE=OFF , BOREN=OFF , PWRTE=ON , MCLRE=OFF , FOSC=INTRCIO      void main(){     TRISIO = 0b0000000;     GPIO = 0b000000;         while(1==1){             GPIO = 0b000000;             __delay_ms(1);             GPIO = 0b111111;             __delay_ms(19);         }  }   But servo does not move a bit. What is the problem?  Edit: i found out it rotate servo arm very fast to its end(the point it couldn't rotate any more then it sound like tick tick tick .....)  i changed my code to this(to reverse it back):              GPIO = 0b000000;             __delay_ms(1);             GPIO = 0b111111;             __delay_ms(19);             GPIO = 0b000000;             __delay_ms(2);             GPIO = 0b111111;             __delay_ms(18);   but it behave the same.
102384
I am still not able to get the correct difference, really struggling to make it working. The business hour set from 10 AM to 7 PM  BusinessHours bh = [SELECT FridayEndTime,FridayStartTime,Id,MondayEndTime,MondayStartTime,                     FROM BusinessHours where Name='Test Business Hour'                     LIMIT 1]; Time startTime = bh.MondayStartTime;        Time endTime = bh.MondayEndTime;  Date d = Date.today(); Datetime monTodaystart = Datetime.newInstance(d.year(),d.month(),d.day(),startTime.hour(), startTime.minute(),startTime.second()); Datetime monTodayend = Datetime.newInstance(d.year(),d.month(),d.day(),endTime.hour(), endTime.minute(),endTime.second()); System.debug('monTodaystart :: '+monTodaystart);     System.debug('monTodayend :: '+monTodayend);   Long diff = BusinessHours.diff(bh.Id, monTodaystart, monTodayend); System.debug('diff  :: '+diff);   I tried this simple example, but still its not working why ? How we can manipulate it ?  Datetime monTodaystart = Datetime.newInstance(2017,8,20,10,0,0); Datetime monTodayEnd = Datetime.newInstance(2017,8,20,17,0,0); System.debug('ID : '+bh.Id);  Long diff = BusinessHours.diff(bh.Id, monTodaystart,monTodayEnd); System.debug('diff  :: '+diff);   I dont think I should used the API here, instead I should use my custom logic, looks like some bug in the API still exists.
97275
I define a shell keybinding in my ~/.bashrc like so:  bind -x '"\e\C-w":"/usr/bin/reset"'   This does make Ctrl-Alt-w launch the reset executable. However, it leaves the terminal in a state that resembles the one you get into by pressing Ctrl-v. So, for example, if immediately after resetting in this way I press Ctrl-p, instead of invoking the action of that shortcut (repeat previous command) I get ^P printed.  Any idea what's causing this problem and how to fix it?  EDIT: I am attaching a Python program that reproduces the messed-up terminal state I am trying to fix with the reset. I encounter this condition very often while debugging multi-threaded applications:  import pdb, thread, time  def interrupt():     time.sleep(2)     pdb.set_trace()  thread.start_new_thread(interrupt, ()) raw_input('? ')   To reproduce the messed-up state, just run the code above, and press Enter when you see the debugger invoked (it will print a bunch of text, ending with pdb.set_trace(), about two seconds after you run the program and the initial prompt appears).
87845
I'm trying to find out how much time it takes to execute a Python statement, so I looked online and found that the standard library provides a module called  that purports to do exactly that:  import timeit  def foo():     # ... contains code I want to time ...  def dotime():     t = timeit.Timer("foo()")     time = t.timeit(1)     print "took %fs\n" % (time,)  dotime()   However, this produces an error:  Traceback (most recent call last):   File "&lt;stdin&gt;", line 1, in &lt;module&gt;   File "&lt;stdin&gt;", line 3, in dotime   File "/usr/local/lib/python2.6/timeit.py", line 193, in timeit     timing = self.inner(it, self.timer)   File "&lt;timeit-src&gt;", line 6, in inner NameError: global name 'foo' is not defined   I'm still new to Python and I don't fully understand all the scoping issues it has, but I don't know why this snippet doesn't work. Any thoughts?
4188
While I was investigating a problem I had with lexical closures in Javascript code, I came along this problem in Python:  flist = []  for i in xrange(3):     def func(x): return x * i     flist.append(func)  for f in flist:     print f(2)   Note that this example mindfully avoids lambda. It prints "4 4 4", which is surprising. I'd expect "0 2 4".   This equivalent Perl code does it right:  my @flist = ();  foreach my $i (0 .. 2) {     push(@flist, sub {$i * $_[0]}); }  foreach my $f (@flist) {     print $f-&gt;(2), "\n"; }   "0 2 4" is printed.  Can you please explain the difference ?    Update:   The problem is not with i being global. This displays the same behavior:  flist = []  def outer():     for i in xrange(3):         def inner(x): return x * i         flist.append(inner)  outer() #~ print i   # commented because it causes an error  for f in flist:     print f(2)   As the commented line shows, i is unknown at that point. Still, it prints "4 4 4".
1704
This has always confused me. It seems like this would be nicer:  my_list = ["Hello", "world"] print(my_list.join("-")) # Produce: "Hello-world"   Than this:  my_list = ["Hello", "world"] print("-".join(my_list)) # Produce: "Hello-world"   Is there a specific reason it is like this?
11673
Just saw , and realized that  1/9801 = 0.(000102030405060708091011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969799)(repeat)  Similar properties are also exhibited by numbers , , .. and so on. Edit: fixed periodic start and end It is not very obvious to me why this happens. Is there some simple explanation to this property?