Python

Einstellige Quersumme (EQS) in Python berechnen

Die Einstellige Quersumme (EQS) bedeutet, dass von einer Zahl solange die Quersumme genommen wird, bis nur noch eine Ziffer übrig ist.

Basierend auf unserem vorigen Post Quersumme in Python berechnen kann die einstellige Quersumme in Python wie Folgt berechnet werden:

def quersumme(x):
    return sum(int(y) for y in str(x))

def eqs(x):
    while x >= 10:
        x = quersumme(x)
    return x

Anwendungsbeispiel:

print(eqs(812)) # 2
Posted by Uli Köhler in Python

Quersumme in Python berechnen

def quersumme(x):
    return sum(int(y) for y in str(x))

Anwendungsbeispiel:

print(quersumme(812)) # 11

Funktionsweise:

Zuerst wird die Zahl – z.B. 812 per str(x) in einen String konvertiert. Das ergibt "812". Nun können wir per for y in str(x) über die einzelnen Zeichen "8", "1" und "2" iterieren. Diese wandeln wir per int(y) jeweils in die entsprechende Zahl 81 und 2 um und summieren all diese Zahlen auf: 8+1+211

Posted by Uli Köhler in Python

Python-Dictionary mit Münchner Postleitzahlen der einzelnen Stadtbezirke

Originalquelle: muenchen.de

Siehe auch Python-Liste der Münchner Postleitzahlen (Stadtbezirk)

muenchner_stadtteile = {
    "Altstadt-Lehel": [80331, 80333, 80335, 80336, 80469, 80538, 80539,] , 
    "Allach-Untermenzing": [80995, 80997, 80999, 81247, 81249,], 
    "Au-Haidhausen": [81541, 81543, 81667, 81669, 81671, 81675, 81677,], 
    "Aubing-Lochhausen": [81243, 81245, 81249,], 
    "Berg am Laim": [81671, 81673, 81735, 81825,], 
    "Bogenhausen": [81675, 81677, 81679, 81925, 81927, 81929,], 
    "Feldmoching-Hasenbergl": [80933, 80935, 80995,], 
    "Hadern": [80689, 81375, 81377,],
    "Laim": [80686, 80687, 80689,], 
    "Ludwigsvorstadt-Isarvorstadt": [80335, 80336, 80337, 80469,], 
    "Maxvorstadt": [80333, 80335, 80539, 80636, 80797, 80798, 80799, 80801, 80802,],
    "Milbertshofen-Am Hart": [80807, 80809, 80937, 80939,], 
    "Moosach": [80637, 80638, 80992, 80993, 80997,], 
    "Neuhausen-Nymphenburg": [80634, 80636, 80637, 80638, 80639,],
    "Obergiesing": [81539, 81541, 81547, 81549,],
    "Pasing-Obermenzing": [80687, 80689, 81241, 81243, 81245, 81247,], 
    "Ramersdorf-Perlach": [81539, 81549, 81669, 81671, 81735, 81737, 81739,], 
    "Schwabing-Freimann": [80538, 80801, 80802, 80803, 80804, 80805, 80807, 80939,], 
    "Schwabing-West": [80796, 80797, 80798, 80799, 80801, 80803, 80804, 80809,], 
    "Schwanthalerhöhe": [80335, 80339,], 
    "Sendling": [80336, 80337, 80469, 81369, 81371, 81373, 81379,], 
    "Sendling-Westpark": [80686, 81369, 81373, 81377, 81379,], 
    "Thalkirchen-Obersendling-Fürstenried-Forstenried-Solln": [81379, 81475, 81476, 81477, 81479,], 
    "Trudering-Riem": [81735, 81825, 81827, 81829,],
    "Untergiesing-Harlaching": [81543, 81545, 81547,],
}

 

Posted by Uli Köhler in Python

Python-Liste der Münchner Postleitzahlen (Stadtbezirk)

Originalquelle: muenchen.de

Siehe auch Python-Dictionary mit Münchner Postleitzahlen der einzelnen Stadtbezirke

muenchner_plz = [
    80995, 80997, 80999, 81247, 81249, # Allach-Untermenzing
    80331, 80333, 80335, 80336, 80469, 80538, 80539, # Altstadt-Lehel
    81541, 81543, 81667, 81669, 81671, 81675, 81677, # Au-Haidhausen
    81243, 81245, 81249, # Aubing-Lochhausen
    81671, 81673, 81735, 81825, # Berg am Laim
    81675, 81677, 81679, 81925, 81927, 81929, # Bogenhausen
    80933, 80935, 80995, # Feldmoching-Hasenbergl
    80689, 81375, 81377, # Hadern
    80686, 80687, 80689, # Laim
    80335, 80336, 80337, 80469, # Ludwigsvorstadt-Isarvorstadt
    80333, 80335, 80539, 80636, 80797, 80798, 80799, 80801, 80802, # Maxvorstadt
    80807, 80809, 80937, 80939, # Milbertshofen-Am Hart
    80637, 80638, 80992, 80993, 80997, # Moosach
    80634, 80636, 80637, 80638, 80639, # Neuhausen-Nymphenburg
    81539, 81541, 81547, 81549, # Obergiesing
    80687, 80689, 81241, 81243, 81245, 81247, # Pasing-Obermenzing
    81539, 81549, 81669, 81671, 81735, 81737, 81739, # Ramersdorf-Perlach
    80538, 80801, 80802, 80803, 80804, 80805, 80807, 80939, # Schwabing-Freimann
    80796, 80797, 80798, 80799, 80801, 80803, 80804, 80809, # Schwabing-West
    80335, 80339, # Schwanthalerhöhe
    80336, 80337, 80469, 81369, 81371, 81373, 81379, # Sendling
    80686, 81369, 81373, 81377, 81379, # Sendling-Westpark
    81379, 81475, 81476, 81477, 81479, # Thalkirchen-Obersendling-Fürstenried-Forstenried-Solln
    81735, 81825, 81827, 81829, # Trudering-Riem
    81543, 81545, 81547, # Untergiesing-Harlaching
]

 

Posted by Uli Köhler in Python

Größe eines ByteIO in Python herausfinden

Um die Größes der Daten herauszufinden, die in einem io.BytesIO-Objekt in Python gespeichert sind, benutze

mein_bytesio.getbuffer().nbytes
Posted by Uli Köhler in Python

Ist mein BytesIO leer oder nicht (Python)?

Um herauszufinden, ob eine BytesIO-Instanz leer ist oder nicht, rufe die Größe des Bytes IO auf und überprüfe, ob diese > 0 ist:

mein_bytesio.getbuffer().nbytes > 0:

Das Folgende Beispiel zeigt, wie man in einer if-Abfrage überprüft, ob ein BytesIO-Objekt leer ist:

if mein_bytesio.getbuffer().nbytes > 0:
    print("mein_bytesio ist leer")
else:
    print("mein_bytesio ist NICHT leer")

 

Posted by Uli Köhler in Python

Wie kann man in Python eine E-Mail mit Anhang per SMTP versenden?

Dieses Bespiel zeigt, wie man in Python eine E-Mail mit Anhang versenden kann. Der Anhang wird direkt aus einer Datei gelesen.

#!/usr/bin/env python3
import smtplib
import mimetypes
from email.message import EmailMessage

# E-Mail-Objekt initialisieren und Nachrichtentext setzen:
msg = EmailMessage()
msg['Subject'] = 'Diese E-mail enthält einen Anhang'
msg['From'] = 'absender@domain.com'
msg['To'] = 'empfaenger@domain.com'
# Set text content
msg.set_content('Please see attached file')

def attach_file_to_email(email, filename):
    """Attach a file identified by filename, to an email message"""
    with open(filename, 'rb') as fp:
        file_data = fp.read()
        maintype, _, subtype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream').partition("/")
        email.add_attachment(file_data, maintype=maintype, subtype=subtype, filename=filename)

# Anhang anhängen
attach_file_to_email(msg, "myfile.pdf")

def send_mail_smtp(mail, host, username, password):
    s = smtplib.SMTP(host)
    s.starttls()
    s.login(username, password)
    s.send_message(mail)
    s.quit()

# E-Mail per SMTP senden
send_mail_smtp(msg, 'smtp.domain.com', 'absender@domain.com', 'sae7ooka0S')

Das oben gezeigte Skript benutzt die Folgenden Funktionen:

import smtplib
import mimetypes

def attach_file_to_email(email, filename):
    """Attach a file identified by filename, to an email message"""
    with open(filename, 'rb') as fp:
        file_data = fp.read()
        maintype, _, subtype = (mimetypes.guess_type(filename)[0] or 'application/octet-stream').partition("/")
        email.add_attachment(file_data, maintype=maintype, subtype=subtype, filename=filename)

def send_mail_smtp(mail, host, username, password):
    s = smtplib.SMTP(host)
    s.starttls()
    s.login(username, password)
    s.send_message(mail)
    s.quit()

Initalisiere das E-Mail-Object wie Folgt:

# E-Mail-Objekt initialisieren und Nachrichtentext setzen:
msg = EmailMessage()
msg['Subject'] = 'This email contains an attachment'
msg['From'] = 'sender@domain.com'
msg['To'] = 'recipient@domain.com'
# Set text content
msg.set_content('Please see attached file')

und hänge dann die Datei so an:

attach_file_to_email(msg, "myfile.pdf")

Danach kannst du die E-Mail so per SMTP versenden:

send_mail_smtp(msg, 'smtp.my-domain.com', 'sender@domain.com', 'sae7ooka0S')
Posted by Uli Köhler in E-Mail, Python

Wie berechnet man die Anzahl der Tage in einem Jahr mit pandas?

In unserem vorigen Post haben wir gezeigt, wie man mithilfe der Pendulum-Bibliothek die Anzahl der Tage ein einem Jahr berechnen kann.

Dieser Post zeigt, wie man die Anzahl der Tage in einem Jahr mit pandas berechnet:

import pandas as pd
def number_of_days_in_year(year):
    start = pd.Timestamp(year, 1, 1)
    end = pd.Timestamp(year + 1, 1, 1)
    return (end - start).days)

Beispiel:

print(number_of_days_in_year(2020)) # Gibt 366 aus
print(number_of_days_in_year(2021)) # Gibt 365 aus

Detailierte Beschreibung:

Zuerst definieren wir das Startdatum als den 1. Januar des zu berechnenden Jahres:

start = pd.Timestamp(year, 1, 1)

Das Enddatum ist dementsprechend der erste Januar des darauf folgenden Jahres

end = pd.Timestamp(year + 1, 1, 1)

Der Rest ist einfach: Wir können die Daten voneinander subtrahieren und im resultierenden pd.Timedelta-Objekt .days aufrufen, um die Anzahl der Tage zu erhalten.

(end - start).days

 

Posted by Uli Köhler in pandas, Python

Anzahl der Tage in einem Jahr mit Python berechnen

Wir können die pendulum-Bibliothek benutzen, um die Anzahl der Tage in einem Jahr zu bestimmen:

import pendulum

def number_of_days_in_year(year):
    start = pendulum.date(year, 1, 1)
    end = start.add(years=1)
    return (end - start).in_days()

Usage example:

print(number_of_days_in_year(2020)) # Gibt 366 aus
print(number_of_days_in_year(2021)) # Gibt 365 aus

Erklärung:

Zuerst definieren wir das start-Datum als das erste Datum (1. Januar) des Jahres, für das wir die Anzahl der Tage berechnen sollen:

start = pendulum.date(year, 1, 1)

Nun können wir die add-Funktion aus pendulum verwenden, um exakt ein Jahr zu diesem Datum zu addieren. Dies resultiert immer im ersten Januar des darauf folgenden Jahres.

end = start.add(years=1)

Der Rest ist einfach: Wir benutzen in_days(), um die Anzahl der Tage in (end - start) zu erhalten:

(end - start).in_days()

 

Posted by Uli Köhler in Python

Was ist die Formel für 2/3/4 parallele Widerstände?

Formel für 2 parallele Widerstände R1 und R2:

R_{insgesamt} = \frac{1}{\frac{1}{R_1} + \frac{1}{R_2}}

Python-Ccode:

rinsgesamt = 1. / (1./r1 + 1./r2)

Formel für 3 parallele Widerstände R1 undR2:

R_{insgesamt} = \frac{1}{\frac{1}{R_1} + \frac{1}{R_2} + \frac{1}{R_3}}

Python-Code:

rinsgesamt = 1. / (1./r1 + 1./r2 + 1./r3)

Formel für 4 parallele Widerstände R1 und R2:

R_{insgesamt} = \frac{1}{\frac{1}{R_1} + \frac{1}{R_2} + \frac{1}{R_3} + \frac{1}{R_4}}

Python-Code:

rinsgesamt = 1. / (1./r1 + 1./r2 + 1./r3 + 1./r4)

 

Posted by Uli Köhler in Elektronik, Python