zahl die auf 5 endet überspringe

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.
deets

problembär hat geschrieben: Aber es ist ja nicht das erste Mal, daß ihr an den Leuten, die hier hoffnungsvoll Fragen stellen, komplett vorbeidenkt und -schreibt.
Python: Wunderbare Sprache - absolut miese Community. Hier jedenfalls. Warum nur?
Das einzige, was hier mies ist, sind deine mangelhaften Programmierkenntnisse. Im Allgemeinen, wie auch bezogen auf Python selbst. Weil du das aber offensichtlich selbst nicht erkennen kannst, hast du dich auf deinen laecherlichen kleinen Kreuzzug wider gutes programmieren in Python begeben...
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

@problembär: Also ich schreib hier im Forum zwar selten was, les' aber schon seit einiger Zeit mit, und mir ist die Community hier sehr sympathisch (freundlicher Ton und kompetente Hilfe). Klar, einzelne Problembä... äh Problemkinder gibts in jedem Forum, aber auch das find' ich hier alles recht harmlos. ;)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Wenn es denn unbedingt "sprechender" sein soll... ;)

Code: Alles auswählen

class Number(int):
    def endswith(self, digit):
        if not 0 <= digit < 10:
            raise ValueError('digit must be in range 0-9')
        return (self % 10 == digit)
Kann man übrigens gern für mehrstellige Abfragen und um Typprüfungen erweitern. :)

Um `floats` zu erkennen, eignet sich natürlich bestens ein `'.' in str(digit)`. *scnr*
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

problembär hat geschrieben:es ist ja nicht das erste Mal, daß ihr an den Leuten, die hier hoffnungsvoll Fragen stellen, komplett vorbeidenkt und -schreibt. Python: Wunderbare Sprache - absolut miese Community. Hier jedenfalls. Warum nur?
Das muss ein Troll sein. Hier ist ungefähr die beste und zudem deutschsprachige Community, die ich kenne. Gut, ich kenne nicht viele Python Communities. Aber viele nicht-Python Communities, und selbst da rangiert diese hier nicht sonderlich weit hinten. Falls das also tatsächlich ernst gemeint sein sollte: Bitte verlinke doch ein paar bessere Python Communities, gerne in nem eigenen Thread und nenne Sachen, die dort einfach besser laufen.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
deets

@Kebap

Ja, der problembaer ist ... ein problembaer :) auch haarig & zottelig wie ein Troll. Riecht auch streng.. ;)
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Der problembär möchte offenbar nicht wahrhaben, dass es meist bessere/anerkanntere Antworten gibt als die seinigen, da diese ein Problem oft weniger umständlich lösen, aber zum Teil auch mal ein bißchen mathematischen Sachverstand erfordern. Aus diesem Umstand heraus konstruiert er sich leider mehr oder weniger eine Art Verschwörung des Forums gegen ihn - so scheint es zumindest. Hierbei wird problembär auch nicht müde, bei jeder sich bietenden Gelegenheit insbesondere Anfänger vor den besagten Forumskätzern zu warnen, die alle immer irgendwas gegen seinen Programmierstil haben und ihn alle nur ärgern wollen. :twisted:
deets

Ganz besonders gelungen ist auch immer seine Argumentationslinie gegen "pythonisches" programmieren: wenn es der Interpreter schluckt, dann ist es auch richtig! Punkt!

Ich habe mir darum mal erlaubt, ihm seine ganz persoenliche sortier-Funktion zu widmen, die ein bisschen beschraenkt ist (um ein anderes Wort das mit besch... anfaengt zu vermeiden)

Code: Alles auswählen


import tempfile, os, random, shutil


def problembaer_sort(l):
    d = tempfile.mkdtemp()
    for entry in l:
        with open(os.path.join(d, str(entry)), "w") as outf:
            pass
    res = [int(h) for h in os.listdir(d)]
    shutil.rmtree(d)
    return res


l = range(10)
random.shuffle(l)
print l

print problembaer_sort(l)
Man sehe & staune - es funktioniert! Ob er das jetzt wohl auch immer verwenden wird?!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

deets hat geschrieben:Man sehe & staune - es funktioniert!
Da würde ich doch noch Raymond Hettingers wunderbares sleep_sort vorschlagen das allerdings auf Integer-Werte beschränkt ist.

Code: Alles auswählen

from threading import Thread
import time

def worker(n, emit):
    time.sleep(n)
    emit(n)
    print(n)


def sleep_sort(s):
    result = []
    emit = result.append
    threads = [Thread(target=worker, args=(x, emit)) for x in s]
    for t in threads:
        t.start()
    for t in threads:
        t.join()
    return result

if __name__ == '__main__':
    import random

    s = list(range(10))
    random.shuffle(s)
    print('Shuffled:', s)
    print('Sorted:', sleep_sort(s))
Benutzeravatar
Kebap
User
Beiträge: 687
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

Ich möchte hier nicht zu sehr auf dem problembär herumhacken, den ich gerade zum ersten Mal bemerke. Tatsächlich kann ich seine ursprüngliche Motivation auch nachvollziehen und gutheißen: Manchmal sind Antworten und Code-Vorschläge so weit von dem des Threadstarters entfernt, dass man befürchten kann, dass der womöglich nichts damit anfangen könnte, und irgendwo alleine verzweifelt. Aber gut: Das ist in jedem Fall unterschiedlich, und die meisten melden sich so oder so nicht zurück, egal ob man ihnen geholfen oder sie überfordert hat. Mein Vorschlag: Einfach antworten, dass man nix verstanden hat, dann wird doch auch gern detailierter erklärt. So, genug Trolle gefüttert für heute, hoffentlich war es nahrhaft und hilft durch den kommenden, langen Winter.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Benutzeravatar
pixewakb
User
Beiträge: 1412
Registriert: Sonntag 24. April 2011, 19:43

derdon hat geschrieben:/me: Man kann auch einfach die Bedingung umkehren und sich so das continue-Statement sparen:

Code: Alles auswählen

>>> for i in xrange(1, 21, 2):
...     if i % 5 and i % 10:
...         print i
... 
1
3
7
9
11
13
17
19
Kann mir mal jemand die obige Code-Zeile erklären:

Code: Alles auswählen

if i % 5 and i % 10
Die Konstruktion raffe ich nicht. Statt xrange muss es range heißen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

pixewakb hat geschrieben:Kann mir mal jemand die obige Code-Zeile erklären:

Code: Alles auswählen

if i % 5 and i % 10
"Bedingung gilt wenn Zahl weder durch 5 noch durch 10 teilbar". Was gemacht wird ist die Modulo-Operation, die den Ganzzahligen Restwert einer Division zurückgibt. 6 % 5 wäre 1, 5 % 5 wäre 0. Also wenn bei Modulo etwas anderes als Null rauskommt, dann heißt es dass die Zahl teilbar ist. Und es wird eben sowohl Teilbarkeit durch 5 als auch durch 10 geprüft. Wenn beide Zahlen != 0 sind (, ist das Ergebnis != 0, und damit "falsch".
pixewakb hat geschrieben:Die Konstruktion raffe ich nicht. Statt xrange muss es range heißen?
Nein, ``xrange`` stimmt so. ``range`` gibt eine Liste zurück, aber um über die Zahlen zu iterieren brauchst du die gesamte Liste nicht, es reicht ein iterierbares Objekt, und ein solches gibt ``xrange`` zurück.

Vergleiche im der Python-Interpreter was rauskommt wenn du ``range(10)`` und ``xrange(10)`` eingibst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

pixewakb hat geschrieben:Kann mir mal jemand die obige Code-Zeile erklären:

Code: Alles auswählen

if i % 5 and i % 10
Leonidas hat sie erklärt, aber man sollte noch darauf hinweisen, dass die Bedingung natürlich nicht auf die Anforderung zutrifft und falsch ist. Das ist keine Umkehrung der von mir ursprünglich vorgeschlagenen Logik mit dem continue-Statement.

Im Prinzip funktioniert das nur, weil durch das xrange(1, 21, 2) ohnehin nur ungerade Zahlen genommen werden. Lass im xrange die 2 wegfallen, so dass der Defaultwert von 1 für den Step angenommen wird und du siehst den Algorithmus kläglich an der 10 scheitern.
Benutzeravatar
snafu
User
Beiträge: 6740
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Leonidas hat geschrieben:Vergleiche im der Python-Interpreter was rauskommt wenn du ``range(10)`` und ``xrange(10)`` eingibst.

Code: Alles auswählen

>>> range(10)
range(0, 10)
>>> xrange(10)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'xrange' is not defined
:o :o :o

Im Ernst: Den Umstand, dass Py3k genutzt werden könnte, sollte man inzwischen gerade bei Anfängern immer bedenken. Damit meine ich natürlich nicht, dass die Anfänger so doof sind und alle Python 3.x nutzen, sondern dass sie die Situationen der beiden parallel existierenden Versionszweige evtl nicht kennen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also der Threadstarter hat zumindest Python 2 verwendet, darauf habe ich mich dann auch bezogen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Leonidas hat geschrieben:Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
Schreib ich, schreib ich's nicht...? Ach, verdammt: Das funktioniert natürlich nicht. Ich sage nur bin(25).

Stefan
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sma hat geschrieben:
Leonidas hat geschrieben:Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
Schreib ich, schreib ich's nicht...? Ach, verdammt: Das funktioniert natürlich nicht. Ich sage nur bin(25).
Dann muss man doch einen einfacheren Ansatz wählen, nämlich eine Primfaktorzerlegung. Die Primfaktoren sammelt man in einer Liste, sortiert sie aufsteigend und wenn das dritte Element 5 ist, dann ist man schon fast fertig.
Benutzeravatar
Dobi
User
Beiträge: 31
Registriert: Mittwoch 28. September 2011, 17:04

auf ein Canvas malen, letzte Ziffer ausschneiden und in ein neuronales Netz werfen, das auf Nullen und Fünfen trainiert ist ;)
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

/me hat geschrieben: Dann muss man doch einen einfacheren Ansatz wählen, nämlich eine Primfaktorzerlegung. Die Primfaktoren sammelt man in einer Liste, sortiert sie aufsteigend und wenn das dritte Element 5 ist, dann ist man schon fast fertig.
Wenn das dritte Element 5 ist, endet die Zahl auf 0. Und wenn gleich das erste Element 5 ist? Immer vorausgesetzt, Du sammelst die _verschiedenen_ Primfaktoren in einer Liste, sonst wird's entweder unübersichtlich oder langweilig.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

/me hat geschrieben:
sma hat geschrieben:
Leonidas hat geschrieben:Also ich habe ja erwartet, dass man die Zahl in einen String in Binär umwandelt und dann auf "101$" matcht.... :twisted:
Schreib ich, schreib ich's nicht...? Ach, verdammt: Das funktioniert natürlich nicht. Ich sage nur bin(25).
Dann muss man doch einen einfacheren Ansatz wählen, nämlich eine Primfaktorzerlegung. Die Primfaktoren sammelt man in einer Liste, sortiert sie aufsteigend und wenn das dritte Element 5 ist, dann ist man schon fast fertig.
15 zerlegt sich in 3 * 5 und einen IndexError...?

Oder 135, was 3 * 3 * 3 * 5 ist und wo da an dritter Stelle eine 3 steht. Du willst ja in einer *Liste* sammeln, keinem Set. :)

Stefan
Antworten