argon bulletin board
Факултети => Факултет по математика и информатика => Темата е започната от: artanis в 19.11.2004, 11:19:00
-
Здравейте колеги,
Преди време започнахме една тема (с г-н Цуйка най-вече) за питон и пърл. Аз ще пускам във форума някои неща на пърл, а призовавам Цуйка да праща техните еквиваленти на питон.
С този код се отваря файл, чете се съдържанието му и се изписва на екрана.
----------------------------------------------
open(F, "xxxxxxx.txt") or die("Ne moga da namerq faila");
while(<F> )
{
......$line=$_;
......print $line;
#moje i samo: print $_;
#moje i samo: print;
}
close(F);
----------------------------------------------
поздрави:
Атанас Чанев
Роверето, Италия
[This message has been edited by artanis (edited 19-11-2004).]
[This message has been edited by artanis (edited 22-11-2004).]
-
try:
....for row in file('blah.txt', 'r'):
........print row,
except IOError, err:
....print "something baaaaad happened... examine err for details"
Reference counting а ще затвори файла автоматично след тялото на цикъла или ако се метне exception. Иначе за по-ясно (за жаварите, дето обичат всичко да е ясно, точно и по спецификация) може и така:
fsock = None
try:
....fsock = file('blah.txt', 'r')
....for row in fsock:
........print row
finally:
....if fsock is not None:
........fsock.close()
Ако в try блока възникне изключение то ще се raise не отново, след като се изпълни finally клаузата. В Pyton не може да комбинирате except и finally в един try блок - трябва или едното или другото. Това на пръв поглед си е жив limitation, обаче като се замисли човек reraise натия exception може да се хване с външен try...except блок в доста по...хм как да го кажа... обобщен контекст, който съдържа няколко try...finally блока.
поздрави:
Цуйка
Красно Село, в едно друго, по-голямо село :)
-
<BLOCKQUOTE><font size="1" face="">quote:</font><HR><font face="" size="2">Originally posted by Phyz:
Красно Село, в едно друго, по-голямо село (http://forum.argon.acad.bg/html/smile.gif)[/B]</font><HR></blockquote>
Градацията си я бива, г-н [Phiz]! Макар и кв. "Красно село" да е приличен столичен квартал (така казват; лично аз съм живял в "Гео Милев").
Не wзимам страна в спора, кои от двата езика е по-добър, понеже не съм компетентен, но това ми напомня за следната история. Един мой съученик оt гимназията решаваше всички поставени задачи по геометрия само с подобие. И успяваше, само че си представете, какво досещане и писане трябwа
за да се докаже, примерно, някоя метрична зависимост.
Но съм сигурен в едно (i to bez da razbiram ot programirane): и двата езика имат недостатъци; единият прави
нещо по-добре от другия (вкючването тук е комутативно!), понеже е валиден философскияt принцип:
"Щастието на едни се крепи на нещастието на други", а щом е философски значи е всеобщ!
Ще следя с интерес състезанието wи.
Въпрос: има ли написани програма на Pyton или на Perl, проверяwаща дали даден полиниом е неразложим над дадено поле?
Ако има можете ли да проверите дали [x^6-6x^4-4x^3+12x^2-24x-4=0] е неразложим над [Q]?
Ако това е вярно, така ще докажете, че [ [Q(koren 3. ot 2, koren ot 2):Q(koren ot 2)]=3 и в частност
теоремата за примитивния елемент.
С поздрав:
Nikolay D.
Послепис
"Всички гении се раждат в провинцията и умират в столицата"
Isaac Asimov
[This message has been edited by Nikolay (edited 19-11-2004).]
-
Регулярни изрази.
Тази малка програма беше създадена, за да се извлекат всички думи от един анотиран корпус. За всяка дума във файла беше отделен един ред. Редът има вида:
нещо празно_място х празно_място нещо празно_място ДУМА празно_място нещо
х е който и да е символ. Нещо е поредица от символи без интервал.
------------------------------------------------------
open(F, "aSpecificCorpus.cps") or die("cannot find file!");
while(<F> )
{
......$line=$_;
......if($line =~ m/\s.\s(\S*)\s(\S*)\s/)
......{
.........print $2, " ";
#$2 съдържа това, което е във вторите скоби в регулярния израз
......}
}
close F;
------------------------------------------------------
поздрави!
послепис:
Тъй като не помня точно каква нотация се използва в корпуса, как изглежда реда съм дал само ориентировъчно. Ако някой намери по-прост регулярен израз, който може да бъде използван за извличане на думата, моля да го сподели във форума.
[This message has been edited by artanis (edited 22-11-2004).]
[This message has been edited by artanis (edited 22-11-2004).]
-
Така като гледам, това което всъщност представлява реда е поредица от елементи разделени с интервал. Значи мога просто да си split() на реда по интервалите и да взема четвъртия елемент, който всъщност е думата. Значи ако имам реда в променливата row, мога да взема четвъртия елемент с row.split(' ')[3]. Сега трябва да натикам по някакъв начин редовете в row. Най лесно може да стане така:
[row for row in file('aSpecificCorpus.cps', 'r')]
Това ще ми върне списък с всички редове от файла. А ако го преобразувам така:
[row.split(' ')[3] for row in file('aSpecificCorpus.cps', 'r')]
ще ми върне списък с всички ДУМИ от файла. И сега остава само да го отпечатам с метода string.join() (който взима като параметър списък с низове и връща низ, който е съставен от конкатениране на всички низове в списъка, разделени с приложения разделител)
print "\n".join([row.split(' ')[3] for row in file('aSpecificCorpus.cps', 'r')])
В случая разделителя е "\n", т.е. нов ред - значи ще ми се отпечата всяка дума на нов ред.
А ако толкова държиш на RegExp ове:
import re
wordPattern = re.compile(r'^(\S+)\s.\s(\S+)\s(\S+)\s(\S+)$')
try:
...for row in file('aSpecificCorpus.cps', 'r'):
......match = wordPattern.search(row.strip())
......if match is not None:
.........print match.groups()[2]
except IOError, err:
...print "Booom!!!....:)))"
Не знам за тебе, обаче на мен това горното ми се вижда достa по-чисто и ясно...:) Абсолютно изпълним псевдокод :) Направо кеф ми прави да си го чета :)
Между другото не разбирам много много от RegExps... това горното си го направих с kregexpeditor и си нямам идея колко е вярно.
Nikolay бъзикам се бе :) и мен си ме кефи Красно Село. А от advanced математика много много не отбирам... Всъщност сигурно отбирам поне малко, обаче само интуитивно и не знам имената на отделните неща... така че си нямам на идея за какво точно ми говориш...
Айде със здраве... извинявай, че се забавих толкова ама съм бая зает тези дни.
-
Здравейте Phyz,
Доста елегантно решение на проблема в един ред. По този начин биха могли да бъдат извлечени думите или каквато и да е информация (граматична, синтактична, семантична) от който и да е груб корпус, който е парснат с FDG парсера ( http://www.connexor.com/ (http://www.connexor.com/) )
Не разбрах само какво правят методите strip() и groups()[2] . Предполагам, че първият премахва символа за нов ред от края на стринга (както функцията chomp() в пърл ) но за втория не съм много сигурен. Бихте ли пояснили. Благодаря предварително.
Колкото до математическите задачи на Николай - би могла да съществува такава програма. Или да бъде написана, ако някой има такава нужда от нея, че е готов да плати много пари. (шегувам се maths is cool (http://forum.argon.acad.bg/html/wink.gif) )
сърдечни поздрави (особено за Phyz и К. в Красно Село):
Атанас Чанев
Роверето, Италия
-
[Pyton -><- Perl....or Gap? (for Algebra only!)]
Здравейте, [Artanis] и [Phyz]!
Задачата, която написах е вече решена чрез [GAP - Groups, Algorithms, Programming -
a System for Computational Discrete Algebra, !]http://www.gap-system.org/]! (http://www.gap-system.org/)
Точно тук е местото да препоръчам [GAP] на онези от вас, които се занимават
с алгебра. Софтуерният пакет е напълно безплатен, [freeware] и съдържа много библиотеки.
В доста университети [Abstract Algebra] се преподава именно чрез [GAP].
Смятам, че ще е от полза!
С поздрав:
[Nikolay D.]
24.11.2004
[Munich, Germany]
-
г-н Дичев,
Мисля, че тук не е мЕстото да препоръчвате система за изчислителна дискретна алгебра, тъй като хората, които четат тази тема очакват да намерят малко по-различни неща.
Защо не помислите да отворите нова тема? В бъдеще Ви моля да не пишете за алгебра в тази (освен ако нямате някакво интересно решение на задача от алгебрата, написано на пърл или питон). Благодаря Ви предварително!
Извинявам се за този пост, който очевидно няма нищо общо с темата.
поздрави
-
Имате право.
Извинявам се.
[N.D.]
-
Тази функция проверява дали някаква дума (символен низ) съвпада с някаква друга дума (символен низ), която се съдържа в масив.
-----------------------------------------
sub ishere
{
...my $ret = 0;
...my $word = shift;
...my @mass = @_;
...foreach(@mass)
...{
......if($word eq $_)
......{
.........$ret = 1;
......}
...}
...return $ret;
}
-----------------------------------------
Думата е първият параметър на функцията, а масивът - вторият.
поздрави:
Атанас Чанев
[This message has been edited by artanis (edited 06-12-2004).]
-
def in_array(needle, haystack):
...if needle in haystack : return True
...else : return False
[This message has been edited by sasquatch (edited 07-12-2004).]
-
Здравейте колеги,
Понеже ми се наложи да потърся някои неща за пърл, забелязах че има разни трикове от сорта на елегантния ред на Phyz на питон. Функции като split и join съществуват и в пърл. Както и други неща, които се побират в един ред.
Може би нямам достатъчно опит, за да посоча предимствата на пърл. Просто използвам неща, които ми вършат работа (но може и да се науча с течение на времето).
поздрави:
Атанас Чанев
Роверето, Италия
-
quote:
Originally posted by sasquatch:
def in_array(needle, haystack):
...if needle in haystack : return True
...else : return False
[This message has been edited by sasquatch (edited 07-12-2004).]
sasquatch ти си нагъл, ама аз съм по нагъл:
def in_array(needle, haystack):
...return needle in haystack
хехе (http://forum.argon.acad.bg/html/smile.gif)))
-
Тоя пост беше грешка ...
[This message has been edited by sasquatch (edited 09-12-2004).]
-
>sasquatch ти си нагъл, ама аз съм по нагъл:
>def in_array(needle, haystack):
>...return needle in haystack
>хехе (http://forum.argon.acad.bg/html/smile.gif)))
Е ся, като за човек който не може да програмира на Python не е зле (http://forum.argon.acad.bg/html/smile.gif)
[This message has been edited by sasquatch (edited 09-12-2004).]
-
Здравейте колеги,
Беше ми много интересно да разбера, че пърл не поддържа многомерни масиви. Начинът по който се реализират е доста интересен. Прави се масив от референции към други масиви. Ще ми бъде интересно да разбера как този въпрос е решен в питон.
поздрави:
Атанас Чанев
Роверето, Италия
-
В Python има списъци, спокойно може да напишеш:
>>>list = [[1, 2, 3], [1, 2, 3, [1, 2, 3]]]
и получаваш еквивалент на многомерен масив. Списъците си имат методи за вмъкване, триене, добавяне и така нататък.
-
Здравейте,
sasquatch, как мога да вмъкна нещо на точно определено място в списъка на питон. Или да извикам точно определен елемент. В пърл синтаксисът на вмъкването е малко странен (с push), а обръщането към елемент става с $arr[$x]->[$y]-> ...
поздрави:
Атанас Чанев
Роверето, Италия
-
artanis в Python има една много-полезна вградена функция - dir(object), която ти връща списък с всички атрибути (методи и полета) на някакъв обект. В интерпретатора напиши:
>>> dir([]) # атрибутите на обект от тип списък
и ще видиш всичките му методи. Тези, които са с имена __method__ (с двойни подчеравки) са служебни (не, че не може да си ги викаш директно, но те се викат автоматично в някои случаи). Теб те интересуват тези, които са с нормални имена - а именно insert, pop, sort и т.н. Можеш да направиш така:
>>> print '\n'.join([attr for attr in dir(ob) if attr.find('__') == -1])
Това ще ти даде само нормалните атрибути на обекта ob. После за всеки атрибут можеш да си видиш т.нар. doc низ:
>>> print [].insert.__doc__
Така можеш за всеки непознат обект да разбереш какво може да прави директно от командния ред без да се ровиш в документацията.
Можеш примерно да си запишеш всички атрибути с описанията им във файлче:
ob = []
attributes = [attr for attr in dir(ob) if attr.find('__') == -1]
f = file('blah.txt', 'w')
for attr in attributes:
...f.write('%s - %s\n----\n' % (attr, getattr(ob, attr).__doc__))
f.close()
Пробвай и функцията:
>>> help(list)
или само
>>> help()
-
http://www.linux-bg.org/cgi-bin/y/index.pl?page=news&key=367733313 (http://www.linux-bg.org/cgi-bin/y/index.pl?page=news&key=367733313) (http://forum.argon.acad.bg/html/smile.gif)
-
Тея направо убиха змея в полет (http://forum.argon.acad.bg/html/smile.gif)
-
Phyz,
Знаеш ли как се ползва библиотеката calldll в пайтън? Благодаря предварително за отговора.
поздрави:
Атанас Чанев