Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Представление адреса компьютера по протоколу IPv4 являет собой четыре десятизначных числа (от 0 до 255), разделённых точками. Именно такие десятичные ip-адреса мы и будем генерировать и записывать текстовый файл.У вас неправильно генерируются IP адреса.
У генератора слишком много сайдэффектов. И какая разница, быстрее выполняется for, чем while? Пишите понятный код, а скорость придет естественным образом. Сравните ваш генератор и:
import logging
from itertools import islice
from pathlib import Path
from random import randrange
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
def ips():
while True:
a = randrange(256)
b = randrange(256)
c = randrange(256)
d = randrange(256)
yield f'{a}.{b}.{c}.{d}'
def write_out(filename, lines):
with Path(filename).open('a', encoding='utf8') as fp:
for line in lines:
fp.write(f'{line}\n')
write_out('ip-addresses.txt', islice(ips(), 100))
logger.info('Complete!')Теперь можно и поддержку подсетей в ips() реализовать, и ничего не сломается, и https://docs.python.org/3/library/ipaddress.html использовать, да и вообще, немного чище все стало :)
f.write(str(a)+'.'+str(b)+'.'+str(c)+'.'+str(d)+port+'\n')f = open('ip-addresses.txt', 'a', encoding='utf-8')однако для начальной практики по Python сойдет и такой простой генератор
for n in range(amount): a = randint(0,255) b = randint(0,255) c = randint(0,255) d = randint(0,255)
def progressbar(position, max):
total_points = 50 # длина прогрессбара, выберите по вкусу
current_points = int(position / max * total_points)
percent = int(current_points / total_points * 100)
print(f'\r[ {"█" * current_points}{"░" * (total_points-current_points)} ] {percent}%', end='', flush=True)
Используем цикл for, так как он выполняется гораздо быстрее while'a.
реализуем простенький прогресс-бар.
Сразу хочу сказать: Tkinter не подойдёт для этой цели.
def generator(amount, port=''):
...
for n in range(amount):
...
prc = int(n//(amount/100.0))
frame.update()
prgs.set(prc)
...
prgs.set(100)
print('Success!')
...
prgs = IntVar()
pb = ttk.Progressbar(frame, orient='horizontal', length=320, mode='determinate', variable=prgs)
pb.grid(row=4, column=0, columnspan = 8)
root.mainloop()
Пишем генератор ip-адресов на Python со свистелками, дуделками и графической оболочкой Tkinter