Hong-Phuc Bui
20 hours ago aafb72c1dc3c1674e4b3c55586384bfdb7ff2be7
Musterlösung UB 2
5 files added
142 ■■■■■ changed files
uebungsblatt-2/dec2bin.py 16 ●●●●● patch | view | raw | blame | history
uebungsblatt-2/luhn-algorithmus.py 19 ●●●●● patch | view | raw | blame | history
uebungsblatt-2/printSeven.py 24 ●●●●● patch | view | raw | blame | history
uebungsblatt-2/pycalendar.py 67 ●●●●● patch | view | raw | blame | history
uebungsblatt-2/valid-credits.txt 16 ●●●●● patch | view | raw | blame | history
uebungsblatt-2/dec2bin.py
New file
@@ -0,0 +1,16 @@
# Dezimal-Zahl in Binäre Zahl konvertieren
n = input("Geben Sie eine natürliche Zahl ein! ")
n = int(n)
d,r = divmod(n,2)
binary = f"{r}"
while d > 0:
    d,r = divmod(d,2)
    binary = f"{r}{binary}" # hängt den Rest vor dem String-Representation
print(binary)
uebungsblatt-2/luhn-algorithmus.py
New file
@@ -0,0 +1,19 @@
def luhn(n:int):
    d = n
    luhn_checksum = 0
    while d != 0:
        # Verarbeitung der Stelle 10^0, 10^2, 10^4,...
        d,ungerade = divmod(d, 10)
        luhn_checksum += ungerade
        # Verarbeitung der Stelle 10^1, 10^2, 10^3,...
        d,gerade = divmod(d, 10)
        gerade *= 2
        if gerade > 9: gerade -= 9
        luhn_checksum += gerade
    return luhn_checksum, luhn_checksum%10 == 0
n = int("371-4496-3539-8431".replace('-',''))
checksum, valid = luhn(n)
print(f"Luhn-checksum: {checksum}, gültig = {valid}")
uebungsblatt-2/printSeven.py
New file
@@ -0,0 +1,24 @@
def print_seven(a, b):
    n = a
    # suche die erste Vielfach von 7
    # Maximum 6 Iterationen
    #while n % 7 != 0:
    #    n += 1
    # eine elegantere Berechnung von n:
    n = a + (7 - a%7) if a % 7 != 0 else a
    # Gibt die Vielfach von 7 aus, schrittweit 7
    # Maximum (b-a)/7 iterationen
    while n <= b:
        print(n)
        n += 7
a = input("Geben Sie eine natürliche Zahl ein! ")
a = int(a)
b = input(f"Geben Sie eine andere natürliche Zahl ein, die größer als {a} ist! ")
b = int(b)
print_seven(a, b)
uebungsblatt-2/pycalendar.py
New file
@@ -0,0 +1,67 @@
import sys
def wochentag(d:int, m:int, y:int) -> int:
    y0 = y - (14 - m) // 12
    x = y0 + y0//4 - y0//100 + y0//400
    m0 = m + 12*( (14-m)//12 ) - 2
    return (d + x + (31*m0)//12) % 7
def berechne_ueberhang_tage(wochentag:int) -> int:
    """Nach Gepflogenheit in deutches Kalender-System fängt eine Woche mit Montag an.
    Mo -> Keinen Überhang;
    Di -> 1 Überhang;
    Mi -> 2 Überhange;
    Do -> 3 Überhange;
    Fr -> 4 Überhange;
    Sa -> 5 Überhange;
    So -> 6 Überhange
    """
    return (wochentag - 1) % 7
def ist_schaltjahr(y:int) -> bool:
    return (y % 4 == 0) and ( (y%100 != 0) or (y%400 == 0) )
def letzter_tag(m: int, y:int) -> int:
    tage = [None, 31, 28, 31, 30,
    31, 30, 31, 31,
    30, 31, 30, 31]
    if m != 2: return tage[m]
    return 29 if ist_schaltjahr(y) else 28
def print_kalender(m: int, y: int):
    monaten = [None,
            "Januar",    "Februar", "März",     "April",
            "Mai",       "Juni",    "July",     "August",
            "September", "Oktober", "November", "Dezember"]
    # Ausgabe des Monat und Jahr
    print(f"{monaten[m]} {y}")
    wochentage = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"]
    print(" ".join(wochentage))
    # Ausgabe der Überhang von letzen Monat
    erster_wochentag = wochentag(1, m, y)
    ueberhang = berechne_ueberhang_tage(erster_wochentag)
    spalten_breite = len(wochentage[0]) + 1
    ueberhang_zeichen = " "*(spalten_breite * ueberhang)
    print(ueberhang_zeichen, end="")
    # Ausgabe des Kalenders
    spalten_idx = ueberhang
    tag = 1
    letzter_tag_im_monat = letzter_tag(m, y)
    while tag <= letzter_tag_im_monat:
        print(f"{tag:2d}", end=" ")
        tag += 1
        spalten_idx += 1
        if spalten_idx % 7 == 0: print()
m, y = int(sys.argv[1]), int(sys.argv[2])
print_kalender(m, y)
print()
uebungsblatt-2/valid-credits.txt
New file
@@ -0,0 +1,16 @@
American Express    378282246310005
American Express    371449635398431
American Express Corporate  378734493671000
Diners Club 30569309025904
Discover    6011111111111117
Discover    6011000990139424
JCB 3530111333300000
JCB 3566002020360505
MasterCard  2221000000000009
MasterCard  2223000048400011
MasterCard  2223016768739313
MasterCard  5555555555554444
MasterCard  5105105105105100
Visa    4111111111111111
Visa    4012888888881881
Visa    4222222222222