doctest

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
karomi
User
Beiträge: 18
Registriert: Mittwoch 12. Juli 2006, 12:42

doctest

Beitragvon karomi » Montag 27. November 2006, 16:54

Hallo Allerseits,
ich habe fplgendes mit doctest geschrieben:

Code: Alles auswählen

def IsAllDigits( strz ):
    """
    >>> a = "123456789"
    >>> IsAllDigits(a)
    1
    >>> a = "sdfsdf123456789"
    >>> IsAllDigits(a)
    1
    >>>
    """


    ok = 1
    i=0
           
    while i< (len(strz)):
        print i
        try:
            if (strz[i].find("+")!=-1):
                i=i+1
            num = int(strz[i])
        except :
            ok = 0
            i=i+1
    return ok


def _test():
    import doctest, testdoctest
    doctest.testmod(verbose=True)
    #verbose=True

if __name__ == "__main__":
    _test()


Leider bleibt mein ausgeführtes Programm stehen mit folgendem Text:
Trying:
a = "123456789"
Expecting nothing
ok
Trying:
IsAllDigits(a)
Expecting:
1

Ich weiss garnicht warum es nicht zu Ende geführt wird!!!!
Kann jemand mir da weiter hilfen??
Vielen Dank

Edit (Leonidas): Code in Python-Tags gesetzt. *sigh*
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Montag 27. November 2006, 17:07

Code bitte in Tags setzten. :wink:
So wird es für uns um einiges leichter.
mfg

Thomas :-)
BlackJack

Re: doctest

Beitragvon BlackJack » Montag 27. November 2006, 19:13

karomi hat geschrieben:Ich weiss garnicht warum es nicht zu Ende geführt wird!!!!


Weil Du mit dem reichlich komischen Quelltext eine Endlosschleife hast sobald `strz[i]` eine Ziffer ist. Ziffern sind nämlich ungleich dem '+'-Zeichen also wird `i` nicht erhöht.

Mal davon abgesehen warum Du diesen Test auf das '+' überhaupt machst, ist das eine recht komplizierte Art ``strz[i] == '+'`` zu schreiben. Insgesamt kannst Du die Funktion übrigens sehr viel kürzer schreiben:

Code: Alles auswählen

def IsAllDigits(strz):
    return strz.isdigit()


Womit sich die Frage der Existenzberechtigung stellt, weil's eigentlich nur ein Umbenennen einer vorhandenen Methode darstellt.

Wenn es um's selber programmieren ohne `isdigit()` ging, dann wäre eine sehr viel einfachere ``for``-Schleife wesentlich direkter und lesbarer:

Code: Alles auswählen

def is_all_digits(strz):
    try:
        for character in strz:
            dummy = int(character)
    except ValueError:
        return False
    return True
karomi
User
Beiträge: 18
Registriert: Mittwoch 12. Juli 2006, 12:42

doctest

Beitragvon karomi » Dienstag 28. November 2006, 09:27

Hallo BlackJack,
ich bedanke mich bei dir für deine Hilfreiche Tips.
Ich arbeite an einem embedded GSM Modem, das mit Python 1.5 arbeitet.
Leider ist die Funktion isdigit nicht vorhanden.
Ich werde aber dein Quellcode mit der for schleife übernehmen.
Warum ich das Pluszeichen herauskristalisiere:
Weil ich Telefon Nummern auf ihre int Value testen möchte:
Die Nummer wird vom User wie: +491744216274 eingegeben. das + wird in meiner Funktion als Zeichen und keine Zahl angesehen. Deshalb möchte ich das + vom vorne heraus nicht in meinem Test betrachten.
Vielen Dank
Karomi
BlackJack

Re: doctest

Beitragvon BlackJack » Dienstag 28. November 2006, 10:36

karomi hat geschrieben:Ich arbeite an einem embedded GSM Modem, das mit Python 1.5 arbeitet.
Leider ist die Funktion isdigit nicht vorhanden.


Auch nicht als Funktion im `string`-Modul? Dann liesse sich das auf zwei Zeilen kürzen:

Code: Alles auswählen

def is_all_digits(strz):
    if strz[0] == '+':
        strz = strz[1:]
    return string.isdigit(strz)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], mollyman