tag:blogger.com,1999:blog-49835415253926609332024-03-05T12:12:28.702+02:00ZlomordaPython, CSS, HTML, JavaScript Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.comBlogger60125tag:blogger.com,1999:blog-4983541525392660933.post-32166583424338725402020-06-21T11:13:00.001+03:002020-06-21T11:13:25.481+03:00Python - "спим" при парсинге сайтов<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzLzqFQgcKxlFjCGsGr0US5CtSI-oO2EsFaSBJ3pETlj0RerAFM-oxb3k33LnYKJVH31cmcMPD8nszdpSUjogwC3o3oImprxYXWrdLEx84RY5zlThj9ttmVE_PrrgOgUWwFCL1hMFgTbQ/s1024/123.png" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="681" data-original-width="1024" height="426" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhzLzqFQgcKxlFjCGsGr0US5CtSI-oO2EsFaSBJ3pETlj0RerAFM-oxb3k33LnYKJVH31cmcMPD8nszdpSUjogwC3o3oImprxYXWrdLEx84RY5zlThj9ttmVE_PrrgOgUWwFCL1hMFgTbQ/w640-h426/123.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">При парсинге, самое важное, что-бы вас не забанили. Для этого программа должна вести себя как человек.</div><div class="separator" style="clear: both; text-align: left;"></div>
<a name='more'></a>
<br />
<div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Задача:</div><div class="separator" style="clear: both; text-align: left;">Стянуть информацию с разных страниц одного сайта и не поймать бан.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Решение:</div><div class="separator" style="clear: both; text-align: left;">Создаём несколько команд с обращение к странице. Количество команд равна количеству страниц. Между запросами отправляем нашего Питона немного поспать.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Прикручиваем нужные библиотеки:</div><div class="separator" style="clear: both; text-align: left;">
<div class="zloicode">import requests
from time import sleep
from random import randint</div>
<br /><br />Requests - Чтобы собрать информацию с сайта</div><div class="separator" style="clear: both; text-align: left;">Sleep - Чтобы "усыпить" Питона</div><div class="separator" style="clear: both; text-align: left;">Randint - Для рандомального времени</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Пример кода:</div><div class="separator" style="clear: both; text-align: left;">
<div class="zloicode">import requests
from time import sleep
from random import randint
collected_data_1 = requests.get("http://zlomorda.net/test1.html")
sleep(randint(3, 8))
collected_data_2 = requests.get("http://zlomorda.net/test2.html")
sleep(randint(3, 8))
collected_data_3 = requests.get("http://zlomorda.net/test3.html")</div>
</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">- Обращаемся к первой странице</div><div class="separator" style="clear: both; text-align: left;">- Спим от 3-х до 8-и секунд</div><div class="separator" style="clear: both; text-align: left;">- Обращаемся ко второй странице</div><div class="separator" style="clear: both; text-align: left;">- Спим от 3-х до 8-и секунд</div><div class="separator" style="clear: both; text-align: left;">- Обращаемся к третьей странице</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Всё, дальше обрабатываем данные.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-33251321374900349322020-06-01T17:51:00.000+03:002020-06-01T17:51:10.999+03:00CSS - Флаг Соединённых Штатов Америки<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE7U7sAbsM1SqcXTpIylIful45EepLdUZaKHkxpbNzccA0fIevnlZpTzF7OwxViMkOeNitm67_k6VSxiJ1q21TkUMXevmmVtjxAVVD3mC9H7mtJhHdAvh78Ic3X-lDJBZv-X2cnv8bLEc/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1420" data-original-width="2420" height="376" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE7U7sAbsM1SqcXTpIylIful45EepLdUZaKHkxpbNzccA0fIevnlZpTzF7OwxViMkOeNitm67_k6VSxiJ1q21TkUMXevmmVtjxAVVD3mC9H7mtJhHdAvh78Ic3X-lDJBZv-X2cnv8bLEc/w640-h376/4685s.png" width="640" /></a></div>
<br />
<div>Флаг С.Ш.А. интересен тем, что при его отрисовки можно использовать Repeating Gradient, отрисовка звёздочек через Content и всё это одним дивом.</div>
<a name='more'></a>
<br />
<div>Для начала надо отметить, что большую часть размеров пришлось подбирать "на глаз". С адаптацией я буду разбираться позже. Сейчас меня интересует только отрисовка элементов.</div><div><br /></div><div>Зададим размеры будущего флага:</div>
<div class="zloicode">.us-flag {
position: relative;
height: 400px; width: 760px;
border: solid 1px #000000;
}</div><br />
<div>Так-же добавим Repeating Gradient для фона (полосочки):</div>
<div class="zloicode">background: repeating-linear-gradient(#B22234 0% 7.69%, white 7.69% 15.38%);</div><br />
<div>Рисуется красная и белая полоса нужной толщины. Затем они просто повторяются пока не закончится отведённый под них блок.</div><div><br /></div><div>Затем я добавил синий блок:</div>
<div class="zloicode">.us-flag::before {
position: absolute;
display: block;
content: "";
height: 53.85%; width: 40%; background: #3C3B6E;
}</div><br />
<div>Да, можно было на него налепить звёзды и обойтись только одним псевдо элементом... но, мне было проще добавить еще один элемент.</div><div><br /></div><div>Рисуем звёзды:</div>
<div class="zloicode">.us-flag::after {
position: absolute; display: block;
height: 53.85%; width: 40%;
text-align: center;
font-size: 33px; color: white;
content: "★★★★★★ ★★★★★ ★★★★★★ ★★★★★ ★★★★★★ ★★★★★ ★★★★★★ ★★★★★ ★★★★★★";
letter-spacing: 22px; line-height: 21px;
padding: 13px 0 0 9px;
}</div><br />
<div>- Задаём размеры блока под звёзды</div><div>- "Прописываем" сами звёзды. Перенос строки осуществляется на пробелах</div><div>- Задаём расстояния между звёзд. Letter Spacing - по горизонтали, Line Height - по вертикали</div><div>- Ну и паддинги что-бы всё было "ровно"</div><div><br /></div><div>Полный CSS код:</div>
<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="Zlomorda" data-slug-hash="KKVPWxJ" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="US Flag">
<span>See the Pen <a href="https://codepen.io/Zlomorda/pen/KKVPWxJ">
US Flag</a> by Sergey Zlomorda Drushchits (<a href="https://codepen.io/Zlomorda">@Zlomorda</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
<br />
<div>Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-15324220010256979192020-05-20T15:33:00.000+03:002020-05-20T15:33:12.044+03:00Python - Проверка времени на чтения текста<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJTzoAbbUSpvMy3zMtJlhAH4qmkmCS8akW854oeSeVLWxuDwwau6UoNzuTY7-3hL7EWLnKzlaT8kZR9ASs7T6K9feLovrLxa_kWGJTtpcQhQ9CeAWE0kT1P0iQn3AI8HFoQLsJ3Ay3Gg8/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="500" data-original-width="800" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiJTzoAbbUSpvMy3zMtJlhAH4qmkmCS8akW854oeSeVLWxuDwwau6UoNzuTY7-3hL7EWLnKzlaT8kZR9ASs7T6K9feLovrLxa_kWGJTtpcQhQ9CeAWE0kT1P0iQn3AI8HFoQLsJ3Ay3Gg8/w640-h400/645.jpg" width="640" /></a></div>
<br />
<div>Как узнать сколько времени уйдёт на прочтение книги? Это дело просто проверить. Питон очень быстро умеет "читать" и обрабатывать большие тексты. К примеру, сколько времени надо потратить на прочтение Мастера и Маргариты?</div>
<a name='more'></a>
<br />
<div>Берём текст, в моём случаи это Мастер и Маргарита. И скармливаем Питону:</div>
<div class="zloicode">with open("MandM.txt", "r", encoding="utf-8") as zloi_text:
reading = zloi_text.read()
words = reading.split()</div><div><br /></div><div>При использовании WITH не надо закрывать файл после прочтения, это за нас делает сама функция.</div><div>Также лучше указать <b>encoding="utf-8"</b> чтобы Питон смог прочесть файл.</div><div>Подробнее о Unicode можно почитать <a href="https://tproger.ru/translations/unicode-and-encoding-python-guide/" target="_blank">ТУТ</a> и <a href="https://habr.com/ru/post/208192/" target="_blank">ТУТ</a>.</div><div><br /></div><div>Теперь если мы обратимся к words, то обнаружим там весь текст в виде одной большой строки. Не делайте print(words)... не надо...</div><div><br /></div><div>Далее указываем скорость чтения:</div>
<div class="zloicode">read_rate = 250</div><div><br /></div><div>Дальше создаём простую функцию которая считает количество часов:</div>
<div class="zloicode">def time_to_read(words):
num_of_words = len(words)
minutes = num_of_words / read_rate
hours = minutes / 60
return hours</div><div><br /></div><div>Всё, очень легко и просто. Теперь мы знаем, что если читать Мастер и Маргариту со скоростью 250 слов в минуту, то можно управиться за:</div>
<div class="zloicode">print(time_to_read(words))</div><div><br /></div><div>8 часов.</div><div><br /></div><div>Всем добра!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-61624543234215202872020-05-14T20:35:00.001+03:002020-05-14T20:35:12.870+03:00Python - Задача на палиндром в две строки<br /><div class="separator" style="clear: both; text-align: center;" wfd-id="7"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxUcDJsZZ3EoPp5SzUTQALnr_9MRVSXuERHCmOv3MtKgGemTmJpmjljgVoV1SY5TXZ4SChHh6eWKxmdPMqqx8Rt29KCgwM9vhWVNm79WqaY2121Oit_knabO-Hq5P13RDGU9xSSq18DkQ/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="473" data-original-width="499" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxUcDJsZZ3EoPp5SzUTQALnr_9MRVSXuERHCmOv3MtKgGemTmJpmjljgVoV1SY5TXZ4SChHh6eWKxmdPMqqx8Rt29KCgwM9vhWVNm79WqaY2121Oit_knabO-Hq5P13RDGU9xSSq18DkQ/d/654.png" /></a></div><div class="separator" style="clear: both; text-align: center;" wfd-id="6"><br /></div><div class="separator" style="clear: both;" wfd-id="5">Палиндром - число, буквосочетание, слово или текст, одинаково читающееся в обоих направлениях. Например, число 101; слова «топот» в русском языке и фин. saippuakivikauppias (продавец мыла; торговец щёлоком) — самое длинное слово-палиндром в мире; текст «а роза упала на лапу Азора» и пр. - это с википедии. А мы это дело реализуем на Питоне в две строки.</div><div class="separator" style="clear: both;" wfd-id="4"><br /></div>
<a name='more'></a>
<div wfd-id="3">Когда-то я учил язык С, и мне как-то было не по себе когда я видел вот такое:</div>
<div class="zloicode">#include <stdio .h="">
int main() {
int n, reversedN = 0, remainder, originalN;
printf("Enter an integer: ");
scanf("%d", &n);
originalN = n;
// reversed integer is stored in reversedN
while (n != 0) {
remainder = n % 10;
reversedN = reversedN * 10 + remainder;
n /= 10;
}
// palindrome if orignalN and reversedN are equal
if (originalN == reversedN)
printf("%d is a palindrome.", originalN);
else
printf("%d is not a palindrome.", originalN);
return 0;
}</stdio></div><div wfd-id="1"><br /></div><div wfd-id="0">Говорят что на С++ это выглядит вот так:</div>
<div class="zloicode">#include <iostream>
using namespace std;
int main()
{
int n, num, digit, rev = 0;
cout << "Enter a positive number: ";
cin >> num;
n = num;
do
{
digit = num % 10;
rev = (rev * 10) + digit;
num = num / 10;
} while (num != 0);
cout << " The reverse of the number is: " << rev << endl;
if (n == rev)
cout << " The number is a palindrome.";
else
cout << " The number is not a palindrome.";
return 0;
}</iostream></div><div wfd-id="0"><br /></div><div wfd-id="0">Да и на Java не проще:</div>
<div class="zloicode">class PalindromeExample{
public static void main(String args[]){
int r,sum=0,temp;
int n=454;//It is the number variable to be checked for palindrome
temp=n;
while(n>0){
r=n%10; //getting remainder
sum=(sum*10)+r;
n=n/10;
}
if(temp==sum)
System.out.println("palindrome number ");
else
System.out.println("not palindrome");
}
} </div><div wfd-id="0"><br /></div><div wfd-id="0">Всё это решение одной задачи на разных языках. И на это чертовски страшно смотреть. Теперь посмотрим, что нам предлагает Питон.</div><div wfd-id="0"><br /></div><div wfd-id="0">Сразу применим небольшою хитрость. Число, которое мы хотим проверить, будет вводится как строка:</div>
<div class="zloicode">num = str(1232)</div><div wfd-id="0"><br /></div><div wfd-id="0">Затем мы его просто переворачиваем и даём ему новое имя:</div>
<div class="zloicode">num_test = num[::-1]</div><div wfd-id="0"><br /></div><div wfd-id="0">Теперь осталось только сравнить:</div>
<div class="zloicode">if num == num_test:
print("Is a palindrome")
else:
print("Is NOT a palindrome")</div><div wfd-id="0"><br /></div>
<div wfd-id="0">Полный код:</div>
<div class="zloicode">num = str(1232)
num_test = num[::-1]
if num == num_test:
print("Is a palindrome")
else:
print("Is NOT a palindrome")</div><div wfd-id="0"><br /></div><div wfd-id="0">А теперь тоже самое запишем в две строки:</div>
<div class="zloicode">num_test = int(str(num)[::-1])
print(("Is NOT a palindrome", "Is a palindrome")[num == num_test])</div><div wfd-id="0"><br /></div><div wfd-id="0">Строка 1 - вводимое число преобразуется в строку, переворачивается, заново преобразуется в строку и ему приписывается новое имя.</div><div wfd-id="0">Строка 2 - If ... esle - тернарный оператор - <a href="https://www.zlomorda.net/2020/04/if-esle-python.html" target="_blank">подробнее в моём блоге</a>.</div><div wfd-id="0"><br /></div><div wfd-id="0">Всё, и не надо пугать людей.</div><div wfd-id="0"><br /></div><div wfd-id="0">Всем добра!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com1tag:blogger.com,1999:blog-4983541525392660933.post-26649840879925835282020-05-07T15:31:00.000+03:002020-05-07T15:31:06.869+03:00CSS - Флаг Японии<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE4SGsFgPlxViUN-ErJtghqOAXF7EiLh4hm9SKdC8ALPIB6zLnjNmMnsQ2ivVbl9vJfY-PVhJCwWKZvNtoUQ9-4CwrQBLmGTwo4pGoUeqasgOTIW5KecnnSq8GXAx84uQcpaixHEP6YtI/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="450" data-original-width="647" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhE4SGsFgPlxViUN-ErJtghqOAXF7EiLh4hm9SKdC8ALPIB6zLnjNmMnsQ2ivVbl9vJfY-PVhJCwWKZvNtoUQ9-4CwrQBLmGTwo4pGoUeqasgOTIW5KecnnSq8GXAx84uQcpaixHEP6YtI/d/nsk_size.jpg" /></a></div>
<br />
<div>Простой и понятный флаг - красный круг на белом фоне. Это же так просто, да? Ну да, просто. Зато можно нарисовать двумя разными, и интересными, способами.</div>
<a name='more'></a>
<br />
<div>Способ первый - "Круглый" квадрат.</div><div><br /></div><div>Нарисуем прямоугольник нужных размеров:</div><div class="zloicode">.japan-flag {
height: 400px; width: 600px;
border: solid 1px #000000;
}</div><div><br /></div><div>Затем нарисуем красный квадрат и разместим его по центру:</div><div class="zloicode">.japan-flag::after {
position: absolute;
top: 80px; left: 180px;
display: block; content: "";
height: 240px; width: 240px;
background-color: #ED2939;
}</div><div><br /></div><div>И в конце, просто "максимально загнём" углы красного квадрата:</div><div class="zloicode">border-radius: 50%;</div><div><br /></div><div>Итог:</div><div class="zloicode">.japan-flag {
position: relative;
height: 400px; width: 600px;
border: solid 1px #000000;
}
.japan-flag::after {
position: absolute;
top: 80px; left: 180px;
display: block; content: "";
height: 240px; width: 240px;
background-color: #ED2939;
border-radius: 50%;
}</div><div><br /></div><div>Всё. Для этого варианта мы использовали один див и один псевдо-элемент. Но, можно и проще.</div><div><br /></div><div>Способ второй - "Круглый" градиент.</div><div><br /></div><div>К стилизации белого прямоугольника добавляем radial-gradient:</div><div class="zloicode"> background: radial-gradient(
circle at center,
#ED2939 120px,
#ffffff 120px
);</div><div><br /></div><div>Код целиком:</div><div class="zloicode"> .japan-flag-radial {
height: 400px; width: 600px;
border: solid 1px #000000;
background: radial-gradient(
circle at center,
#ED2939 120px,
#ffffff 120px
);
}<br /></div>
<br />
<p class="codepen" data-height="478" data-theme-id="dark" data-default-tab="css,result" data-user="Zlomorda" data-slug-hash="BaoYbzO" style="height: 478px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Japan Flag">
<span>See the Pen <a href="https://codepen.io/Zlomorda/pen/BaoYbzO">
Japan Flag</a> by Sergey Zlomorda Drushchits (<a href="https://codepen.io/Zlomorda">@Zlomorda</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-34673470699758665702020-05-01T01:41:00.000+03:002020-05-01T01:41:04.284+03:00CSS - Флаг Израиля<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHP_Khq0BErqtGEk-YOnhvCBa9i1QOZL8AVenjrzLO60EQ_DBDI2OhleScEuPuHz1KHqpOfLGUJ_GBrqEPtEsMy66PBRfz0Ilh-bhX_1Atu6aVEsWCLMblTj0qaBLagFMU_wEpYT34mq0/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="718" data-original-width="993" height="462" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHP_Khq0BErqtGEk-YOnhvCBa9i1QOZL8AVenjrzLO60EQ_DBDI2OhleScEuPuHz1KHqpOfLGUJ_GBrqEPtEsMy66PBRfz0Ilh-bhX_1Atu6aVEsWCLMblTj0qaBLagFMU_wEpYT34mq0/w640-h462/A15.png" width="640" /></a></div><br />
Флаг Израиля. Вроде всё просто, две полосы на белом фоне и звезда Давида. С фоном всё было просто, а вот относительно звезды пришлось применить один фокус. <a href="https://www.zlomorda.net/2020/04/css_21.html" target="_blank">Треугольники и CSS</a> не самые лучшие друзья.
<a name='more'></a>
<br />Размеры и цвет я взял просто с картинки флага. Так-что размеры могут быть немного странноватые и не соответствовать стандартному флагу. Но, это не главное.<div><br /></div>
<div>Задаём размеры и рисуем полоски на белом фоне:</div>
<div class="zloicode">.israel-flag {
width: 900px;
height: 650px;
background:
linear-gradient(to bottom,
transparent 9.5%,
#0035B9 9.5% 25%,
transparent 25% 75%,
#0035B9 75% 90.5%,
transparent 90.5%),
#ffffff;
border: solid 1px black;
}</div>
<br />
<div>Затем задаём псевдо-элемент с контекстом самой звезды:</div>
<div class="zloicode">.israel-flag::before {
content: "✡";
color: #0035B9;
font-size: 434px;
}</div>
<br />
<div>Спасибо юникоду который делает нашу жизнь проще!!</div>
<br />
<div>Затем ставим звезду в середину флага:</div>
<div class="zloicode">.israel-flag {
text-align: center;
line-height: 660px;
}</div>
<br />
<div>text-align: center - выравнивает текст по центру горизонтальной линии. line-height задаёт высоту строки и сам текст выравнивает по середине этой строки. В идеале, высота строки должна быть ровна высоте флага. Но, у звезды не равные отступы сверху и снизу, так-что пришлось замарочиться.</div><div><br /></div><div>Весь код:</div>
<div class="zloicode">.israel-flag {
text-align: center;
line-height: 660px;
width: 900px;
height: 650px;
background:
linear-gradient(to bottom,
transparent 9.5%,
#0035B9 9.5% 25%,
transparent 25% 75%,
#0035B9 75% 90.5%,
transparent 90.5%),
#ffffff;
border: solid 1px black;
}
.israel-flag::before {
content: "✡";
color: #0035B9;
font-size: 434px;
}</div>
<p class="codepen" data-height="521" data-theme-id="dark" data-default-tab="css,result" data-user="Zlomorda" data-slug-hash="JjYrXdE" style="height: 521px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Israel Flag">
<span>See the Pen <a href="https://codepen.io/Zlomorda/pen/JjYrXdE">
Israel Flag</a> by Sergey Zlomorda Drushchits (<a href="https://codepen.io/Zlomorda">@Zlomorda</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
Всем удачи!!Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-70534542612580805092020-04-26T21:48:00.001+03:002020-04-26T22:00:41.589+03:00HTML - как распознать Internet Explorer без JavaScript<br /><div class="separator" style="clear: both; text-align: center;" wfd-id="8"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv6SScL4g21uW7CdDwVEYKk4K_WKUhK7Q9sjyhV3psgK1ta4t-CHGhiusppxWfLrUbY38BROyhzvpXtOTRkOD1EXVa89kKecmsoZM4AJFJjaIaVlG3wjUZpilvRtgFFww3ikABCVWowEc/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="700" data-original-width="700" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv6SScL4g21uW7CdDwVEYKk4K_WKUhK7Q9sjyhV3psgK1ta4t-CHGhiusppxWfLrUbY38BROyhzvpXtOTRkOD1EXVa89kKecmsoZM4AJFJjaIaVlG3wjUZpilvRtgFFww3ikABCVWowEc/w400-h400/5641.jpg" width="400" /></a></div>
<br />
<div wfd-id="7">Исторически сложилось, что у нас на работе используют два браузера на рабочих компах - Internet Explorer и Chrome. И конечно же, часть вещей работает толь пол Эксплорер, а часть только под Хром. И когда я начал писать маленький сайтик для своего отдела, то встал вопрос... как определить ху-ис-ху без JavaScript (ибо не люблю)?</div>
<a name='more'></a>
<br />
<div wfd-id="6">Свой сайтик, а точнее CSS для него, я пишу под Хром. Почему?</div><div wfd-id="6"> - Хром мне больше нравится (да, да... из-за привязки к гугл аккаунту)</div><div wfd-id="6"> - Для него всё работает - в плане CSS</div><div wfd-id="6"> - Есть хороший плагин который открывает Эксплорер прямо в Хроме. Тогда не надо метаться из браузера в браузер и думать что и в чем открывать.</div><div wfd-id="6"><br /></div><div wfd-id="6">Так вот, как оказалось, если с рабочего компа открыть сайт написаный под Эксплорер в Хроме, то появится заглушка с просьбой поменять браузер. И, почему-то, это всё реализовано на JavaScript.</div><div wfd-id="6"><br /></div><div wfd-id="6">Но, мы пойдём другим путём:</div>
<div class="zloicode"><!DOCTYPE html>
<!--[if IE]>
<link rel="stylesheet" href="ie.css">
!!! Use Chrome !!!
<![endif]--></div>
<br />
<div wfd-id="4">Всё, теперь браузер может принять определённые стили только для Эксплорера. В данном случаи я поставил заглушку с надписью !!! Use Chrome !!!:</div>
<div class="zloicode">.ie {
display: inline;
display: inline-block;
display: block;
display: run-in;
display: none;
}</div>
<br />
<div wfd-id="3">А можно сделать наоборот:</div>
<div class="zloicode"><!--[if !IE]><!-->
<link rel="stylesheet" href="ie.css" />
<!--<![endif]--></div>
<br />
<div wfd-id="3">В этом случаи, если страница открыта НЕ через Эксплорер, тогда будут применены особые правила.</div><div wfd-id="3"><br /></div><div wfd-id="3">Вот так просто, и без лишнего гемороя, можно отсечь Эксплорер от других браузеров.</div>
<div wfd-id="4"><br /></div><div wfd-id="4">Более подробно о разных тонкостях можно <a href="https://css-tricks.com/how-to-create-an-ie-only-stylesheet/" target="_blank">почитать здесь</a>.</div><div wfd-id="4"><br /></div><div wfd-id="4">Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-46975849969968081982020-04-24T05:19:00.000+03:002020-04-24T05:19:16.821+03:00CSS - Флаг Норвегии<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGZlrOSG3ZS0oIpyVTK83rauVRRnOcytFSza3pVhcDfbAlkrcLzYTSjpzb5DS6_5R_sovL_rNi_EuaH7Yi4XD0rnsRfe8aw1Z1bH6W0_Kb4J_oCioVSYQLDKgfPWpNUZt3MyplPKO6vfs/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="728" data-original-width="1000" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGZlrOSG3ZS0oIpyVTK83rauVRRnOcytFSza3pVhcDfbAlkrcLzYTSjpzb5DS6_5R_sovL_rNi_EuaH7Yi4XD0rnsRfe8aw1Z1bH6W0_Kb4J_oCioVSYQLDKgfPWpNUZt3MyplPKO6vfs/w480-h350/norway.png" width="480" /></a></div>
<br />
<style>
.norway-flag {
width: 440px;
height: 320px;
background:
linear-gradient(to right,
transparent 140px,
#002868 140px 180px,
transparent 180px),
linear-gradient(to bottom,
transparent 140px,
#002868 140px 180px,
transparent 180px),
linear-gradient(to bottom,
transparent 120px,
#ffffff 120px 200px,
transparent 200px),
linear-gradient(to right,
transparent 120px,
#ffffff 120px 200px,
transparent 200px),
#ef2b2d;
border: solid 1px black;
}
</style>
<div>А вот здесь пришлось попотеть. Вроде нет ничего страшного или сложного, даже ежу понятно, что больше одного дива и не надо. Но вот liner-gradient задал загадку которую пришлось разгадать.</div>
<a name='more'></a>
<br />
<div>Для отрисовки флага Норвегии надо использовать два вектора для линейного градиента:<br />
1 - Снизу вверх<br />
2 - Справа налево</div>
<br />
<div>Можно и наоборот... можно еще градусом задать направление... там вообще много чего можно.</div>
<br />
<div>А вот для того, что бы всё получилось как надо, пришлось разгадать одну маленькую, но выжную загадку.</div>
<br />
<div>При отрисовки нескольких градиентов, они накладываются "вглубь" картинки. Тоесть то, что написано первым - будет выше всех остальных слоёв.</div>
<br />
<div>Всё. Теперь можно рисовать.</div>
<br />
<div>Пропорции и цвета были найдены в интернете. Задаём размеры самого флага и обводим рамочкой:</div>
<div class="zloicode">.norway-flag {
width: 440px;
height: 320px;
border: solid 1px black;
}</div>
<br />
<div>Затем начинаем мучать полосочки на красном фоне (фон должен быть в самом конце):</div>
<div class="zloicode">linear-gradient(to right,
transparent 140px,
#002868 140px 180px,
transparent 180px),
linear-gradient(to bottom,
transparent 140px,
#002868 140px 180px,
transparent 180px),
linear-gradient(to bottom,
transparent 120px,
#ffffff 120px 200px,
transparent 200px),
linear-gradient(to right,
transparent 120px,
#ffffff 120px 200px,
transparent 200px),
#ef2b2d;</div>
<br />
<div>Полный "код":</div>
<div class="zloicode">.norway-flag {
width: 440px;
height: 320px;
background:
linear-gradient(to right,
transparent 140px,
#002868 140px 180px,
transparent 180px),
linear-gradient(to bottom,
transparent 140px,
#002868 140px 180px,
transparent 180px),
linear-gradient(to bottom,
transparent 120px,
#ffffff 120px 200px,
transparent 200px),
linear-gradient(to right,
transparent 120px,
#ffffff 120px 200px,
transparent 200px),
#ef2b2d;
border: solid 1px black;
}</div>
<br />
<div>Результат:</div>
<div class="norway-flag"></div>
<br />
<div>Всего хорошего!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com1tag:blogger.com,1999:blog-4983541525392660933.post-10182697998784920152020-04-22T17:46:00.002+03:002020-04-22T17:46:33.290+03:00Haml - HTML препроцессор<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIt5LPykWhwHfrGSSgEU__xQz9Dsfjc9JdNPKMi_nEn6RANde6UCKViHG9gV5Jd1RMG6ktyVy1zuBK6um4Q9SI7WKQvUXKJzmrS_Jx5cAI3zT91k3Bc6rZbwYbtRhXcfO4OaeGCa4c_Os/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="480" data-original-width="1600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgIt5LPykWhwHfrGSSgEU__xQz9Dsfjc9JdNPKMi_nEn6RANde6UCKViHG9gV5Jd1RMG6ktyVy1zuBK6um4Q9SI7WKQvUXKJzmrS_Jx5cAI3zT91k3Bc6rZbwYbtRhXcfO4OaeGCa4c_Os/" /></a></div>
<br />
<div>Препроцессор для HTML, это бесполезная и нужная вещь одновременно.</div>
<a name='more'></a>
<br />
<div>Зачем забивать себе мозг когда есть <a href="https://emmet.io/" target="_blank">Emmet</a>? Более того, он установлен на всех нормальных редакторах из коробки. Но, как без него когда надо что-то написать в <a href="https://codepen.io/" target="_blank">CodePen</a>?</div><div><br /></div><div>Лично мне понравился Haml. Потому-что он умеет делать вот так:<br /><br /></div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqPkL6jIDQi38Q3SteAqut6rZkjSdgjsnG1kt5GBKcHSikJtYcrXCSC2KyskLAOt01FTdhI7EquMAk78jImBN_7xSeH2HCdHfuchwwYV-1Fd7aK_SByUw5pUB5SWuVb8_Af8SgX4GBp64/" style="margin-left: auto; margin-right: auto;"><img border="0" data-original-height="330" data-original-width="600" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqPkL6jIDQi38Q3SteAqut6rZkjSdgjsnG1kt5GBKcHSikJtYcrXCSC2KyskLAOt01FTdhI7EquMAk78jImBN_7xSeH2HCdHfuchwwYV-1Fd7aK_SByUw5pUB5SWuVb8_Af8SgX4GBp64/" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">С лева - написано на Haml. С права - то что получается на выходе</td></tr></tbody></table><br />Можно очень быстро прописать нужные дивы и классы в CodePen (там всё работает без лишних установок и для всех видов аккаунтов) и сосредоточиться на CSS.<div><br /></div><div>Если хотите узнать более подробоно:</div><div> - <a href="http://haml.info/" target="_blank">Офф. сайт Haml</a></div><div> - <a href="https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80" target="_blank">Что такое препроцессор</a></div><div> - <a href="https://www.google.com/search?q=%D0%BF%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D1%8B+%D0%B4%D0%BB%D1%8F+HTML&rlz=1C1GCEB_enIL889IL889&oq=%D0%BF%D1%80%D0%B5%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D1%80%D1%8B+%D0%B4%D0%BB%D1%8F+HTML&aqs=chrome..69i57&sourceid=chrome&ie=UTF-8" target="_blank">Какие есть еще препроцессоры для HTML</a></div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-84082969388906086942020-04-21T10:34:00.002+03:002020-04-21T10:34:41.359+03:00CSS - Флаг Чехии<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv1AGYaakLZSsxMFk4YegUdmYD1Hl7lKy7oBfKRk6P5dWins4-zhW3HCOcSOLf9oCawy1YKDPFJpSO4bsWwHUK3HYGdlvWgMUiXgpVizdhuHj4ezFqE1hghPTyi0zQOTzhDP6ObAYP61s/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1024" data-original-width="1280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgv1AGYaakLZSsxMFk4YegUdmYD1Hl7lKy7oBfKRk6P5dWins4-zhW3HCOcSOLf9oCawy1YKDPFJpSO4bsWwHUK3HYGdlvWgMUiXgpVizdhuHj4ezFqE1hghPTyi0zQOTzhDP6ObAYP61s/" /></a></div>
<br />
<div>Как оказалось, нельзя так просто взять и нарисовать треугольник на чистом CSS. Флаг Чехии это очень хороший пример для тренировки рисования треугольников.</div>
<a name='more'></a>
<br />
<div>Нарисовать фон было простой задачай. Её я отработал на <a href="https://www.zlomorda.net/2020/04/css.html" target="_blank">флаге России</a>:</div>
<div class="zloicode">.cze-flag {
height: 200px;
width: 300px;
border: solid 1px #000000;
background: linear-gradient(to bottom,
white 50%,
red 50%);
}</div>
<br />
<div>Здесь всё просто. Размер флага 2/3 и фон. Половина белого и красного.
<br /><br />
А вот с треугольником пришлось попотеть. В этих вашим интернетах нашел примеры отрисовки треугольников рамкой. <br /><br />Пошаговый пример:</div>
<p class="codepen" data-default-tab="css,result" data-height="265" data-pen-title="Создание Треугольника" data-slug-hash="JjYRzRJ" data-theme-id="dark" data-user="Zlomorda" style="align-items: center; border: 2px solid; box-sizing: border-box; display: flex; height: 265px; justify-content: center; margin: 1em 0px; padding: 1em;">
<span>See the Pen <a href="https://codepen.io/Zlomorda/pen/JjYRzRJ">
Создание Треугольника</a> by Sergey Zlomorda Drushchits (<a href="https://codepen.io/Zlomorda">@Zlomorda</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async="" src="https://static.codepen.io/assets/embed/ei.js"></script>
<br />
<div>Всё, теперь можно применить:</div>
<p class="codepen" data-default-tab="css,result" data-height="265" data-pen-title="Czechia flag" data-slug-hash="jObMJzP" data-theme-id="dark" data-user="Zlomorda" style="align-items: center; border: 2px solid; box-sizing: border-box; display: flex; height: 265px; justify-content: center; margin: 1em 0px; padding: 1em;">
<span>See the Pen <a href="https://codepen.io/Zlomorda/pen/jObMJzP">
Czechia flag</a> by Sergey Zlomorda Drushchits (<a href="https://codepen.io/Zlomorda">@Zlomorda</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async="" src="https://static.codepen.io/assets/embed/ei.js"></script>
<br />
<div>Конечно, это не идеальное решение для отрисовки треугольников. Например, для флага Израиля такое решение не подайдёт. Но, мы здесь для того, чтобы учиться.</div>
<br />
<div>Всем добра!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-9185220052144999952020-04-17T04:07:00.000+03:002020-04-17T04:07:03.138+03:00Python - обращение к функции через "переменную"<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGb7s-eHKO4K5bky5viI8_dLjCyCXuaQZvnEwv0inO7SfHOMKDLiYL3ULArViHd3hOZnSrhPIbEb9Wc_gLF0XsWo7P_aJOkee7_BsMqEjqEdAa9mMPs8npfNwjOyN1SywyX4tiD3ApxIY/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="980" data-original-width="1386" height="339" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhGb7s-eHKO4K5bky5viI8_dLjCyCXuaQZvnEwv0inO7SfHOMKDLiYL3ULArViHd3hOZnSrhPIbEb9Wc_gLF0XsWo7P_aJOkee7_BsMqEjqEdAa9mMPs8npfNwjOyN1SywyX4tiD3ApxIY/w480-h339/01.jpg" width="480" /></a></div>
<br />
<div>Ох уж этот удивительный Python. Казалось бы, вот зачем задавать функции "переменную" и передавать через эту переменную параметры для функции? Но Python уже было не остановить.</div>
<a name='more'></a>
<br />
<div>Можно сделать так. Задаём несколько функций:</div>
<div class="zloicode">def zlaya_function(a, b):
return a ** b
def drugaya_function(a, b):
return a + b
def prosto_function(a, b):
return a - b</div>
<br />
<div>Зетем формируем из них список:</div>
<div class="zloicode">dobro = [zlaya_function, drugaya_function, prosto_function]</div>
<br />
<div>Потом через индекс списка передаём параметры нужной функции:</div>
<div class="zloicode">print(dobro[0](2, 3)) # 8
print(dobro[1](2, 3)) # 5
print(dobro[2](2, 3)) # -1</div>
<br />
<div>Полный код:</div>
<div class="zloicode">def zlaya_function(a, b):
return a ** b
def drugaya_function(a, b):
return a + b
def prosto_function(a, b):
return a - b
dobro = [zlaya_function, drugaya_function, prosto_function]
print(dobro[0](2, 3)) # 8
print(dobro[1](2, 3)) # 5
print(dobro[2](2, 3)) # -1</div>
<br />
<div>Жачем оно нужно? Да не нужно! Просто Python так может. И это прекрасно!!</div>
<br />
<div>Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-66138082368751498962020-04-16T02:39:00.000+03:002020-04-16T02:39:20.007+03:00CSS - Флаг России<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLr6m6sBoyYyOrodrd4ltjUea11TjACmTQAXN3c3-z1xPCL9QjjFkvAPpqwAQ7w8n4dWvNBPZT39had0-KJT5-UBXloAFc-SGGbB51E3ueZ4FRWjwpdo2WTquZMqZ-81gQLq-pBMV4OSE/" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="800" data-original-width="1200" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLr6m6sBoyYyOrodrd4ltjUea11TjACmTQAXN3c3-z1xPCL9QjjFkvAPpqwAQ7w8n4dWvNBPZT39had0-KJT5-UBXloAFc-SGGbB51E3ueZ4FRWjwpdo2WTquZMqZ-81gQLq-pBMV4OSE/w480-h320/EG6djgkX0AEgkuD.png" width="480" /></a></div>
<br />
<div>Рисунки на чистом CSS. Блин, да это просто ё-моё!! Я всё никак не мог понять с чего начинать практиковать CSS. Просто так верстать страницы с шаблонов я не хотел - скучно. А верстать что-то своё тоже не мог - нет фантазии. А вот с рисунками всё получилось иначе. Интересно, забавно и не тривиально.</div>
<a name='more'></a>
<br />
<div>Для начала, я решил рисовать флаги. Как оказалось, даже для простого триколора, пришлось перелопатить много информации. Попробывать разные приёмы. Самое важное, что даже для решения самых простых задач, могут быть несколько решений.</div>
<br>
<div>Флаг России. Три цвета. Два способа:<br />
1 - Несколько дивов<br />
2 - Один див<br />
<br /></div>
<p class="codepen" data-height="265" data-theme-id="dark" data-default-tab="css,result" data-user="Zlomorda" data-slug-hash="bGVEMqM" style="height: 265px; box-sizing: border-box; display: flex; align-items: center; justify-content: center; border: 2px solid; margin: 1em 0; padding: 1em;" data-pen-title="Russia flag">
<span>See the Pen <a href="https://codepen.io/Zlomorda/pen/bGVEMqM">
Russia flag</a> by Sergey Zlomorda Drushchits (<a href="https://codepen.io/Zlomorda">@Zlomorda</a>)
on <a href="https://codepen.io">CodePen</a>.</span>
</p>
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
<br />
<div>Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-21661758551283340092020-04-14T23:41:00.001+03:002020-04-14T23:41:21.163+03:00Python - нельзя так просто взять и переписать объект<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9717-tWbeBC26VqcGqQvoLXHRQQngmZ0TvkM0CVTcLRe8bQCi7R-YwKWRs3Qa-JqNAqjZWVEoU_lcCbeGMt4dnrkJ9ppAh3qoo3gQNQQgbX49ZnXR4xJFJJCMwv1PGIG2ZsD2s9xc3Hw/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="375" data-original-width="648" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9717-tWbeBC26VqcGqQvoLXHRQQngmZ0TvkM0CVTcLRe8bQCi7R-YwKWRs3Qa-JqNAqjZWVEoU_lcCbeGMt4dnrkJ9ppAh3qoo3gQNQQgbX49ZnXR4xJFJJCMwv1PGIG2ZsD2s9xc3Hw/" /></a></div>
<br />
<div>Python Python, ты могуч. Ты даже без ";" всё понимаешь. Но, просто так <a href="https://www.zlomorda.net/2020/04/python-is.html" target="_blank">переписать объект</a> ты не можешь. Лично мне, как любителю, это не понятно. Но ничего, с этим мы тоже разберёмся.</div>
<a name='more'></a>
<br />
<div>Возьмём пример с картинки. Как же так? Внесли изменения в list_1 а оно подействовало на list_2 тоже. Проверим id объекта:</div>
<div class="zloicode">list_1 = [0, 1, 2]
list_2 = list_1
print(id(list_1)) # 2393635697152
print(id(list_2)) # 2393635697152</div>
<br />
<div>Ну вот, в очередной раз убеждаемся, что в Python-e нет переменных. Есть только объекты на которые ссылаются разные имена. В данном случае два разных имени ссылаются на один объект.</div><div><br /></div><div>Но, что же делать если нам надо этот объект именно скопировать? Так, что-бы у него был свой id?</div><div><br /></div><div>Для этого надо использовать модуль copy. К счастью он сразу идёт с Python и работает из коробки... без шаманства:</div>
<div class="zloicode">import copy
list_1 = [0, 1, 2]
list_2 = copy.copy(list_1)
print(id(list_1)) # 1637554467328
print(id(list_2)) # 1637554460608</div>
<br />
<div>Всё бобёр - выдыхай. Работает!!</div><div><br /></div><div>Да, есть еще метод deepcopy, есть отдельные методы для копирования листов и словарей без использования модуля copy. Но, лично мне этого, пока, достаточно. А дальше - больше.</div><div><br /></div><div>Более подробно о <a href="https://docs.python.org/3.8/library/copy.html" target="_blank">модуле copy</a> (включая сам copy и deepcopy).</div><div><br /></div><div>Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-37749653131269904722020-04-12T21:38:00.001+03:002020-04-12T21:38:20.226+03:00Парсинг вэб-страниц - шаг 0<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmpqNEerqWz_34dX7C1OiYuSyq67lePq5kdDeQJHO6AWjz-WP_mCGdilpnCo2ypixG3AcSJ0-LMQM-2A1AAiSUnXt2aKEFwnuzujtIaaFpSr15JBc_JJx5nlkTsD8I2oMINhDnnsBG9b0/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="443" data-original-width="768" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmpqNEerqWz_34dX7C1OiYuSyq67lePq5kdDeQJHO6AWjz-WP_mCGdilpnCo2ypixG3AcSJ0-LMQM-2A1AAiSUnXt2aKEFwnuzujtIaaFpSr15JBc_JJx5nlkTsD8I2oMINhDnnsBG9b0/" /></a></div>
<br />
<div>Дело было вечером, делать было нечего. Значит самое время начать пробовать себя в парсинге вэба. Всё было бы хорошо, но на глаза попалась библиотека webbrowser которая умеет открывать по запросу браузер. В общем захотелось и её попробовать.</div>
<a name='more'></a><br />
<div>Но, и парсить тоже хочется. Значит я придумал такую штуку:</div><div>1 - Проверяем работает ли сайт. Отправляем запрос и получаем ответ в виде кода.</div><div>2 - Если код нам не знаком, программка предлагает открыть сайт с расшифровкой данного кода.</div><br />
<div>Всё, больше ничего. Функционал так себе. Но, есть возможность начать базовое ознакомление с библиотекой request и так же поиграться с библиотекой webbrowser.</div>
<br />
<div>Импортируем нужные библиотеки:</div>
<div class="zloicode">import requests
import webbrowser</div><br />
<div>Документации: <a href="https://requests.readthedocs.io/en/master/" target="_blank">requests</a> и <a href="https://docs.python.org/3.8/library/webbrowser.html" target="_blank">webbrowser</a></div><div><br /></div><div>Дальше зададим адрес сайта от которого хотим получить ответ и напишем функцию которая будет выдавать Статус Код:</div>
<div class="zloicode">url = "https://www.zlomorda.net/"
def httpRequest():
""" Функция обращается по адресу
и печатает Статус Код
"""
# Отправка запроса по адресу
http_answer = requests.get(url)
# Получам только номер кода
http_status_code = http_answer.status_code
print("Код ответа {}".format(http_status_code))</div>
<br />
<div>Дальше напишем функцию которая собирает адрес сайта с расшифровкой кода и открывает его в браузере:</div>
<div class="zloicode">def statusCodeHelper(status_code):
""" Функция пытается найти страницу с определённым кодам
для расшифровки. Если страница не найдена, то открывается
страница с общими данными по кодам статуса.
"""
user_answer = input("Для информации нажмите ENTER ")
if user_answer == "":
# Если был нажат ENTER, тогда программка созда линк на страницу с данным кодом
url = "https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/" + \
str(status_code)
# Проверка статуса данного линка
http_answer = requests.get(url)
http_status_code = http_answer.status_code
# Если такой страницы нет, откроется общая страница по кодам статуса
# Если такая страница есть, тогда программка откроет её в браузере
if http_status_code == 404:
webbrowser.open(
"https://www.tutorialspoint.com/http/http_status_codes.htm", new=2)
else:
webbrowser.open(url, new=2)</div><br />
<div>Может получится так, что по соборному адресу ничего нет (код 404), в таком случае откроется страница с общими описаниями кодов статуса. А если такая страница есть, то программка её откроет.</div><div><br /></div><div>Конечно, здесь хватает дыр и недочетов, но суть была в другом... просто попробовать, и оно получилось. А это значит, что можно двигаться дальше.</div><div><br /></div><div>Полный код на моём <a href="https://github.com/Zlomorda/zloiPython/blob/master/modules/parser%20+%20browser%20opener%20-%20v.0.py" target="_blank">GitHub-e</a>.</div><div><br /></div><div>Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-15216827321100326842020-04-10T22:17:00.000+03:002020-04-10T22:17:20.792+03:00Простой Code Block для блога на CSS<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3a4SmIVoXKWDTtu0CoUst7NW6rZpXKqE-jEt4bIbx-Cfr0jFlYwlbm03BfJv1oITQg-Hw8p3X0EpMzTAwHwK7XksPvVklwdCtcnKLYlD5uthIdRFoR2OAvJoLx-nhnH7Bl1x9CCboQqQ/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="550" data-original-width="960" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3a4SmIVoXKWDTtu0CoUst7NW6rZpXKqE-jEt4bIbx-Cfr0jFlYwlbm03BfJv1oITQg-Hw8p3X0EpMzTAwHwK7XksPvVklwdCtcnKLYlD5uthIdRFoR2OAvJoLx-nhnH7Bl1x9CCboQqQ/" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div>
<p>Всё началось с того, что в блогере нет тэга для оформления программного кода. А ведь хочется, что-бы всё было по взрослому. Поле с отдельным фоном и рамкой, с отдельным шрифтом и размером, с нужными отступами и длинной строки. Гугл, почему то, этого не предусмотрел. Но, они разрешают писать свои CSS стили. Значит есть хорошая возможность и CSS начать учить... и на практике применить.</p>
<a name='more'></a>
<div>Что мне надо было:<br />
1 - Отдельный фон и рамка.<br />
2 - Поле должно быть ограничено по ширине но не по высоте.<br />
3 - Если строка длиннее ширины поля, то должен быть горизонтальный скрол.<br />
4 - Своя стилистика шрифта и пробелов.<br />
5 - Лёгкое применение.</div><br />
<div>После долгих проб и ошибок (потому-что я понятия не имел что такое CSS), я "нарисовал" вот такое поле:</div>
<div class="zloicode">@import url('https://fonts.googleapis.com/css2?family=Source+Code+Pro&display=swap');
.zloicode {
display: block;
font-family: 'Source Code Pro', monospace;
width: auto;
background-color: black;
color: rgb(211, 211, 211);
font-size: 20px;
border: 1px solid grey;
padding: 5px 10px 5px 10px;
white-space: pre;
overflow: auto;
}</div><br />Отдельной строкой импортирую шрифт. В блогере нельзя загружать свои файлы (кроме картинок) - так-что Гугл Фонт пришли на помощь.<div>И самое главное это white-space: pre который сохраняет все пробелы, и overflow: auto который делает горизонтальный скрол. А всё остальное по вкусу.</div><div><br /></div><div>Вот получилась такая приятная штука :)</div><div><br /></div><div>Всем удачи!!</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-91758791154381408672020-04-07T22:16:00.000+03:002020-04-07T22:16:31.636+03:00Python - разница между "==" и "is"<br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxMgRusnvihCQ7JKvKC_mmNwldEfubtKiJtJDkA5tt31D60qvcZbp65_6OKyRD80FaxTdsk_of51BXnj3HcNAxyX93eq433IulQnVAig8KmnsXnWtARuPa7O6eAb4vtPkigEfvnWFMGTI/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="293" data-original-width="430" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgxMgRusnvihCQ7JKvKC_mmNwldEfubtKiJtJDkA5tt31D60qvcZbp65_6OKyRD80FaxTdsk_of51BXnj3HcNAxyX93eq433IulQnVAig8KmnsXnWtARuPa7O6eAb4vtPkigEfvnWFMGTI/" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: center;"><blockquote style="border: none; margin: 0px 0px 0px 40px; padding: 0px;"><div class="separator" style="clear: both; text-align: center;"></div></blockquote></div>
<div>В Python нет переменных. Есть только названия которые ссылаются на разные объекты. Для наглядности можно посмотреть на работу орепаторов "==" и "is". </div>
<a name='more'></a>
<br />
<div>Создадим два одинаковых листа (объекты):</div>
<div class="zloicode">list_1 = [0, 1, 2]
list_2 = [0, 1, 2]</div>
<br />
<div>Спросим если они равны, и так же спросим если это тотже самый объект.</div>
<div class="zloicode">print(list_1 == list_2) # True
print(list_1 is list_2) # False</div>
<br />
Таким образом можно проверять если мы обращаемся к одному и томуже объекту или к разным объектам с одинаковым значением.
<div class="zloicode">list_1 = [0, 1, 2]
list_2 = [0, 1, 2]
list_3 = list_2
print(list_1 == list_2) # True - да, они равны.
print(list_1 is list_2) # False - это разный ообъекты.
print(list_3 is list_2) # True - да, это тотже объект.
print(list_3 is list_1) # False - это разный ообъекты.
print(list_3 == list_1) # True - да, они равны.</div>
Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-10296223608590110632020-04-02T21:59:00.000+03:002020-04-02T23:27:42.668+03:00If ... esle - тернарный оператор - Python<style>
.zloicode {
white-space: pre-line;
height: auto;
width: auto;
background-color: black;
color: rgb(211, 211, 211);
font-family: Consolas;
font-size: 15px;
border: 1px solid grey;
padding: 8px;
white-space: pre;
}
</style>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLFZsW9mdTJWpIXy-9WVKuowpWWkM_0ei58_P2t0P89fJDQqqEJVDscDnKvNgoJDcTdHVLWnXFQMy4jyPwAdax22nFvxN4B42Ay1dFLs0yuX2oBzfDDCAOQo9fqYyKeUNBwVxY5qBAQ0/s1600/123.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="109" data-original-width="473" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZLFZsW9mdTJWpIXy-9WVKuowpWWkM_0ei58_P2t0P89fJDQqqEJVDscDnKvNgoJDcTdHVLWnXFQMy4jyPwAdax22nFvxN4B42Ay1dFLs0yuX2oBzfDDCAOQo9fqYyKeUNBwVxY5qBAQ0/s1600/123.png" /></a></div>
<br />
Тернарный оператор, от слова "три". Если очень просто, то в одну строку пишут три операнда. В зависимости от выполнения условия одного из операндов, возвращается второй или третий операнд. Ну а если "не просто" - <a href="https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D1%80%D0%BD%D0%B0%D1%80%D0%BD%D0%B0%D1%8F_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%BD%D0%B0%D1%8F_%D0%BE%D0%BF%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F" target="_blank">то тогда на Вики</a>.<br />
<br />
Для сравнения, я попробовал обычную и альтернативную форму записи If ... else.<br />
<a name='more'></a>
<br />
Синтаксис. Почему-то первым значением идёт False, вторым True и только потом само условие:
<br />
<div class="zloicode">(False, True)[condition]</div>
<br />
Задаём простой вопрос, обрабатываем и выдаём ответ:
<br />
<div class="zloicode">question = input("Do you like ternary operators? ")
answer = ("Nonsense", "Python rulezz!!")[question == "Yes"]
print(answer)</div>
<br />
Хорошо, теперь посмотрим обычную записать:
<br />
<div class="zloicode">question = input("Do you like ternary operators? ")
if question == "Yes":
print("Python rulezz!!")
else:
print("Nonsense")</div>
<br />
В итоге обе команды делают одно и тоже. Но, как мне кажется, обычная форма намного проще для понимания. Каждый момент описан отдельной строкой. Также можно вносить изменения и не боятся очень длинных строк. Например вот так:
<br />
<div class="zloicode">if question.lower() == "yes":</div>
<br />
Если такой впихнуть в альтернативную версию - то будет немного не удобно.
<br /><br />
Файл с кодами на <a href="https://github.com/Zlomorda/zloiPython/blob/master/modules/If%20...%20else%20-%20ternary%20VS%20normal.py" target="_blank">GitHub-е</a>.<br />
<br />
Написано по мотивам статьи с <a href="https://habr.com/ru/post/495168/" target="_blank">Хабра</a>.Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-68024236465977456122020-03-31T02:40:00.000+03:002020-04-06T23:21:55.501+03:00Кидаем кубики на Python - v. 2<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKBJl0CUDHb_9-69E-ClW74-QhFMGIf3TQm0_QCEe6ZdeKsLMxwW5cRwX1gy0H-hAns75DTFlz_S5Dch8Uh16sPJOaC4IVdic4zGhJ7scpbz-firVnmvrUsyDG7uy6oZK50S9LXRtFgkM/" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="799" data-original-width="1299" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKBJl0CUDHb_9-69E-ClW74-QhFMGIf3TQm0_QCEe6ZdeKsLMxwW5cRwX1gy0H-hAns75DTFlz_S5Dch8Uh16sPJOaC4IVdic4zGhJ7scpbz-firVnmvrUsyDG7uy6oZK50S9LXRtFgkM/w480-h296/dice.png" width="480" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div><br /></div>
Недавно я написал небольшой код который кидает два кубика, выдаёт результат и ждёт действия юзера - кидать еще раз или завершить работу. Но, я так сильно был увлечен решением врторой задачи - та что ждёт ответа от юзера, что не заметил самого главного. Програмка кидала один кубик с 11-ю рёбрами... надо исправить :)<div><br />
<a name='more'></a>
Вот старый код
<div class="zloicode"> dice_num = randint(2, 12)
print(dice_num)</div><br />
Мы получаем рандомальное значение от 2 до 12 с одинаковым шансом. Но, если мы будем кидать два кубика то у 12 и 7 будут разные шансы.
Значит нам надо два кубика с рандомальными значениями и потом это дело надо сложить:
<div class="zloicode"> dice_1_num = randint(1, 6)
dice_2_num = randint(1, 6)
print(dice_1_num + dice_2_num)</div><br />
Всё, теперь, вроде, работает :)
</div><div><br /></div><div>Исправленый код <a href="https://github.com/Zlomorda/zloiPython/blob/master/modules/Dice%20Rolling%20Simulator%202.py" target="_blank">ТУТ</a>.</div><div><br /></div><div>И добро пожаловать на мой <a href="https://t.me/zlomordache" target="_blank">Телеграм Канал</a> :)</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-1598764650007803322020-03-24T21:24:00.000+02:002020-04-03T16:47:21.262+03:00Истина и Ложь в Python<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj50oIGb6_4KEmgvYAGKW75ppB2SOX5-a8shEYrsUYizVVAV7vzHYGTg_BqhNWoBZl5Hxjli1-VPddyEGQ6R0Z5Wb-gTp7XQ-0hpqfkxhnopLoFSmrOJa028LMT1oKCZJMUzTp0praFWk8/s1600/96.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="996" data-original-width="1500" height="424" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj50oIGb6_4KEmgvYAGKW75ppB2SOX5-a8shEYrsUYizVVAV7vzHYGTg_BqhNWoBZl5Hxjli1-VPddyEGQ6R0Z5Wb-gTp7XQ-0hpqfkxhnopLoFSmrOJa028LMT1oKCZJMUzTp0praFWk8/s640/96.jpg" width="640" /></a></div>
<style>
.zloicode {
white-space: pre-line;
height: auto;
width: auto;
background-color: black;
color: rgb(211, 211, 211);
font-family: Consolas;
font-size: 15px;
border: 1px solid grey;
padding: 8px;
white-space: pre;
}
</style>
<br />
В питоне Ложь и Истину можно заменить обычными 1 и 0. И это очень круто и удобно. Например для проверки остатка, проверки значения или действия.<br />
<br />
<a name='more'></a>
Задаём значение именам:
<div class="zloicode">x, y, z = 0, 1, 0</div><br />
Python знает что 1 это истина, а 0 это ложь. Значит, что вот такие записи просто не нужны:
<div class="zloicode">if x == 1 or y == 1 or z == 1:
print('Что-то там Истина')</div><br />
Всё можно записать гораздо проще. Python проверит каждое имя, и если хоть в одном будет истина то тогда он будет печатать:
<div class="zloicode">if 1 in (x, y, z):
print('Что-то там Истина')</div><br />
Тоже самое можно записать и так:
<div class="zloicode">if x or y or z:
print('Что-то там Истина')</div><br />
Или так:
<div class="zloicode">if any((x, y, z)):
print('Что-то там Истина')</div><br />
Главное, что это удобно, красиво и просто.Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-28647014835379639122020-03-21T11:50:00.001+02:002020-03-21T11:50:40.196+02:00Кидаем кубики на Python<style>
.zloicode {
white-space: pre-line;
height: auto;
width: auto;
background-color: black;
color: rgb(211, 211, 211);
font-family: Consolas;
font-size: 15px;
border: 1px solid grey;
padding: 8px;
white-space: pre;
}
</style>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyHR2qznJqCLXLQ88q4azvI8nxntwPsVPsZRuUIcfo_Mx9bXnPn69aQkkuifg0mtCgv5DQaerFKjuwBZ3hK7CbynxL0HzG6dMGqo_DENs82p_-pscQ9TzynR3IUIHvy0V_FrZSremRoaU/s1600/654.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="490" data-original-width="700" height="448" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyHR2qznJqCLXLQ88q4azvI8nxntwPsVPsZRuUIcfo_Mx9bXnPn69aQkkuifg0mtCgv5DQaerFKjuwBZ3hK7CbynxL0HzG6dMGqo_DENs82p_-pscQ9TzynR3IUIHvy0V_FrZSremRoaU/s640/654.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: left;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Простая задача... по началу даже не хотел её решать. А потом думаю "Если просто, значит быстро сделаю". В итоге Гугл вскипер от моих запросов о помощи :)</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br />
Что я хотел написать:<br />
1 - Програмка кидает 2 кубика и сразу выдаёт сумму.<br />
2 - Програмка должна ждать ответа от пользователя, что бы продолжить или выйти.<br />
<br />
Как я начал решать:<br />
1 - если програма ждет ответа от пользователя, она должна быть готова работать "вечно". Тоесть кидать кубики пока юзер не захочет выйти. Для этой цели я взяль while loop.<br />
<div class="zloicode">while True:
dice_num = randint(2, 12)
print(dice_num)</div>
<br />
2 - теперь надо "научить" програмку ждать ответа от юзера. Здесь надо было зделать так, что бы кубики "кидались" от нажатия на любую кнопку:
<br />
<div class="zloicode">any_key.getwch()</div>
<br />
В итоге получилось, что вообще не важно на что жмакать, програмка будет кидать кубики. Значит нам нужен еще и IF который будет проверять что именно нажимает юзер. И если будет нажать ESC то програмка закончится.
<br />
<div class="zloicode">if ord(check_any_key) == 27:
break</div>
<br />
Что я узнал:
Как использовать всеми любимый PRESS ANY KEY на благо общества и как проверять эти самые эни кей.<br />
<br />
Полный код на моём <a href="https://github.com/Zlomorda/zloiPython/blob/master/modules/Dice%20Rolling%20Simulator.py" target="_blank">GitHub-e</a>.Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-51029934710468675072020-03-18T21:03:00.003+02:002020-03-18T21:03:52.690+02:00Грокаем Алгоритмы - Адитья Бхаргава<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsdMrnejOXWkyXg20FAKAQtBRLTuvlBupsA_h8ZAI1aCDJhhQH9lsldxgW1H7uKsIsOmNPpU8CoZj8CZCK2P1TH6kUP2ofXsy8GMb2T3givAT9yTBV8Nf7rjsxi7RWCbhKduTuQ8A7yPs/s1600/1037901676.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1028" data-original-width="723" height="640" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsdMrnejOXWkyXg20FAKAQtBRLTuvlBupsA_h8ZAI1aCDJhhQH9lsldxgW1H7uKsIsOmNPpU8CoZj8CZCK2P1TH6kUP2ofXsy8GMb2T3givAT9yTBV8Nf7rjsxi7RWCbhKduTuQ8A7yPs/s640/1037901676.jpg" width="450" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
<b style="text-decoration-line: underline;">Полное название:</b> Грокаем Алгоритмы. Иллюстрированное пособие для программистов и любопытствующих.</div>
<div>
<b><u>Год:</u></b> 2017</div>
<div>
<b><u>Язык программирования:</u></b> Python 2 - но это вообще никакой роли не играет.</div>
<div>
<br /></div>
<div>
Ознакомиться с этой книгой меня заставило любопытство и интерес к программированию. Было бы как-то странно начать учить язык без базового понятия о том как создаются алгоритмы.</div>
<div>
<a name='more'></a>Книга написана на простом языке. На пальцах объясняют логику построения алгоритмов и решения разных интересных задач. Мне, как любителю, было очень интересно ознакомиться с данной темой. Тем более что книга совсем маленькая :)</div>
<div>
<br /></div>
<div>
Немного о книге написано на <a href="https://habr.com/ru/company/piter/blog/323310/" target="_blank">Хабре</a>.</div>
<div>
А взять почитать можно на <a href="https://github.com/mduisenov/GrokkingAlgorithms/blob/master/%D0%91%D1%85%D0%B0%D1%80%D0%B3%D0%B0%D0%B2%D0%B0%20%D0%90.%20-%20%D0%93%D1%80%D0%BE%D0%BA%D0%B0%D0%B5%D0%BC%20%D0%90%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%8B.%20%D0%98%D0%BB%D0%BB%D1%8E%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D0%BE%D0%B5%20%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B8%D0%B5%20%D0%B4%D0%BB%D1%8F%20%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%81%D1%82%D0%BE%D0%B2%20%D0%B8%20%D0%BB%D1%8E%D0%B1%D0%BE%D0%BF%D1%8B%D1%82%D1%81%D1%82%D0%B2%D1%83%D1%89%D0%B8%D1%85%20-%202017.PDF" target="_blank">ГитХабе</a>.</div>
<div>
<br /></div>
<div>
Всем удачи!!</div>
Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-64019694950413968462020-03-15T22:27:00.001+02:002020-03-15T22:27:25.450+02:00Zloi Password Generator v. 1.0<style>
.zloicode {
white-space: pre-line;
height: auto;
width: auto;
background-color: black;
color: rgb(211, 211, 211);
font-family: Consolas;
font-size: 15px;
border: 1px solid grey;
padding: 8px;
white-space: pre;
}
</style>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGvm9Klj8WNLH7yqug-SU_HluxvxXkPC0ArUs37Mhi3hmwtn9MtSrcQ9guO_DFgsSqROKeLGWbloGwP102JpNQUUjDUsu2Mp798RiSzk_6LOrMd85cx6zJ-f3fTagUg133VDa0MLvEdg/s1600/7980.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="901" data-original-width="1600" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRGvm9Klj8WNLH7yqug-SU_HluxvxXkPC0ArUs37Mhi3hmwtn9MtSrcQ9guO_DFgsSqROKeLGWbloGwP102JpNQUUjDUsu2Mp798RiSzk_6LOrMd85cx6zJ-f3fTagUg133VDa0MLvEdg/s640/7980.jpg" width="640" /></a></div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: left;">
Всё, дописал свою версию генератора паролей на Python. Он умеет генерировать три вида паролей:</div>
<div class="separator" style="clear: both; text-align: left;">
</div>
<a name='more'></a><br />
<br />
Высокого уровня:
<br />
<div class="zloicode">from zloipassgen import *
print("".join(passHigh(15)))</div>
Выдаёт: ^+as$17YYQqJ!n1<br />
<br />
Среднего уровня:
<br />
<div class="zloicode">from zloipassgen import *
print("".join(passMed(15)))</div>
Выдаёт: c0W30nZLgw83WfT<br />
<br />
И низкого уровня:
<br />
<div class="zloicode">from zloipassgen import *
print("".join(passLow(15)))</div>
Выдаёт: 646323498653869 - что бы заполнять лотерейку :)<br />
<br />
Файл с кодом на моём <a href="https://github.com/Zlomorda/zloiPython/blob/master/modules/zloipassgen.py" target="_blank">GitHub-e</a> ;)Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-1413908848713592642020-03-11T21:43:00.002+02:002020-04-08T06:57:41.055+03:00Злой Генератор Паролей - Zloi-Pass-Gen v.0.1
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzLM0RSryXQlgmQqjLyZSENeybBIFVxezD34R_T9qoog0fQ55vHOuda7olnnsxISLLZmNz3YSiImeWBxd-y7t7OZdjncN-vwFSBTxdkYsXfBbUWYLSFqc_IgTV342p_jbpDUFgV5URgyM/s1600/password.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="665" data-original-width="1004" height="423" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjzLM0RSryXQlgmQqjLyZSENeybBIFVxezD34R_T9qoog0fQ55vHOuda7olnnsxISLLZmNz3YSiImeWBxd-y7t7OZdjncN-vwFSBTxdkYsXfBbUWYLSFqc_IgTV342p_jbpDUFgV5URgyM/s640/password.png" width="640" /></a></div>
<br />
Я захотел написать свой генератор паролей. Начал с маленького... пароли состоящие только из цифр.<br />
<br />
Что мне было интересно реализовать:<br />
1 - Длину (абсолютно любую) пароля должен задавать пользователь.<br />
2 - Задать функцию которая будет генерировать пароль.<br />
3 - Вывод строки (готовый пароль) без скобок и запятых.<br />
4 - Предложить пользователю изменить длину пароля или сам пароль<br />
<a name='more'></a><br />
Пользователь задаёт длину пароля. Также можно задать и 0 - тогда генератор выдаст пустую строку... труЪ энд ивэл!!
<div class="zloicode">len = int(input("Enter password length: "))</div><br />
Сама функция. Принимает длину пароля и в этом приделе раскидывает цифры от 0 до 9. В паролях до 10-и знаков цифры могут повторяться.
<div class="zloicode">def password(len):
for x in range(len):
lis.append(randint(0, 9))</div><br />
Выдаёт строку без скобок и запятых.
<div class="zloicode">print(*lis, sep="")</div><br />
А дальше серия вопросов к пользователю о дальнейших действиях.
Весь код:
<div class="zloicode">from random import randint
lis = []
len = int(input("Enter password length: "))
def password(len):
for x in range(len):
lis.append(randint(0, 9))
password(len)
print(*lis, sep="")
vopros = int(
input("What to do next?: \n1 - Change password: \n2 - Change password length:<br /> \nAny num + Enter to Exit\n"))
while vopros:
lis = []
if vopros == 1:
password(len)
print(*lis, sep="")
elif vopros == 2:
len = int(input("Enter password length: "))
password(len)
print(*lis, sep="")
else:
print("Enjoy!")
break
vopros = int(input("What to do next?: "))</div><br />
В этой версии я смог реализовать всё что мне было интересно на первых парах. В дальнейшем я буду его учить генерировать сложные пароли исходя из предпочтений пользователя.<br /><br />
Да, можно взять уже готовый варианты... или даже сам Хром всё прекрасно генерирует и сохраняет. Но, это же так не интересно :)Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0tag:blogger.com,1999:blog-4983541525392660933.post-16062923008490355732020-03-05T23:27:00.001+02:002020-03-05T23:41:02.818+02:00Проект Эйлера - Задача 6<style>
.zloicode {
white-space: pre-line;
height: auto;
width: auto;
background-color: black;
color: rgb(211, 211, 211);
font-family: Consolas;
font-size: 15px;
border: 1px solid grey;
padding-left: 8px;
padding-bottom: 5px;
white-space: pre;
}
</style>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFMlicNQJk1ddKi1xLiAx5w0B8FjvMsZcWBUfbxzpEVFnaKVrGyVij0kSIds-eSLnXt-P7N1QQU3Q5_tS9q8tFehKrufXH_wDoQMf1tngSoRrhAsGwh15mw6QLvynaED0ZuxcmBB1jLo4/s1600/logo.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="256" data-original-width="890" height="184" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFMlicNQJk1ddKi1xLiAx5w0B8FjvMsZcWBUfbxzpEVFnaKVrGyVij0kSIds-eSLnXt-P7N1QQU3Q5_tS9q8tFehKrufXH_wDoQMf1tngSoRrhAsGwh15mw6QLvynaED0ZuxcmBB1jLo4/s640/logo.jpg" width="640" /></a></div>
Разность между суммой квадратов и квадратом суммы<br />
<br />
Сумма квадратов первых десяти натуральных чисел равна<br />
<span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;">1</span><sup style="font-family: Geneva, Arial, Helvetica, sans-serif; text-align: center;">2</sup><span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;"> + 2</span><sup style="font-family: Geneva, Arial, Helvetica, sans-serif; text-align: center;">2</sup><span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;"> + ... + 10</span><sup style="font-family: Geneva, Arial, Helvetica, sans-serif; text-align: center;">2</sup><span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;"> = 385</span><br />
<br />
Квадрат суммы первых десяти натуральных чисел равен<br />
<span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;">(1 + 2 + ... + 10)</span><sup style="font-family: geneva, arial, helvetica, sans-serif; text-align: center;">2</sup><span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;"> = 55</span><sup style="font-family: geneva, arial, helvetica, sans-serif; text-align: center;">2</sup><span style="font-family: "geneva" , "arial" , "helvetica" , sans-serif; font-size: 14px; text-align: center;"> = 3025</span><br />
<br />
Следовательно, разность между суммой квадратов и квадратом суммы первых десяти натуральных чисел составляет 3025 − 385 = 2640.<br />
<br />
Найдите разность между суммой квадратов и квадратом суммы первых ста натуральных чисел.<br />
<br />
<div>
Моё решение на Python:</div>
<div>
<a name='more'></a>Хорошая и приятная задача. Но и здесь есть над чем подумать. В начале я её решил с помощью двух форов... а можно было еще и листы написать.</div>
<div>
<br /></div>
Две переменные. Сумма квадратов и квадрат суммы.
Задаём предел от 1 и до 101 (101 не учитывается).
Для проверки можно задать предел от 1 до 11 - получим 2640 как в примере.
<br />
<div class="zloicode">
sum1 = 0
sum2 = 0
for x in range(1, 101):
sum1 += x ** 2
sum2 += x
sum2 **= 2
total = sum2 - sum1
print(total)</div><br />
В итоге прошраммка выдаёт 25164150.
<br /><br />
Я так решил.
Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com7tag:blogger.com,1999:blog-4983541525392660933.post-24975832057294806422020-03-05T11:52:00.002+02:002020-04-09T09:39:18.440+03:00Алгоритм Бинарного Поиска на Python
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk1pE5mwaXtaz2nj1NpWwE99-ndc-gfXZEguXp8_f6M7O2N8zrSf0Th6mxvC_vjDfl1sI2a6oI_XzqvgTgJ1yMda00GX9a_G0BviJ5yXeaY4lWU73OWTQaR1Umi2PrxcPwHJriDkzcfug/s1600/Binary-Search.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="891" data-original-width="1600" height="356" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjk1pE5mwaXtaz2nj1NpWwE99-ndc-gfXZEguXp8_f6M7O2N8zrSf0Th6mxvC_vjDfl1sI2a6oI_XzqvgTgJ1yMda00GX9a_G0BviJ5yXeaY4lWU73OWTQaR1Umi2PrxcPwHJriDkzcfug/s640/Binary-Search.png" width="640" /></a></div>
<br />
О том что это такое можно почитать вот <a href="https://www.google.com/search?q=Binary+search&source=lmns&bih=969&biw=1920&hl=en&ved=2ahUKEwiuwpHr_oLoAhXP44UKHZaGDmgQ_AUoAHoECAEQAA" target="_blank">ЗДЕСЬ</a>. Мой пост о самом алгоритме. Мне было интересно написать и проверить этот алгоритм. Это алгоритм поиска, прикол в том, что если мы увеличиваем наш список вдвое, то количество поисковых запросов увеличивается на 1.<br />
<br />
<div style="text-align: center;">
Длина списка 20 - макс. кол. запросов 4</div>
<div style="text-align: center;">
Длина списка 40 - макс. кол. запросов 5</div>
<div style="text-align: center;">
Длина списка 80 - макс. кол. запросов 6</div>
<div style="text-align: center;">
И так далее...</div>
<br />
<span style="text-align: center;">Получается, что абсолютно не важно как много номеров в вашей телефонной книге, ваш телефончик моментально всё найдёт.</span><br />
<div>
<a name='more'></a>
<br />Я его написал вот так (гугл тоже помогал :) ):<br />
<br />
Я импортировал Randint для рандомального разброса чисел и задал переменные. Так же мне было интересно поработать с форматированием текста:<br />
<br /></div>
<div class="zloicode">from random import randint
lis = []
y = 0
txt = "Есть контакт!! Что что вы искали находится на {} месте."
txt2 = "Количество попыток поиска: {}"</div><br />
Затем создаём сам список. Так же можно задать длину списка. Это я сделал для того, что бы можно было посмотреть как быстро производится поиск в зависимости от длины списка.
<div class="zloicode">dlinnaSpiska = int(input("Какова длина списка? "))
for x in range(dlinnaSpiska):
lis.append(randint(1, dlinnaSpiska + 1))
lis.sort()</div><br />
Затем мы задаём число которое надо найти. Первый же if проверяет если наше число не выходит за рамки списка. Если оно не в рамках то какой смысл продолжать? А если оно таки в рамках списка то тогда идёт разбор списка по минимум, максимум и середине.
<div class="zloicode">if iskat < lis[0] or iskat > lis[dlinnaSpiska - 1]:
print("Нет такого слова в этой букве!")
else:
dlinna = len(lis)
mini = 0
maxi = dlinna - 1
midi = dlinna // 2</div><br />
Далее идёт сам алгоритм поиска. При каждом запросе отсеивается половина списка. Какую половину отсеивать, большую или меньшую, решается в зависимости от положения нашего числа от середины списка. И если в конечном итоге наше число будет в середине - значит алгоритм его нашел. В противном случаем программа скажет что его нет в списке.
<div class="zloicode"> while lis[mini] <= lis[maxi] and iskat != lis[midi]:
if iskat > lis[midi]:
mini = midi + 1
else:
maxi = midi - 1
midi = (mini + maxi) // 2
y += 1</div><br />
После того как алгоритм прошелся по списку, мы получаем ответ. Если ответ положительный то программа скажет на каком месте в списке находится наше число. А если отрицательный - то увы и ах. В любом случае программа скажет сколько запросов она совершила.
<div class="zloicode"> if mini > maxi:
print("Нет такого слова в этой букве!")
print(txt2.format(y))
else:
place = midi
print(txt.format(place))
print(txt2.format(y))</div><br />
И весь код целиком:
<div class="zloicode">from random import randint
lis = []
y = 0
txt = "Есть контакт!! Что что вы искали находится на {} месте."
txt2 = "Количество попыток поиска: {}"
dlinnaSpiska = int(input("Какова длина списка? "))
for x in range(dlinnaSpiska):
lis.append(randint(1, dlinnaSpiska + 1))
lis.sort()
iskat = int(input("Какое число искать? "))
if iskat < lis[0] or iskat > lis[dlinnaSpiska - 1]:
print("Нет такого слова в этой букве!")
else:
dlinna = len(lis)
mini = 0
maxi = dlinna - 1
midi = dlinna // 2
while lis[mini] <= lis[maxi] and iskat != lis[midi]:
if iskat > lis[midi]:
mini = midi + 1
else:
maxi = midi - 1
midi = (mini + maxi) // 2
y += 1
if mini > maxi:
print("Нет такого слова в этой букве!")
print(txt2.format(y))
else:
place = midi
print(txt.format(place))
print(txt2.format(y))</div>Zlomordahttp://www.blogger.com/profile/13933538290771841163noreply@blogger.com0