#!/usr/bin/python3 """ Wyłuskiwanie lokalnych adresów ip z podanej listy """ ips = [ "192.168.0.7", "198.23.12.9", "13.8.32.1", "10.11.2.37", "11.11.3.123", "199.231.1.0", "61.221.34.59", "48.54.206.145", "21.181.83.183", "172.30.27.219", "123.170.108.177", "216.227.101.121", "51.126.7.165", "23.96.221.226", "208.212.144.77", "192.152.96.133", "37.13.232.193", "211.121.69.142", "16.122.66.255", "118.57.180.250", "228.65.59.248", "172.175.159.72", "10.195.34.158", ] def ip_lokalne(ips): lokalne = [] for ip in ips: #Pierwszy sposób: #oktety = [] #for o in ip.split("."): # oktety.append(int(o)) ########################## #Drugi: #oktety = list(map(int,ip.split("."))) ########################## #Trzeci: oktety = [int(o) for o in ip.split(".")] ########################## ''' Jeżeli weźmiemy warunek w nawias, Python potraktuje to jako jedną linię - aż do zamykającego nawiasu. Przez to czytelniej. Operator logiczny and ma pierwszeństwo przed or: https://docs.python.org/3/reference/expressions.html#operator-precedence ''' if (oktety[0] == 10 or oktety[0] == 172 and 16 <= oktety[1] <= 31 or oktety[0] == 192 and oktety[1] == 168): lokalne.append(ip) #W zasadzie jest już ok, ale w poleceniu zażądaliśmy zwracania krotki return tuple(lokalne) for ip in ip_lokalne(ips): print(ip)