Wie sage ich es in Python ? (Einsteigerfragen)

  • Hallo,


    du willst also wissen, wie oft du `verr` von zahl abziehen bzw. dazu addieren kannst, damit der Rest möglichst nahe an Null ist?



    `number` ist die Ausgangszahl, `value` die Zahl, um die jeweils verringert / erhöht werden soll. Die Funktion geht implizit davon aus, das `value` positiv ist (sonst stimmt u.U.) das Ergebnis nicht.


    Gruß, noisefloor

  • noisefloor ich weiss nicht so ganz genau was du da berechnen willst, aber das sieht vom Ergebnis her nach nix anderem als Modulo aus, gespiegelt am Vorzeichen. Das koennte man zB so bauen:


    Code
    math.copysign(abs(x) % diff, x)

    Aber wie gesagt, ich glaube nicht, dass das dem TE wirklich hilft. Und es passt auch nicht zu deiner Beschreibung, das waere ja eher


    x // diff

  • @__deets__ : Alles klar; das vorige Beispiel mit ABS hilft mir aber trotzdem noch in anderen Fällen^^. Aber stimmt schon, da geht wohl leider nicht viel mehr...


    (Für alle, denen der Hintergrund interessiert: Ich programmier grad an einem kleinen Jump'n Run und will eine "Reibung" bzw. Widerstand des Charakters einbauen, wenn er sich bewegt. Die "Reibung" soll natürlich irgendwann stoppen, weshalb die "0"-Bedingung genauso wichtig ist wie der konstante Wert davon... Die "zahl" ist quasi der Wert der neuen Position, die der Charakter nach der Bearbeitung erhalten soll...


    Ohne Reibung läuft der Charakter bis in alle Ewigkeit in dieselbe Richtung, ohne konstanten Abzug braucht der Charakter Ewigkeiten zum Bremsen und Stillstehen (wenn ich nicht den Wert irgendwann "hart" auf 0 stelle, aber das wär wieder unelegant), und ohne Null-Bedingung würde er plötzlich irgendwann rückwärts laufen oder hin- und herruckeln; da darf natürlich nichts davon passieren^^...)


    __deets__ hat es ja schon korrekt anmerkt: Will ich mit einem konstant Wert abziehen, werde ich wohl um eine Fallunterscheidung nicht herumkommen^^... Ich dachte wohl, eventuell gibts da einen "Trick 17" o.Ä., den ich noch nicht kenne aber anderen bekannt ist^^...

  • Bei Spielen kommt es natuerlich oft vor, dass man genau an solchen Stellen tunt, und ggf. nicht das macht, was die Physik da will. Aber normalerweise sollte Reibung proportional zur Geschwindigkeit sein, also faktisch eine Multiplikation. Unterhalb eines bestimmten Schwellwertes sollte man dann natuerlich auf 0 setzen. Aber das waere dann doch eher eine einfache Multiplikation. Und noch ein Tipp: wenn man so pseudo-physikalische Bewegung macht, dann ist es oft trotzdem angezeigt, mit floating points zu arbeiten, aber dann zur Darstellung einfach zu diskretisieren, also auf die Pixel-Positionen.

  • Für alle, denen der Hintergrund interessiert: Ich programmier grad an einem kleinen Jump'n Run

    Schau dir mal das hier an (ab 8:25 wird es interessant):

    External Content www.youtube.com
    Content embedded from external sources will not be displayed without your consent.
    Through the activation of external content, you agree that personal data may be transferred to third party platforms. We have provided more information on this in our privacy policy.

    Kelvin

  • Guten Tag,

    ich bin dabei für die Uni einen GPIO Emulator mit Python zu programmieren.

    Es geht darum eine Ampelschaltung zu simulieren. Dafür habe ich schon einen Schalter zu auslösen programmiert. Nun soll ich laut aufgabenstellung noch einen zweiten Schalter zum beenden der Anwendung erstellen. Das war auch kein Problem. Mein Problem liegt nun darin , dass ich als Vorgabe habe das ganze mit einem Modul und dem Befehl exit() durchzuführen. Ich verstehe nun nicht, was ich tun muss, um den Schalter mit dem Modul bzw dem befehl zu verknüpfen. Wenn ich das ganze mit in die while schleife setze funktioniert die ganze anwendung nicht mehr.

    schönes Wochenende


  • Hallo, vielleicht hat jemand einen Python-Tipp für mich:


    Zu Programmstart stehen in einem Verzeichnis eine unbekannte Zahl an sequentiellen Dateien. Die Namen der Dateien sind unbekannt. Jede Datei hat zahlreiche Text-Zeilen.

    In einer Programmschleife sollen alle Zeilen ausgegeben werden, die mit "4711" beginnen. Die Reihenfolge soll dem Zeitpunkt der Dateierstellung folgen.

    Würde mich über Lösungsansätze freuen.

    Jochen

  • Eine Liste der Dateien nach Datum sortiert anlegen und dann diese Zeilenweise nach "4711" prüfen und ausgeben? Dafür die passenden Python Funktionen raus suchen und los programmieren. :)

  • Hallo,


    wenn du mit Verzeichnissen arbeiten musst, dann bietet sich das Modul 'pathlib' an.

    Öffnen und auslesen der Dateien (txt?) kann Python von Haus aus. Zum öffnen das 'with'-Statemant verwenden. Dann kannst du in einer Schleife Zeile für Zeile und Datei für Datei auslesen und mit 'if'-Abfragen den Zeilenbeginn abfragen.


    Reicht dir das? Suchst du eher Code-Beispiele?


    Bin gerade nicht zu Hause, deswegen erst mal die grobe Beschreibung.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Nahezu ungetestet:

    😎

    Who is General Failure and why is he reading my hard disk?

  • Der Nachteil ist, dass es durch die vielen Iteratoren Exception-Handling unheimlich kompliziert wird.

    Dateien können mal einem anderen Nutzer gehören oder die Encodierung ist falsch.