diff --git a/Demo/pdist/cmptree.py b/Demo/pdist/cmptree.py
index f6c611f..2f781ab 100755
--- a/Demo/pdist/cmptree.py
+++ b/Demo/pdist/cmptree.py
@@ -197,7 +197,7 @@
     dt = t2-t1
     print size, "bytes in", round(dt), "seconds",
     if dt:
-        print "i.e.", int(size/dt), "bytes/sec",
+        print "i.e.", size//dt, "bytes/sec",
     print
     remote._recv(id) # ignored
 
diff --git a/Demo/rpc/xdr.py b/Demo/rpc/xdr.py
index df5cbaf..041d51a 100644
--- a/Demo/rpc/xdr.py
+++ b/Demo/rpc/xdr.py
@@ -57,7 +57,7 @@
     def pack_fstring(self, n, s):
         if n < 0:
             raise ValueError, 'fstring size must be nonnegative'
-        n = ((n+3)/4)*4
+        n = ((n + 3)//4)*4
         data = s[:n]
         data = data + (n - len(data)) * '\0'
         self.buf = self.buf + data
@@ -164,7 +164,7 @@
         if n < 0:
             raise ValueError, 'fstring size must be nonnegative'
         i = self.pos
-        j = i + (n+3)/4*4
+        j = i + (n+3)//4*4
         if j > len(self.buf):
             raise EOFError
         self.pos = j
diff --git a/Demo/scripts/fact.py b/Demo/scripts/fact.py
index 03cab8b..6dafa66 100755
--- a/Demo/scripts/fact.py
+++ b/Demo/scripts/fact.py
@@ -17,14 +17,14 @@
     # Treat even factors special, so we can use i = i+2 later
     while n%2 == 0:
         res.append(2)
-        n = n/2
+        n = n//2
     # Try odd numbers up to sqrt(n)
     limit = sqrt(float(n+1))
     i = 3
     while i <= limit:
         if n%i == 0:
             res.append(i)
-            n = n/i
+            n = n//i
             limit = sqrt(n+1)
         else:
             i = i+2
diff --git a/Demo/scripts/ftpstats.py b/Demo/scripts/ftpstats.py
index 5c1599e..881b717 100755
--- a/Demo/scripts/ftpstats.py
+++ b/Demo/scripts/ftpstats.py
@@ -104,7 +104,7 @@
 
 def showbar(dict, title):
     n = len(title)
-    print '='*((70-n)/2), title, '='*((71-n)/2)
+    print '='*((70-n)//2), title, '='*((71-n)//2)
     list = []
     keys = dict.keys()
     keys.sort()
@@ -126,7 +126,7 @@
     if len(dict) > maxitems:
         title = title + ' (first %d)'%maxitems
     n = len(title)
-    print '='*((70-n)/2), title, '='*((71-n)/2)
+    print '='*((70-n)//2), title, '='*((71-n)//2)
     list = []
     keys = dict.keys()
     for key in keys:
diff --git a/Demo/scripts/lpwatch.py b/Demo/scripts/lpwatch.py
index 8887dee..715cbb8 100755
--- a/Demo/scripts/lpwatch.py
+++ b/Demo/scripts/lpwatch.py
@@ -83,7 +83,7 @@
                 lines.append(line)
     #
     if totaljobs:
-        line = '%d K' % ((totalbytes+1023)/1024)
+        line = '%d K' % ((totalbytes+1023)//1024)
         if totaljobs <> len(users):
             line = line + ' (%d jobs)' % totaljobs
         if len(users) == 1:
@@ -95,7 +95,7 @@
                     line =  line + ' (%s first)' % thisuser
                 else:
                     line = line + ' (%d K before %s)' % (
-                                   (aheadbytes+1023)/1024, thisuser)
+                                   (aheadbytes+1023)//1024, thisuser)
         lines.append(line)
     #
     sts = pipe.close()
diff --git a/Demo/scripts/markov.py b/Demo/scripts/markov.py
index bddec56..7a4fc01 100755
--- a/Demo/scripts/markov.py
+++ b/Demo/scripts/markov.py
@@ -110,7 +110,7 @@
 def tuple(list):
     if len(list) == 0: return ()
     if len(list) == 1: return (list[0],)
-    i = len(list)/2
+    i = len(list)//2
     return tuple(list[:i]) + tuple(list[i:])
 
 if __name__ == "__main__":
diff --git a/Demo/scripts/pi.py b/Demo/scripts/pi.py
index 9b24245..e6e3b82 100755
--- a/Demo/scripts/pi.py
+++ b/Demo/scripts/pi.py
@@ -17,11 +17,11 @@
         p, q, k = k*k, 2L*k+1L, k+1L
         a, b, a1, b1 = a1, b1, p*a+q*a1, p*b+q*b1
         # Print common digits
-        d, d1 = a/b, a1/b1
+        d, d1 = a//b, a1//b1
         while d == d1:
             output(d)
             a, a1 = 10L*(a%b), 10L*(a1%b1)
-            d, d1 = a/b, a1/b1
+            d, d1 = a//b, a1//b1
 
 def output(d):
     # Use write() to avoid spaces between the digits
diff --git a/Demo/scripts/unbirthday.py b/Demo/scripts/unbirthday.py
index 2d0b8e5..8ed9084 100755
--- a/Demo/scripts/unbirthday.py
+++ b/Demo/scripts/unbirthday.py
@@ -92,9 +92,9 @@
     # even though that day never actually existed and the calendar
     # was different then...
     days = year*365                 # years, roughly
-    days = days + (year+3)/4        # plus leap years, roughly
-    days = days - (year+99)/100     # minus non-leap years every century
-    days = days + (year+399)/400    # plus leap years every 4 centirues
+    days = days + (year+3)//4        # plus leap years, roughly
+    days = days - (year+99)//100     # minus non-leap years every century
+    days = days + (year+399)//400    # plus leap years every 4 centirues
     for i in range(1, month):
         if i == 2 and calendar.isleap(year):
             days = days + 29
diff --git a/Demo/sockets/ftp.py b/Demo/sockets/ftp.py
index 6e9282a..8be0812 100755
--- a/Demo/sockets/ftp.py
+++ b/Demo/sockets/ftp.py
@@ -91,7 +91,7 @@
     hostname = gethostname()
     hostaddr = gethostbyname(hostname)
     hbytes = string.splitfields(hostaddr, '.')
-    pbytes = [repr(port/256), repr(port%256)]
+    pbytes = [repr(port//256), repr(port%256)]
     bytes = hbytes + pbytes
     cmd = 'PORT ' + string.joinfields(bytes, ',')
     s.send(cmd + '\r\n')
diff --git a/Demo/tkinter/guido/hanoi.py b/Demo/tkinter/guido/hanoi.py
index 078c246..58ba1d1 100755
--- a/Demo/tkinter/guido/hanoi.py
+++ b/Demo/tkinter/guido/hanoi.py
@@ -35,15 +35,15 @@
 
         # Add background bitmap
         if bitmap:
-            self.bitmap = c.create_bitmap(width/2, height/2,
+            self.bitmap = c.create_bitmap(width//2, height//2,
                                           bitmap=bitmap,
                                           foreground='blue')
 
         # Generate pegs
         pegwidth = 10
-        pegheight = height/2
-        pegdist = width/3
-        x1, y1 = (pegdist-pegwidth)/2, height*1/3
+        pegheight = height//2
+        pegdist = width//3
+        x1, y1 = (pegdist-pegwidth)//2, height*1//3
         x2, y2 = x1+pegwidth, y1+pegheight
         self.pegs = []
         p = c.create_rectangle(x1, y1, x2, y2, fill='black')
@@ -57,14 +57,14 @@
         self.tk.update()
 
         # Generate pieces
-        pieceheight = pegheight/16
-        maxpiecewidth = pegdist*2/3
+        pieceheight = pegheight//16
+        maxpiecewidth = pegdist*2//3
         minpiecewidth = 2*pegwidth
         self.pegstate = [[], [], []]
         self.pieces = {}
-        x1, y1 = (pegdist-maxpiecewidth)/2, y2-pieceheight-2
+        x1, y1 = (pegdist-maxpiecewidth)//2, y2-pieceheight-2
         x2, y2 = x1+maxpiecewidth, y1+pieceheight
-        dx = (maxpiecewidth-minpiecewidth) / (2*max(1, n-1))
+        dx = (maxpiecewidth-minpiecewidth) // (2*max(1, n-1))
         for i in range(n, 0, -1):
             p = c.create_rectangle(x1, y1, x2, y2, fill='red')
             self.pieces[i] = p
@@ -101,10 +101,10 @@
 
         # Move it towards peg b
         bx1, by1, bx2, by2 = c.bbox(self.pegs[b])
-        newcenter = (bx1+bx2)/2
+        newcenter = (bx1+bx2)//2
         while 1:
             x1, y1, x2, y2 = c.bbox(p)
-            center = (x1+x2)/2
+            center = (x1+x2)//2
             if center == newcenter: break
             if center > newcenter: c.move(p, -1, 0)
             else: c.move(p, 1, 0)
diff --git a/Demo/tkinter/guido/solitaire.py b/Demo/tkinter/guido/solitaire.py
index 50a8b26..1c1105c 100755
--- a/Demo/tkinter/guido/solitaire.py
+++ b/Demo/tkinter/guido/solitaire.py
@@ -168,7 +168,7 @@
         self.group = Group(canvas)
 
         text = "%s  %s" % (VALNAMES[value], suit)
-        self.__text = CanvasText(canvas, CARDWIDTH/2, 0,
+        self.__text = CanvasText(canvas, CARDWIDTH//2, 0,
                                anchor=N, fill=self.color, text=text)
         self.group.addtag_withtag(self.__text)
 
@@ -589,7 +589,7 @@
 
     def animatedmoveto(self, card, dest):
         for i in range(10, 0, -1):
-            dx, dy = (dest.x-card.x)/i, (dest.y-card.y)/i
+            dx, dy = (dest.x-card.x)//i, (dest.y-card.y)//i
             card.moveby(dx, dy)
             self.master.update_idletasks()
 
diff --git a/Demo/tkinter/guido/sortvisu.py b/Demo/tkinter/guido/sortvisu.py
index f18f2c1..9148b73 100644
--- a/Demo/tkinter/guido/sortvisu.py
+++ b/Demo/tkinter/guido/sortvisu.py
@@ -88,7 +88,7 @@
         if self.speed == "fastest":
             msecs = 0
         elif self.speed == "fast":
-            msecs = msecs/10
+            msecs = msecs//10
         elif self.speed == "single-step":
             msecs = 1000000000
         if not self.stop_mainloop:
@@ -320,7 +320,7 @@
         return outcome
 
     def position(self):
-        x1 = (self.index+1)*XGRID - WIDTH/2
+        x1 = (self.index+1)*XGRID - WIDTH//2
         x2 = x1+WIDTH
         y2 = (self.array.maxvalue+1)*YGRID
         y1 = y2 - (self.value)*YGRID
@@ -349,7 +349,7 @@
     res = [tuple(oldpts)]
     for i in range(1, n):
         for k in range(len(pts)):
-            pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i/n
+            pts[k] = oldpts[k] + (newpts[k] - oldpts[k])*i//n
         res.append(tuple(pts))
     res.append(tuple(newpts))
     return res
@@ -359,7 +359,7 @@
 
 def uniform(array):
     size = array.getsize()
-    array.setdata([(size+1)/2] * size)
+    array.setdata([(size+1)//2] * size)
     array.reset("Uniform data, size %d" % size)
 
 def distinct(array):
@@ -429,7 +429,7 @@
                         j = j-1
                 continue
             array.message("Choosing pivot")
-            j, i, k = first, (first+last)/2, last-1
+            j, i, k = first, (first+last)//2, last-1
             if array.compare(k, i) < 0:
                 array.swap(k, i)
             if array.compare(k, j) < 0:
