Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение кода Perl и Python 
:(
    Опции темы
shutffl
Дата 9.7.2010, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Доброго времени суток!!

Решил тут на досуге поковырять таки python.. Для примера решил написать любимую утилитку админа - пассгенератор.. Косо не смотреть.. Я подобное на web-сервак кидаю и генерю пассы для себя и знакомых для разных ресурсов.. В свое время пасс для WoW делал другу как cat /dev/urandom с поледующей выборкой..

К сути.. Вот два аналогичных куска на perl и python.. Python я практически не знаю - только начал присматриваться к нему..

Код

#!/usr/bin/env perl

use strict;
use warnings;

my $alpha = ("qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890-=!@#\$%^&*()_+[]{};':\",./<>?");
my $pass_count = 10;
my $pass_len = 10;

for (my $i=0; $i < $pass_count; $i++) {
    my $pass;
    for (my $j=0; $j < $pass_len; $j++) {
        $pass .= substr($alpha, rand(length($alpha)+1), 1);
    }
    print "#$i: $pass\n";
}


Код

#!/usr/bin/env python

import string
import random

pass_len = 10
pass_count = 10

alpha = string.lowercase[:] + string.uppercase[:] + '1234567890!@#$%^&*()-=_+[]{};\':"<>,./?'

i=0
j=0
new_pass = ""

while (i < pass_count):
    while (j < pass_len):
        new_pass += random.choice(alpha)
        j += 1
    print str(i) + ": " + new_pass
    new_pass = ""
    i += 1
    j = 0


Что-то мне в python не нра j = 0 и подобное.. Знатоки, подскажите более короткую версию python-скрипта, плз.. На самом деле к django присматриваюсь постепенно.. Ибо Google да и <censored>Яндекс.. Да и вообще на python сейчас много чего пишется.. Даж на N900 уже PyQt4 портировали..

Собсна для себя пытаюсь решать: копаться с python или дальше Catalyst изучать..

Заранее спасибо!!

P.S. Понимаю, что это общий раздел по python, но уж очень все связано..

Добавлено через 11 минут и 27 секунд
Вот более короткий вариант для python:
Код

#!/usr/bin/env python

import string
import random

pass_len = 10
pass_count = 10
new_pass = ""
alpha = string.lowercase[:] + string.uppercase[:] + '1234567890!@#$%^&*()-=_+[]{};\':"<>,./?'

for i in range(pass_count+1) :
    for j in range(pass_len+1):
        new_pass += random.choice(alpha)
    print str(i) + ": " + new_pass
    new_pass = ""

--------------------
shadowmoon
PM MAIL   Вверх
Daevaorn
Дата 9.7.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Например можно так упростить:

Код

#!/usr/bin/env python

import string
import random

pass_len = 10
pass_count = 10

for i in range(pass_count):
    print '%s: %s' % (i, ''.join([random.choice(string.printable)\
                                        for __ in range(pass_len)]))

PM MAIL WWW   Вверх
shutffl
Дата 9.7.2010, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Нифига се упрощение ((, Попахивает perl ((,

/me думает..

Добавлено через 2 минуты и 57 секунд
Так.. А "__" - это как $_ в perl?? То есть текущая переменная.. В данном случае ''.join... ??

Добавлено через 11 минут и 50 секунд
За string.printable отдельное спасибо!!
--------------------
shadowmoon
PM MAIL   Вверх
Daevaorn
Дата 9.7.2010, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: 9
Всего: 70



Цитата(shutffl @  9.7.2010,  14:38 Найти цитируемый пост)
А "__" - это как $_ в perl?? То есть текущая переменная.. В данном случае ''.join... ??

Нет, это просто плейсхолдер ненужной переменной. В for всегда надо указывать переменную счетчика, но поскольку она не участвует нигде в логике кода, то её принято заменять на "_". В принципе можно использовать любой идентификатор.
PM MAIL WWW   Вверх
shupg
Дата 9.7.2010, 16:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 21.6.2006

Репутация: 2
Всего: 2



Слегка попроще..

Код

for i in xrange(pass_len):
    print '%s: %s' % (i, ''.join(random.sample(string.printable, pass_len)))


PM MAIL   Вверх
chaos
Дата 13.7.2010, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



Цитата(shutffl @  9.7.2010,  10:38 Найти цитируемый пост)
За string.printable отдельное спасибо!!

в перл "подобное" можно изобразить следующим образом
Код

print 'a'..'z', 'A'..'Z', 0..9, split(//, "!@#$%^&*()_+~");


+ вот еще более "крутой" вариант  smile
Код

print grep /^[[:print:]]$/, map chr($_), 0..127;


PS люблю я чорт возьми тебя перл 

Это сообщение отредактировал(а) chaos - 13.7.2010, 08:25
PM WWW   Вверх
chaos
Дата 13.7.2010, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



Цитата(shupg @ 9.7.2010,  13:14)
Слегка попроще..

Код

for i in xrange(pass_len):
    print '%s: %s' % (i, ''.join(random.sample(string.printable, pass_len)))

Код

my $pass_len = 10;

my @abc = grep /^[[:print:]]$/, map chr($_), 0..127;
print join "", @abc[map rand @abc, 1..$pass_len];


касательно темы: имхо если писать что-то большое, то Python тк большой объем кода на Perl спустя какое-то время выглядит как набор букавок
Если писать маленькие утилитки типо passgen, то безразницы

ЗЫ
Код

Python 3.1.1 (r311:74483, Aug 17 2009, 17:02:12) [MSC v.1500 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> import string
>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

смущают символы \t\n\r\x0b\x0c

Это сообщение отредактировал(а) chaos - 13.7.2010, 09:38
PM WWW   Вверх
gcc
Дата 13.7.2010, 10:56 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: нет
Всего: 17



еще вариант: smile 

Код

$ perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x20'



Это сообщение отредактировал(а) gcc - 13.7.2010, 11:08
PM WWW ICQ Skype GTalk Jabber   Вверх
shutffl
Дата 13.7.2010, 13:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 18.8.2008

Репутация: нет
Всего: 3



Цитата(chaos @  13.7.2010,  09:10 Найти цитируемый пост)
смущают символы \t\n\r\x0b\x0c

Угу.. То-то я смотрю у меня в Linux какие-то строчки пустые.. С другой стороны, это не так критично в данном случае.. Да и проверку никто не мешает делать..

В общем, попробовал я python еще немного.. Из perl-сообщества, перешедших на python, как и у меня было ощущение, что что-то не так?? Я никак не могу привыкнуть, если често.. Видимо, на perl слишком много пишу.. Напрашивается вопрос: а оно того стоит?? В смысле python.. Мне знакомый еще пять лет назад говорил, что стоит python поизучать.. Да как-то не до того было.. Да и perl всем устраивает.. Только вот теперь, судя по веяниям современности, "мы" боремся не за качество и поддержу, а за скорость разработки..

Каково ваше мнение??
--------------------
shadowmoon
PM MAIL   Вверх
chaos
Дата 13.7.2010, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 2
Всего: 44



мне перл нравится своими библами "из коробки"
Частая задача: загрузить веб-форму, заполнить поля, приатачить файло если надо и "кликнуть" submit.
делать это можно без малейшего знания что такое HTML, HTTP и тп.

На питоне подобного сделать не удалось - надо подтягивать стронние библы или это получается не так приятно как на перле
 smile 

Это сообщение отредактировал(а) chaos - 13.7.2010, 14:02
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Python: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1044 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.