diff --git a/Lib/ctypes/util.py b/Lib/ctypes/util.py
index 6815f94..97d0c2f 100644
--- a/Lib/ctypes/util.py
+++ b/Lib/ctypes/util.py
@@ -142,9 +142,7 @@
                 return None
             return res.group(1)
 
-    if (sys.platform.startswith("freebsd")
-        or sys.platform.startswith("openbsd")
-        or sys.platform.startswith("dragonfly")):
+    if sys.platform.startswith(("freebsd", "openbsd", "dragonfly")):
 
         def _num_version(libname):
             # "libxyz.so.MAJOR.MINOR" => [ MAJOR, MINOR ]
diff --git a/Lib/distutils/command/build_ext.py b/Lib/distutils/command/build_ext.py
index 8d843d6..8baf538 100644
--- a/Lib/distutils/command/build_ext.py
+++ b/Lib/distutils/command/build_ext.py
@@ -240,8 +240,7 @@
         # for extensions under Linux or Solaris with a shared Python library,
         # Python's library directory must be appended to library_dirs
         sysconfig.get_config_var('Py_ENABLE_SHARED')
-        if ((sys.platform.startswith('linux') or sys.platform.startswith('gnu')
-             or sys.platform.startswith('sunos'))
+        if (sys.platform.startswith(('linux', 'gnu', 'sunos'))
             and sysconfig.get_config_var('Py_ENABLE_SHARED')):
             if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")):
                 # building third party extensions
diff --git a/Lib/packaging/command/build_ext.py b/Lib/packaging/command/build_ext.py
index c820336..b0c3f16 100644
--- a/Lib/packaging/command/build_ext.py
+++ b/Lib/packaging/command/build_ext.py
@@ -244,8 +244,7 @@
         # for extensions under Linux or Solaris with a shared Python library,
         # Python's library directory must be appended to library_dirs
         sysconfig.get_config_var('Py_ENABLE_SHARED')
-        if ((sys.platform.startswith('linux') or sys.platform.startswith('gnu')
-             or sys.platform.startswith('sunos'))
+        if (sys.platform.startswith(('linux', 'gnu', 'sunos'))
             and sysconfig.get_config_var('Py_ENABLE_SHARED')):
             if sys.executable.startswith(os.path.join(sys.exec_prefix, "bin")):
                 # building third party extensions
diff --git a/Lib/test/support.py b/Lib/test/support.py
index 64c1b4e..b3989e5 100644
--- a/Lib/test/support.py
+++ b/Lib/test/support.py
@@ -311,7 +311,7 @@
     def decorator(func):
         @functools.wraps(func)
         def wrapper(*args, **kw):
-            if sys.platform.startswith('linux'):
+            if sys.platform == 'linux':
                 version_txt = platform.release().split('-', 1)[0]
                 try:
                     version = tuple(map(int, version_txt.split('.')))
diff --git a/Lib/test/test_fcntl.py b/Lib/test/test_fcntl.py
index 6e425aa..29af99c 100644
--- a/Lib/test/test_fcntl.py
+++ b/Lib/test/test_fcntl.py
@@ -23,9 +23,8 @@
     else:
         start_len = "qq"
 
-    if (any(sys.platform.startswith(prefix)
-            for prefix in ('netbsd', 'freebsd', 'openbsd', 'bsdos'))
-        or sys.platform in ('Darwin1.2', 'darwin')):
+    if (sys.platform.startswith(('netbsd', 'freebsd', 'openbsd', 'bsdos'))
+        or sys.platform == 'darwin'):
         if struct.calcsize('l') == 8:
             off_t = 'l'
             pid_t = 'i'
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 35beae4..556bbba 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -527,7 +527,7 @@
     def test_builtin_handlers(self):
         # We can't actually *use* too many handlers in the tests,
         # but we can try instantiating them with various options
-        if sys.platform.startswith('linux') or sys.platform == 'darwin':
+        if sys.platform in ('linux', 'darwin'):
             for existing in (True, False):
                 fd, fn = tempfile.mkstemp()
                 os.close(fd)
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 320f373..4e5085e 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -442,10 +442,8 @@
         # Find one service that exists, then check all the related interfaces.
         # I've ordered this by protocols that have both a tcp and udp
         # protocol, at least for modern Linuxes.
-        if (sys.platform.startswith('linux') or
-            sys.platform.startswith('freebsd') or
-            sys.platform.startswith('netbsd') or
-            sys.platform == 'darwin'):
+        if (sys.platform.startswith(('freebsd', 'netbsd'))
+            or sys.platform in ('linux', 'darwin')):
             # avoid the 'echo' service on this platform, as there is an
             # assumption breaking non-standard port/protocol entry
             services = ('daytime', 'qotd', 'domain')
@@ -2074,7 +2072,7 @@
     ])
     if hasattr(socket, "socketpair"):
         tests.append(BasicSocketPairTest)
-    if sys.platform.startswith('linux'):
+    if sys.platform == 'linux':
         tests.append(TestLinuxAbstractNamespace)
     if isTipcAvailable():
         tests.append(TIPCTest)
