Kleine Python-Programme

BloodRocks

Lt. Junior Grade
Registriert
Okt. 2021
Beiträge
365
Ich habe jetzt einige EBooks über python gelesen und dachte, ich schreibe einige kleine Python-Programme selbst.

Nur weiß ich nicht, wie ich das angehen soll. Weiß nicht, was ich schreiben soll. Vielleicht wären Übungen nicht schlecht, aber das meiste ist mir zu kompliziert.

Was sollte ich schreiben. Vielleicht habt ihr einige Tipps, wie ich das angehen könnte.
 
Hi,

darf man Fragen, was genau du dir vorstellst, wenn Übungen schon zu kompliziert sind? Welche Übungen sind das denn?

Sinnvollerweise programmiert man etwas mit einer konkreten Anforderung - sich etwas aus den Fingern zu saugen ist in meinen Augen nicht zielführend, auch weil eine Erfolgskontrolle damit quasi kaum möglich ist.

VG,
Mad
 
  • Gefällt mir
Reaktionen: Tornhoof
Gibt es nicht irgendwas, was du selber gerne haben wollen würdest? Ein nützliches kleines Tool, was es so noch nicht gibt? Oder was es nur viel zu überladen gibt? ^^ So, dass es am Ende nicht nur eine Übung ist, sondern dir auch noch gleich was liefert, was du darüber hinaus nutzen kannst.
 
Du suchst ein CodingGame oder eine Python Code Challenge oder Advent of Code.
 
  • Gefällt mir
Reaktionen: TorenAltair
BloodRocks schrieb:
Weiß nicht, was ich schreiben soll. Vielleicht wären Übungen nicht schlecht
Du kannst ja erst mal einen Algorithmus umsetzen, z.B. den Euklidischen Algorithmus zur Berechnung des größten gemeinsamen Teilers.

Zum Spicken:
Python:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sys

def euklid(a,b):
    return a if b==0 else euklid(b, a % b)

print(euklid(int(sys.argv[1]), int(sys.argv[2])))

In Bash wär's sogar noch kürzer:
Bash:
#!/bin/bash
[[ $2 -eq 0 ]] && echo $1 || $0 $2 $(($1 % $2)
 
Meine Azubis haben immer sehr viel Spaß mit der Aufgabe "Geldscheinnummer überprüfen".
Siehe Eurobanknoten.

Als zweiter Teil dann per BruteForce gültige Geldscheinnummern generieren.
 
Ich find ja irgendwas existierendes relativ Kleines zu nehmen und erstmal daran Dinge zu ändern am sinnvollsten, z.B. irgendein bestehendes Python-Pacman nehmen und zusätzliche Extras oder Level oder intelligentere Monster oder sowas einbauen (Stichworte Pygame, Pyxel).

Der Trick ist, dass man dann direkt ab Start was cooles Funktionierendes hat, das auch nicht total Sandkasten ist, und außerdem vermutlich durch das Ansehen des bestehenden Codes schnell recht viel lernt.

Kommt aber auf die eigene Lernstrategie an, das funktioniert nicht für jeden.
 
Äußerst langsame und ineffizente Methode um pi zu berechnen, aber zeigt vielleicht, ob die Zufallszahlen hochwertig zufällig sind. Braucht vielleicht 5 Minuten zur Berechnung.

Monte-Carlo-pi.py
Python:
#!/bin/python3

from random import random
inc=0
prec=10**8

for i in range(0,prec):
    x = random()
    y = random()
    if x**2 + y**2 <= 1:
        inc = inc + 1
 
print(inc*4/prec)

edit:
Eine andere Version, die auch am Pi-Einheitskreis (einem Viertel davon) arbeitet,
aber ohne Zufallszahlen, sondern numerisch integriert.
Rechnet hier mit selber Auflösung, hat genaueres Ergebnis und ist ~1500x schneller.


Pi-Integral-numerisch.py
Python:
#!/bin/python3


step=1/10**4
i=0; j=1; k=0

while i < 1:
    vi=i*i
    while True:
        if ( vi + j*j ) > 1:
            j-=step
        else:
            k=k+j
            break

    i+=step

print(k*4*step)

edit:
Das selbe Programm in c++ ist 137x schneller.

edit:
Habe das Programm vom zählen von Quadraten k unter der Funktion in Streifen geändert, aber mit weiterhin begrenzter Auflösung in Höhe, sowie vi aus der Schleife heraus gehoben, um ein paar Berechnungen einzusparen. Ist aber nur wenig schneller geworden.
Wenn man das Ergebnis genauer berechnen wollte, müsste man Step verkleinern auf 10^-9, und jeden Streifen genau ausrechnen, nicht nur näherungsweise diskret. Dann muss man aber jedes mal die Quadratwurzel ziehen.
 
Zuletzt bearbeitet:
Aber gerade pi kann man auch in python schneller und genauer ausrechnen.
Siehe:
https://en.wikipedia.org/wiki/Chudnovsky_algorithm
Auf der Seite ist ein Python Beispielprogramm.
Das funktioniert auch ohne Decimal Bibliothek, dann halt nur mit normaler doppelter Genauigkeit.

edit:
Aber auch das oben genannte Programm kann man ernsthafter implementieren, wenn man nur ein genaueres Ergebnis von pi benötigt, und nicht vielleicht Zufallszahlen testen will. Es kommt eben auf den Algorithmus an.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: _anonymous0815_
Wie schon im anderen Python thread vom TE.
Wenn du nicht weißt was du programmieren sollst, dann wäre es evtl erstmal deine Aufgabe rauszufinden oder zu sagen wozu du Python programmieren (lernen) willst?
 
  • Gefällt mir
Reaktionen: dms, areiland und Elderian
Kannst dich an CTFs oder an Competetive Programming versuchen, falls du sonst keine Idee für ein Projekt hast. Da gibt es Plattformen dafür mit jeder Menge Übungen.
 
Wie wäre es mit so simplen Sachen wie Primzahlen berechnen, Zahlenratespiel, und so ähnlichen Beispielübungen?
Diese sind nicht all zu kompliziert und recht schnell umgesetzt.
 
  • Gefällt mir
Reaktionen: BloodRocks
@All - ich glaube ihr sollte bei euren "Ideen" einfach die vorheriegen Threads des TE anschauen - und dann überlegen was sinnvoll in deisem allgemeneinen Foum schaffbar ist.

@BloodRocks ... mach doch einfach deinen Krimi, ist offline und du hast alle Zeit der Welt ...
 
  • Gefällt mir
Reaktionen: Pummeluff
Ich habe u.a. dieses Buch gelesen
Screenshot_20240501_124159_WPS Office.jpg

Screenshot_20240501_124749_Chrome.jpg
 
Zuletzt bearbeitet:
Micropython ist dem Python sehr ähnlich, und wird auf Microcontrollern verwendet, wie zB. Raspberry Pico.
Dort kann man natürlich über Micropython alle Module ansprechen, also auslesen, und steuern.
Dadurch ergeben sich unzählige Anwendungsmöglichkeiten, und es gibt auch viele Beispielprogramme.
Man kann ua. 16x2 LCD Display ansteuern, und 4x4 Tastenfeld, Temperatursensor, Beeper, Servo, LEDs, adressierbare RGB-LED, Schrittmotor-Steuerungsmodul, etc..
https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
 
Zuletzt bearbeitet:
Zurück
Oben