Witam,
Muszę na zaliczenie wykonać stronę, a dokładniej "Napisać skrypt realizujący internetowy słownik". Skrypt ma być w języku Python, nigdy czegoś takiego nie robiłem i nie bardzo wiem jak się za to zabrać. Tzn kompletnie nie mam pojęcia jak się pisze takie skrypty, aby było to widoczne z przeglądarki i nie bardzo mogę cokolwiek znaleźć w sieci (tutorial od podstaw). Jeśli już to po angielsku jakiś manual. Znalazłem coś takiego http://python.about.com/od/cgiformswithpython/ss/pycgitut2_all.htm kopiowałem fragmenty kodu przedstawione tam na stronie do pliku.py wrzucałem na serwer i odpalałem, niestety z marnym efektem, oto efekt http://matrix.umcs.lublin.pl/~lobara/strona.py .
Nie proszę tutaj o rozwiązanie zadania czyli jak zrobić taki słownik tylko, jedynie o jakieś wprowadzenie do pisania takich stron, pisałem trochę w php i tam się robi to jakoś zupełnie inaczej, teraz w tym semestrze mamy przedmiot aplikacje sieciowe i tam w Javie robimy różne rzeczy sieciowe. Jak już ogarnę zasady to z samym algorytmem takiej aplikacji raczej sobie poradzę. Ewentualnie o informację jak zrobić aby np w adresie było coś takiego "slownik.py?slowo=zamek" rozumiem, że to jakieś zmienne przekazywane do funkcji, ale to już później;)
Z góry dzięki
Błąd to "IndentationError: unexpected indent". Wpisz sobie to szanowny panie w Google i sprawdź co to znaczy.
Python opiera się na wcięciach, zamiast klamrach, do oznaczania zagnieżdżenia instrukcji.
Np zamiast: if (warunek) { rób(); } instrukcja po ifie
w Pythonie trzeba zrobić dokładnie tak:
if warunek:
<odstęp>rób()
instrukcja po ifie
Hmm ale ogólnie składnie znam Pythona, pisałem trochę w tamtym semestrze, ale to tak odpalane lokalnie z kompa. Nie wiem tylko jak wstawić taki kod w stronę. W PHP jest łatwo bo pisze się normalnie w HTML wstawiając od czasu do czasu kod <?php ?> A tutaj to nie wiem jak się to robi. W jakiś funkcjach? Może jakaś główna funkcja jest, która musi mieć specyficzną nazwę, bo bardzo często zdarza mi się tak, że w ogóle nie widzi pliku jak coś pozmieniam i błąd 404. Nie wiem czy fragmenty html przechodzą przez interpreter Pythona czy jak się to tak jak w PHP. Kiedyś to pisaliśmy mniej więcej takie rzeczy i na takim etapie jestem, że odpalam np taki plik interpreterem i coś się dzieje
from math import *
import math
class Wektor(object):
def __init__(self, dlugosc): #konstruktor
self.d = dlugosc
def __str__(self): #to sting
wynik = "["
licznik=0
for element in self.d:
wynik += `element`
if(licznik != len(self)-1):
wynik += ", "
licznik += 1
wynik += "]"
return wynik
def __iadd__(self, o): #dodawanie w miejscu +=
try:
if len(self) == len(o):
for i in range(len(self)):
self[i] = self[i] + o[i]
return Wektor(self)
raise RuntimeError, 'wektory są różnej długości!'
except RuntimeError, error:
print error
def __isub__(self, o): #odejmowanie w miejscu -=
try:
if len(self) == len(o):
for i in range(len(self)):
self.d[i] = self[i] - o[i]
return self
raise RuntimeError, 'wektory są różnej długości!'
except RuntimeError, error:
print error
def __imul__(self, o): #mnożenie w miejscu *=
wsp = []
if isinstance(o, Wektor):
try:
if len(self) == len(o):
for i in range(len(self)):
wsp.append(self[i] * o[i])
return sum(wsp)
raise RuntimeError, 'wektory są różnej długości!'
except RuntimeError, error:
print error
else:
for i in range(len(self.d)):
self[i] *= o
return self
def __add__(self, o): #dodawanie +
lista = []
try:
if len(self) == len(o):
for i in range(len(self)):
lista.append(self[i] + o[i])
return Wektor(lista)
raise RuntimeError, 'wektory są różnej długości!'
except RuntimeError, error:
print error
def __sub__(self, o): #odejmowanie -
lista = []
try:
if len(self) == len(o):
for i in range(len(self)):
lista.append(self[i] - o[i])
return Wektor(lista)
raise RuntimeError, 'wektory są różnej długości!'
except RuntimeError, error:
print error
def __mul__(self, o): #mnożenie *
lista = []
if isinstance(o, Wektor):
try:
if len(self) == len(o):
for i in range(len(self)):
lista.append(self[i] * o[i])
return sum(lista)
raise RuntimeError, 'wektory są różnej długości!'
except RuntimeError, error:
print error
else:
for i in range(len(self.d)):
lista.append(self[i] * o)
return Wektor(lista)
def norma(self): #norma wektora
norma = 0.0
for i in range(len(self)):
norma += math.pow(self[i], 2)
return sqrt(norma)
def __len__(self): #długość wektora
return len(self.d)
def __getitem__(self, index): #zwracanie składowej wektora
return self.d[index]
def __setitem__(self, index, item): #ustawianie składowej wektora
self.d[index] = item
def main():
#TESTY:
w = Wektor([10, 10, 4, 6, 9, 10])
print w
u = Wektor([1,2,3,4])
print u.norma()
w.norma()
d = Wektor([1, 3, 5, 7, 2, 42])
c = w+d
print w
print d
print c
w = w-d
w = w*2
w.norma()
i = w + d
i[3] = 200
print i[3]
w[2] = 100
print w[2]
print i
print w[2]
k = i
k[4] = 9
print k
print k * i
a = Wektor([1, 2, 3, 4])
b = Wektor([2, 3, 4, 4])
print a * b
k = Wektor([1, 1, 1])
j = a + k
print j
if __name__ == '__main__':
main()
To jak tworzysz skrypty zależy od tego z jakich bibliotek/ frameworków/ etc korzystasz. Przykładowo kod:
print '<html>dupa</html'
Wypluwa kod HTMLowy na standardowe wyjście. Ty nie chcesz mieć tego na standardowym wyjściu, tylko chcesz to wysłać do klienta. A więc musisz zrobić to inaczej, np użyć http://docs.python.org/2/library/basehttpserver.html
O kurcze to chyba trudniejsze niż myślałem...
A czy mógłbyś podać jakiś krótki fragment kodu który jakoś się odpali i zrobi coś na stronie? Jeśli chodzi o frameworki to nie wiem jakie są i też nie wiem jak to sprawdzić, serwer uczelniany