Seite 1 von 1

Anfänger Programm ...

Verfasst: Sonntag 27. September 2009, 10:41
von BaIs
hallo ich bin jetzt neu bei python und außer schul informatik mit delphi auch neu beim programmieren.. um in python reinzukommen und ein programm anfang der villeicht später mal bei einem richtigen programm hilft habe ich folgendes geschrieben:

Code: Alles auswählen

keys = ['afhgf','fdgkj','öjhfg','pofdj','agjsa','mefja','üfjse','asägn','eefjs','asfne','pfjsn','nfoef','sopef','ncpee','spfns']
list = []
num = 1
y= raw_input('Anzahl: ')
x= raw_input('Objekt: ')
while num <= y:
    list.append(x+str(num))
    num +=1

pairs = {}
zaehler= 0

for i in list:
    key = keys[zaehler]
    zaehler = zaehler+1
    pairs[i] = key
das problem ist das es sich aufhängt beim starten.
wahrscheinlich bei der while schleife wenn ich den breakpoint richtig gesetzt habe.

aber warum?

das programm soll eine liste erstellen mit objekten wie z.b einem PC und jedem dieser PCs dann einen key zuordnen. Objekt und Anzahl werden von user eingegeben.

hoffe ich bin hier in der rubrik richtig .. :D

Verfasst: Sonntag 27. September 2009, 10:46
von Dav1d
Eig. bist du in der falschen rubrik!

Code: Alles auswählen

while num <= y:
    list.append(x+str(num))
    num +=1
num = Eine Integer (Ganzzahl)
y = Usereingabe mit raw_input => String

Deswegen wird die Schleife nicht funktionieren, um einen String in eine Integer zu verwandeln:

Code: Alles auswählen

y = int(y)
//EDIT: noch was:
Der funktionierende Code:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-

keys = ['afhgf','fdgkj','öjhfg','pofdj','agjsa','mefja','üfjse','asägn','eefjs','asfne','pfjsn','nfoef','sopef','ncpee','spfns']
list = []
num = 1
y= raw_input('Anzahl: ')
y = int(y)
x= raw_input('Objekt: ')
while num <= y:
    list.append(x+str(num))
    num +=1

pairs = {}
zaehler= 0

for i in list:
    key = keys[zaehler]
    zaehler = zaehler+1
    pairs[i] = key

print 'Die Liste:', list
print 'Das Dict:', pairs
Du verwendest in deiner Liste 'keys' ö, ü, ä etc verwendest, dazu musst du im Header das richtige encodeing wählen:

Code: Alles auswählen

#!/usr/bin/python
# -*- coding: utf-8 -*-
Ich versteh zwar den Sinn von dem Code nicht aber naja, für irgendwas wird er schon gut sein

Ach die Ausgabe

Code: Alles auswählen

Anzahl: 10
Objekt: Test
Die Liste: ['Test1', 'Test2', 'Test3', 'Test4', 'Test5', 'Test6', 'Test7', 'Test
8', 'Test9', 'Test10']
Das Dict: {'Test1': 'afhgf', 'Test3': '\xc3\xb6jhfg', 'Test2': 'fdgkj', 'Test5':
 'agjsa', 'Test4': 'pofdj', 'Test7': '\xc3\xbcfjse', 'Test6': 'mefja', 'Test9':
'eefjs', 'Test8': 'as\xc3\xa4gn', 'Test10': 'asfne'}

Verfasst: Sonntag 27. September 2009, 11:11
von BlackJack
@BaIs: Das mit dem falschen Typ beim Vergleich hat Dir Dav1d ja schon gesagt.

In Python sollte man in Schleifen keine Zähler "von Hand" hochzählen, dafür gibt es ``for``-Schleifen und `xrange()` oder `enumerate()`.

Das was Du da `keys` bzw. `key` nennst, wird im Programm als Wert und nicht als Schlüssel verwendet. Das ist verwirrend.

`list` ist ein Name, der schon vergeben ist, den sollte man nicht überschreiben.

Ansonsten kommt man auch ohne "äussere" Schleifen aus:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8


def main():
    values = ['afhgf', 'fdgkj', 'öjhfg', 'pofdj', 'agjsa', 'mefja', 'üfjse',
              'asägn', 'eefjs', 'asfne', 'pfjsn', 'nfoef', 'sopef', 'ncpee',
              'spfns']

    object_count = int(raw_input('Anzahl: '))
    object_name = raw_input('Objekt: ')
    a_list = [object_name + str(n + 1) for n in xrange(object_count)]

    pairs = dict(zip(a_list, values))
    
    print a_list
    print pairs


if __name__ == '__main__':
    main()

Verfasst: Montag 28. September 2009, 13:03
von BaIs
hallo vielen dank für die hilfe ..
ja das programm hat noch keinen großen sinn aber ich habe es zur übung benutzt...
später wenn ich mehr erfahrung mit python habe wage ich mich an ein projekt das die windows xp lizenzen der computer verwaltet und dann bei opsi einfügt ( opsi sagt hier villeicht einigen was) .. naja aber bis dahin wirds wohl noch was dauern :roll:

folgendes verstehe ich jedoch noch nicht ..

Code: Alles auswählen

if __name__ == '__main__':
    main()
was überprüft das programm hier? und wenn es gleich ist dann führt es die function aus oder??

Verfasst: Montag 28. September 2009, 13:07
von jbs
Einfach mal nach googlen. Bei mir reichte schon ``if __n`` für die autovervollständigung :)

Verfasst: Dienstag 29. September 2009, 16:28
von BaIs
ok vielen dank habe es auch gefunden ...
dachte es wäre etwas spezifisches im programm und keine allgemeine methode .. :lol: