Python programozás - Szoftverfejlesztés fórum

üzenetek

hozzászólások


Frigo
(őstag)

A % jel a programozásban a modulo művelet azaz a maradékképzés jele ami az osztás utáni maradékot adja vissza, ami 4 esetében : 1,2,3 lehet.


nicknev
(csendes tag)

Köszönöm szépen, így már világosabb :)) :DD :R


nicknev
(csendes tag)

Na megint nekem van problémám :DDD
Zed A. Shaw Learn Python The Hard Way, 2nd Edition könyvét olvasom, 13-ik leckénél tartok, és elakadtam.A következő kódot hiába csinálom meg rendesen nem működik (Azt írja ki a piton, hogy
File "C:\Users\valami\Desktop\cucc\ex13.py", line 3, in <module>
script, first, second, third = argv
ValueError: need more than 1 value to unpack

A script pedig ez lenne:
from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

Mi lehet baja?
Win7et használok, és 2.7-es pythont
Köszi a segítséget előre is :)

[ Szerkesztve ]


rt06
(veterán)
Blog

ott van a linken szereplo lecke vegen a megoldas


Gyuri16
(senior tag)

valoszinuleg nem adtal neki eleg parametert. hogyan hivod meg a scriptet?. valahogy igy kellene:
python ex13.py egy ketto harom


nicknev
(csendes tag)

Köszi szépen mindkettőtöknek :R , máskor alaposabban kell majd elolvasnom a szöveget :( :U


Lacces
(őstag)

Sziasztok!

Valaki ért a Komodo Edithez? Hogyan lehet elérni, hogy futtassa a python kódot?


Lacces
(őstag)

Sziasztok

slicing eljárás, vagy szeletelés a listánál

úgy működik. Pl.: lista[2:6]
hogy a lista elemei közül a 2. 3. 4. 5. indexű elemet vágja ki?

A következő példát nem értem, hogy miért van ott a 3-as?
>>> szavak[1:3] = ['saláta']
>>> szavak
['sonka', 'saláta', 'ketchup']

Miért nem csak simán szavak[1]=['saláta'] van ott?

:R


ArchElf
(addikt)
Blog

úgy működik. Pl.: lista[2:6]
hogy a lista elemei közül a 2. 3. 4. 5. indexű elemet vágja ki?

nem, a 2-es indexű elemtő számítva 6 db elemet vág ki.
kivéve
ha nincs második szám:

Vagy én emlékeztem rosszul és de :)
Szóval
szamok[start:stop]
vagy
szamok[start:stop:lépésköz]
plusz
lista[2:] - a 2.-től az összeset adja vissza
ha a második szám negatív
lista[2:-2] - a 2. től az utolsó-előtti-előttiig adja vissza

A következő példát nem értem, hogy miért van ott a 3-as?
>>> szavak[1:3] = ['saláta']>>> szavak['sonka', 'saláta', 'ketchup']
Miért nem csak simán szavak[1]=['saláta'] van ott?

de lehetne, viszont az előző példa nem szemléletes, mert a szavak[1:3] = ... tömb jellegű felülírást jelent... Látványosabb példa volna:
1)
>>> betuk = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> szamok = ['0', '1', '2', '3', '4', '5', '6', '7', '8']
>>> betuk[2:3] = szamok
>>> print betuk
['a', 'b', '0', '1', 'e', 'f', 'g', 'h', 'i']

2)
>>> betuk = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
>>> szamok = ['0', '1', '2', '3', '4', '5', '6', '7', '8']
>>> betuk[2:5] = szamok[7:]
>>> print betuk
['a', 'b', '7', '8', 'e', 'f', 'g', 'h', 'i']

AE

[ Szerkesztve ]


Lacces
(őstag)

Köszönöm szépen!

Ez nagyon jó válasz! Nagyon jó a példád! Köszönöm!

Így már megértettem! :R


Lacces
(őstag)

Ismét egy kérdésem van:

Van ez a jó tulajdonsága Pythonnak, hogy objektumokból alkotott objektumot lehet létrehozni. Ami nekem nagyon tetszik. És őszintén szólva nagyon király programozási nyelvnek tartom a Python-t és viccen kívül most kezdem megérteni a .Net és Java-t is nagyjából. Kiváló tanuló nyelv, nekem legalább is.

Viszont azt kérdezném, hogy ez a lehetőség megvalósítható-e C# és Java alatt is? (objektumból alkotott objektum). Így konkrétan példát még nem láttam rá. De az interfész-re gondoltam, de az másról szól. Talán az öröklődés még ami szóba jöhet. De nem emlékszem így vissza. És nem tudom, hogy angolul is hogyan kéne rákeresnem.

doboz=Teglalap()
doboz.sarok=Pont() #Erre a részre gondolok

A teljes példakód:
# coding: iso-8859-2

class Pont:
"Egy matematikai pont definíciója"

# Egy Pont objektum létrehozása
p1=Pont()

# Példány attribútomok vagy változok
# Nem kell semmilyen konstruktor stb.
p1.x=3.0
p1.y=4.0


# Objektumokból alkotott Objektum

class Teglalap:
"egy téglalap osztály definicója"

doboz = Teglalap()
doboz.szeles=50.0
doboz.magas=40.0
# Példányváltozó(sarok) egy Pont objektum
doboz.sarok=Pont()
doboz.sarok.x=12.0
doboz.sarok.y=27.0


ArchElf
(addikt)
Blog

Persze, de c#-os kérdésben nézz be ide ;)

Egyébként az alapvető különbség a py és pl. a c# között az az objektumok/tagok láthatósága. A py-ban minden objektum minden tagja látható: az osztályok belső szerkezét, vagy annak egy részét nem lehet elrejteni a külső szemlélő elől, míg ez erősebb nyelvek esetében ez alapkövetelmény.

AE

[ Szerkesztve ]


Lacces
(őstag)

Sziasztok!

Ez a következő függvény, ami nem mást csinál, mint a kulcs-érték párokat kicseréli.
def inverse(dico):
"egy új szótár létrehozása lépésről lépésre"
dic_inv={}
for key in dico:
item=dico[key]
dic_inv[item]=key
return dic_inv

Ennél a résznél a dic_inv[item]=key részt nem értem. Ismerem a szótárakat, átnéztem, de valamiért átcsúszok a logikáján.

for key in dico: - kulcs alapján a dico szótárban keres
item=dico[key] - az item változóban a dico kulcsait tárolom.
dic_inv[item]=key - na én itt valamiért úgy értelmezem, hogy dic_inv[dicokey]=key (ami ismét a dico-nak a kulcsai)

[ Szerkesztve ]


cucka
(addikt)
Blog

for key in dico: - kulcs alapján a dico szótárban keres
Nem nyert. Ez egy ciklus, ami végigfut a dico nevű dictionary-n és a ciklus magjában a "key" nevű változóban találod az adott elem kulcsát.

item=dico[key] - az item változóban a dico kulcsait tárolom.
Nem nyert. Az item változóhoz hozzárendeled a "dico" dictionaryból a "key" kulcs által meghatározott értéket. (Gy.k. - a dictionary az kulcs-érték párok halmaza)

dic_inv[item]=key - na én itt valamiért úgy értelmezem, hogy dic_inv[dicokey]=key (ami ismét a dico-nak a kulcsai)
A dic_inv dictionary-hoz hozzáadsz egy új elemet, aminek a kulcsa a dico aktuális elemének az értéke, az értéke meg a dico aktuális elemének a kulcsa.

Egyébként meg meg lehet ezt jobban is írni:
def inverse(dico):
dic_inv={}
for key, value in dico.items()
div_inv[value]=key
return dic_inv

Vagy még jobban:
def inverse(dico):
return dict(zip(dico.values(), dico.keys()))

Javaslom, próbáld megemészteni ezeket a verziókat is. :)


Lacces
(őstag)

Aham, igaz

for key in dico - értem, úgy mint a listáknál, ez egy bejárás. Ilyenkor mindig kulcs alapján járja be a szótárt?

dico[key], igen leesett, ami nem más mint a "key" kulcshoz tarotzó értéket írja ki:
dico={'computer':'számítógép'}, akkor ebben az esetben a
print dico[computer] eredménye a számítógép lesz.
Így már eszembe jutott. Még meg kell szokni. Köszönöm szépen!

def inverse(dico):
dic_inv={}
for key, value in dico.items()
div_inv[value]=key
return dic_inv

Ebben az esetben, a szótárt úgy kezelem, mint egy objektum. a key az adott elem kulcsa, a value az adott elem értéke. És akkor simán kicseréli a kettőt.

A zip-hez szeretnék magyarázatot kérni. Megnéztem angolul, de a fordítással sem értettem meg. Ez összefűzés lenne egyenként? Példákból is így vettem ki.
a dico.values() és dico.keys()-t ismerem.

Amúgy erre gondoltál? (hogy a visszatérési érték egy szótár, ami dic_inv a jelen példában) végül is mindegy, az a lényeg, hogy nem a "dico" szótár.
def inverse(dico):
return dic_inv(zip(dico.values(), dico.keys()))


Lacces
(őstag)

Meg még egy kérdésem, a get()-el kapcsolatban:

for m in words:
dico[m] = dico.get(m, 0) +1
lista = dico.items()

Úgy tűnik a szótár használata nem tiszta számomra...

a get() - azt csinálja, hogy megnézi a dico szótárban az "m" kulcshoz tartozó értéket, ha szerepel benne akkor az m-et ad neki (m értéket, ami a "words" aktuális eleme), ha nem, akkor 0-t. Én így tudtam. De miért van ott az a +1 ?

Itt a könyv teljes példájának a kód sorozata:

nFile = raw_input('Kezelendo file neve : ')
fi = open(nFile, 'r')
text = fi.read()
fi.close()
# annak erdekeben, hogy a szoeg szavai konnyen elklulonithetok legyenek, a nem
# betu karaktereket betukozze alakitjuk :?
alpha = "abcdefghijklmnopqrstuvwxyzíéáúóüöÍÉÁűőŰŐÚÓÜÖ"
betuk = '' # a lerehozand uj karakterlanc
for c in text:
c = c.lower() # minden betut kisbetuve alakit
if c in alpha:
betuk = betuk + c
else:
betuk = betuk + ' '
# az eredménystring átalakítása szavak listájává :
words = betuk.split()

# a hisztogram elkészítése :
dico ={}
for m in words:
dico[m] = dico.get(m, 0) +1
lista = dico.items()
# az eredménylista rendezése :
lista.sort()
# kiiratas :
for item in lista:
print item[0], ":", item[1]

:R


cucka
(addikt)
Blog

Ilyenkor mindig kulcs alapján járja be a szótárt?
Nem kulcs alapján járja be, hanem a kucsot kapod meg alapesetben ciklusváltozónak.

ebben az esetben a print dico[computer] eredménye a számítógép lesz.
Nem, ennek az eredménye általában egy hibaüzenet lesz. Esetleg így érdemes:
print dicto['computer']

Ebben az esetben, a szótárt úgy kezelem, mint egy objektum. a key az adott elem kulcsa, a value az adott elem értéke.
A szótár az egy objektum. Mindig.
Ebben az esetben nem a szótáron iterálsz végig, hanem a szótár.items() függvény visszatérési értékén, ami egy lista, aminek elemei (kulcs,érték) párok.

A zip-hez szeretnék magyarázatot kérni.
Elmagyarázni hosszú, itt egy példakód, ami alapján le kell essen, hogy mire jó:
>>> digits=[1,2,3]
>>> hungarian=['egy', 'ketto', 'harom']
>>> english=['one', 'two', 'three']
>>> zip(digits,hungarian,english)
[(1, 'egy', 'one'), (2, 'ketto', 'two'), (3, 'harom', 'three')]

Amúgy erre gondoltál? (hogy a visszatérési érték egy szótár, ami dic_inv a jelen példában) végül is mindegy, az a lényeg, hogy nem a "dico" szótár.
Ezt nem értem, a mellékelt kódot sem.


Lacces
(őstag)

Aham, most már így értem. Igen, egy csomó dolgot értelmezte félre, és írtam le rosszul, most akkor egy kis pihenés jön.

Igen, így már leesett a zip.

Vagy még jobban:
def inverse(dico):
return dict(zip(dico.values(), dico.keys()))

Itt mi a "dict"?
Beírtam ezt a kódot a másik helyett, és elfogadta, de anélkül is elfogadta ha nem volt ott a "dict"

És köszönöm a türelmedet!


cucka
(addikt)
Blog

A zip az egy listát csinál, aminek az elemei tuple-k (párok vagy n-esek)
A dict() az a dictionary konstruktor, ami egy ilyen listából dictionary-t csinál.

A függvény return sorába meg bármit beírhatsz, mivel Pythonban a függvényeknél nincs előre meghatározva, hogy milyen típusú értékkel térnek vissza.


Lacces
(őstag)

értem, köszönöm!

üzenetek