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:
