diff --git a/Lib/lib-tk/turtle.py b/Lib/lib-tk/turtle.py
index 7444d45..264318e 100644
--- a/Lib/lib-tk/turtle.py
+++ b/Lib/lib-tk/turtle.py
@@ -728,10 +728,11 @@
         """
         return self.cv.create_image(0, 0, image=image)
 
-    def _drawimage(self, item, (x, y), image):
+    def _drawimage(self, item, pos, image):
         """Configure image item as to draw image object
         at position (x,y) on canvas)
         """
+        x, y = pos
         self.cv.coords(item, (x * self.xscale, -y * self.yscale))
         self.cv.itemconfig(item, image=image)
 
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 855a9c4..022789d 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -1572,6 +1572,7 @@
         self.items = items
     def __eq__(self, other):
         return type(self) is type(other) and self.items == other.items
+    __hash__ = None
     def append(self, item):
         self.items.append(item)
     def extend(self, items):
@@ -1590,6 +1591,7 @@
         self.table = table
     def __eq__(self, other):
         return type(self) is type(other) and self.table == other.table
+    __hash__ = None
     def __setitem__(self, key, value):
         self.table[key] = value
     def __reduce__(self):
@@ -1639,6 +1641,7 @@
         raise TypeError("SimpleNewObj.__init__() didn't expect to get called")
     def __eq__(self, other):
         return int(self) == int(other) and self.__dict__ == other.__dict__
+    __hash__ = None
 
 class ComplexNewObj(SimpleNewObj):
     def __getnewargs__(self):
diff --git a/Lib/wave.py b/Lib/wave.py
index 97f2146..28acaa6 100644
--- a/Lib/wave.py
+++ b/Lib/wave.py
@@ -243,7 +243,7 @@
             assert data.itemsize == self._sampwidth
             nitems = nframes * self._nchannels
             if nitems * self._sampwidth > chunk.chunksize - chunk.size_read:
-                nitems = (chunk.chunksize - chunk.size_read) / self._sampwidth
+                nitems = (chunk.chunksize - chunk.size_read) // self._sampwidth
             data.fromfile(chunk.file.file, nitems)
             # "tell" data chunk how much was read
             chunk.size_read = chunk.size_read + nitems * self._sampwidth
diff --git a/Tools/scripts/fixcid.py b/Tools/scripts/fixcid.py
index 18b4342..1b461b9 100755
--- a/Tools/scripts/fixcid.py
+++ b/Tools/scripts/fixcid.py
@@ -242,14 +242,14 @@
             elif found == '*/':
                 Program = OutsideCommentProgram
         n = len(found)
-        if Dict.has_key(found):
+        if found in Dict:
             subst = Dict[found]
             if Program is InsideCommentProgram:
                 if not Docomments:
                     print 'Found in comment:', found
                     i = i + n
                     continue
-                if NotInComment.has_key(found):
+                if found in NotInComment:
 ##                  print 'Ignored in comment:',
 ##                  print found, '-->', subst
 ##                  print 'Line:', line,
@@ -294,7 +294,7 @@
         if not words: continue
         if len(words) == 3 and words[0] == 'struct':
             words[:2] = [words[0] + ' ' + words[1]]
-        elif len(words) <> 2:
+        elif len(words) != 2:
             err(substfile + '%s:%r: warning: bad line: %r' % (substfile, lineno, line))
             continue
         if Reverse:
@@ -306,7 +306,7 @@
         if key[0] == '*':
             key = key[1:]
             NotInComment[key] = value
-        if Dict.has_key(key):
+        if key in Dict:
             err('%s:%r: warning: overriding: %r %r\n' % (substfile, lineno, key, value))
             err('%s:%r: warning: previous: %r\n' % (substfile, lineno, Dict[key]))
         Dict[key] = value
