Zum Inhalt springen

Kurs:Python/LG/Py2009/Aufgaben (Pape)

Aus Wikiversity

Webquelle

[Bearbeiten]

Datentypen und Ausdrücke

[Bearbeiten]

Boolescher Ausdruck zur Definition einer Metropole

[Bearbeiten]
# Eigenschaften der Stadt
istHaupstadt = True
anzahlEinwohner = 100001
steuernProEinwohner = 8000000.0

# Ausgabe
if istHaupstadt == True and anzahlEinwohner > 100000 or anzahlEinwohner > 200000 and steuernProEinwohner >= 720000000:
    print "Diese Stadt ist eine Metropole."
else:
    print "Diese Stadt ist keine Metropole."

Berechnen Sie den elektrischen Widerstand eines Drahtes

[Bearbeiten]

Background: Siehe Zylinder (Geometrie), Kreis (Geometrie), speziell Kreisfläche.

import math

# E I N G A B E
laenge              = 1
d                   = 0.001
Widerstand_Kuper    = 1.78 * 10 ** -8
Widerstand_Silizium = 2300

# Formeln
# Widerstand: R = P * ( Laenge / Flaeche des Durchschnitts)
# Flaeche des Durchschnitts = d * d * math.pi / 4

flaeche = d * d * math.pi / 4
print flaeche

# Teilaufgabe 1
# B E R E C H N U N G   K U P F E R 

R_KupferDraht = Widerstand_Kuper * (laenge / flaeche)

print "Der Widerstand fuer einen Kupferdrath (1 m lang,  1 mm im Durchmesser) betraegt",  R_KupferDraht,  "Ohm."

# B E R E C H N U N G   S I L I Z I U M 

R_SiliziumDraht = Widerstand_Silizium * (laenge / flaeche)

print "Der Widerstand fuer einen Siliziumdrath (1 m lang,  1 mm im Durchmesser) betraegt",  R_SiliziumDraht,  "Ohm."

# Teilaufgabe 2
# Nach dem Ohmschen Gesetz ist Strom I proportional zur Spannung U. Oder als Formel: U = R * I.
# Wieviel Spannung muss an dem Draht angelegt werden, damit 25 Ampere Strom durchfliessen?

U_KupferDraht = R_KupferDraht * 25

U_SiliziumDraht = R_SiliziumDraht * 25

print "An den Kupferdraht muss eine Spannung von", U_KupferDraht, "Volt angelegt werden, damit 25 Ampere Strom hindurchfliessen."
print "An den Siliziumdraht muss eine Spannung von", U_SiliziumDraht, "Volt angelegt werden, damit 25 Ampere Strom hindurchfliessen."

Protokoll:

7.85398163397e-07
Der Widerstand fuer einen Kupferdrath (1 m lang,  1 mm im Durchmesser) betraegt 0.0226636638963 Ohm.
Der Widerstand fuer einen Siliziumdrath (1 m lang,  1 mm im Durchmesser) betraegt 2928450952.89 Ohm.
An den Kupferdraht muss eine Spannung von 0.566591597407 Volt angelegt werden, damit 25 Ampere Strom hindurchfliessen.
An den Siliziumdraht muss eine Spannung von 73211273822.3 Volt angelegt werden, damit 25 Ampere Strom hindurchfliessen.

Eher unsicher, ob alle Berechnungen stimmen. --Python-Clown 16:56, 26. Apr. 2009 (CEST)

Musterlösung (Quelltext)

Formatieren Sie überlange Ausdrücke

[Bearbeiten]
print "Programmieren!"

Addieren Sie 10 mal 0,1 auf eine double-Variable

[Bearbeiten]

Was ist eine Variable vom Typ Double? - Siehe unter: Doppelte Genauigkeit.

Wir vergleichen:

variable1 = 0.0
variable2 = 0.1

variable1 = variable1 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 
    
print variable1

if variable1 == 1.0:
    print "True"
else:
    print "Ueberraschung."

...und erhalten beim Protokoll:

1.0
Ueberraschung.

Ergebnis: „Berechnungen zeigt, warum man Gleitkommazahlen nie mit dem Identitätsoperator vergleichen darf.“ (Quelle). Auf die Kommentare in der Lösung (Quelltext) achten. Es ist zu merken, dass „0,1 nicht genau als Gleitkommazahl im Speicher repräsentiert werden kann und auf diesen Wert beruhende Berechnungen falsch werden können“.

Vorschlag zur Problemlösung: „Gleitkommazahlen dürfen nie mit der Identität vergliechen werden. Statt dessen den Abstand der Zahlen daraufhin überprüfen, ob er sehr klein ist. Der sehr kleine Wert hängt von der Anwendung ab. Bei Bankanwendungen reicht 5-8 Stellen Genauigkeit hinter dem Komma.“


Ohne Schleife:

variable1 = 0.0
variable2 = 0.1

variable1 = variable1 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 + variable2 
    
print variable1

Protokoll:

1.0

Mit Schleife:

variable = 0.0

for i in range (1, 11):
    variable += 0.1
    
print variable

Protokoll:

1.0

Kontrollanweisungen

[Bearbeiten]

Aufgabenseite

Drei Zahlen sortieren

[Bearbeiten]
Illustration

Mögliche Ausgangsbasis

1 2 3
2 1 3
2 3 1
3 2 1
3 1 2
1 3 2

Lösung:

tauscher = 0

while True:
    
    print "Geben Sie die Zahlen 1, 2, 3 in einer beliebigen Reihenfolge ein. 0 zum Abbrechen."
    a = input ("Geben Sie die erste Zahl ein: ")
    b = input ("Geben Sie die zweite Zahl ein: ")
    c = input ("Geben Sie die dritte Zahl ein: ")
    
    if a == 0 or b == 0 or c == 0:
        print "Abbruch."
        break
    
    if a > b:
        tauscher = a
        a = b
        b = tauscher
    
    print "1. Ausgabe zur Kontrolle: ",  a, b, c
        
    if b > c:
        tauscher = b
        b = c
        c = tauscher
    
    print "2. Ausgabe zur Kontrolle: ",  a, b, c
    
    if a > b:
        tauscher = a
        a = b
        b = tauscher
    
    print "3. Ausgabe zur Kontrolle: ",  a, b, c
    
    if a < b < c:
        print "Sortierung abgeschlossen."
    else:
        print "Es hat nicht geklappt."

Der Quelltext kommt mir arg lang vor. Das ist sicher nicht sehr elegant, funktioniert aber. --Michael Reschke 23:30, 21. Apr. 2009 (CEST)

Ein-mal-Eins auf dem Bildschirm ausgeben

[Bearbeiten]
for i in range (1, 11):
    
    print i,   2*i,  3*i,  4*i,  5*i,  6*i,  7*i,  8*i,  9*i,  10*i

Die Java-Lösung. Ich hatte zunächst auch an eine weitere Schleife gedacht, weiß allerdings nicht, wie ich dann bei Python die Ausgabe in einer Zeile herstellen kann.

Berechnen von Noten aus Punktzahlen

[Bearbeiten]

Link

def notenberechnung (punkte):
    if punkte < 50:
        note = 5.0
    elif punkte >= 50 and punkte < 55:
        note = 4.7
    elif punkte >= 55 and punkte < 65:
        note = 4.0
    elif punkte >= 65 and punkte < 70:
        note = 3.7
    elif punkte >= 70 and punkte < 75:
        note = 3.3
    elif punkte >= 75 and punkte < 80:
        note = 3.0
    elif punkte >= 80 and punkte < 85:
        note = 2.7
    elif punkte >= 85 and punkte < 90:
        note = 2.3
    elif punkte >= 90 and punkte < 95:
        note = 2.0
    elif punkte >= 95 and punkte < 100:
        note = 1.7
    elif punkte >= 100 and punkte < 105:
        note = 1.3
    elif punkte >= 105 and punkte < 120:
        note = 1.0
    return (note)

punkte = input ("Bitte geben Sie die Punktzahl (0-120) ein: ")

if punkte <= 0 or punkte > 120:
    print "Ungueltige Eingabe."
else:
    print notenberechnung(punkte)

Wird leider nur über endlos-If-Schachtelung gelöst. Ich hatte auf eine Formel gehofft. --Python-Clown 02:11, 27. Apr. 2009 (CEST)

Die Funktion muss sich übrigens oberhalb ihres Aufrufs befinden, sonst kommt es zum Fehler.

Berechnen des Wochentags eines Datums

[Bearbeiten]

/Berechnen des Wochentags eines Datums

###
# P R O G R A M M   -   B E R E C H N E T   D E N   W O C H E N T A G
# Aufgabe: Fuer einen Tag (1 - 31), den Monat (1 - 12) und ein Jahr soll der zugehoerige Wochentag berechnet werden.
###

# V A R I A B L E N
januar    = 31
februar   = 28
maerz     = 31
april     = 30
mai       = 31
juni      = 30
juli      = 31
august    = 31
september = 30
oktober   = 31
november  = 30
dezember  = 31


# E I N G A B E
 
tag = input ("Bitte geben Sie den Tag (1 bis 31) ein: ")
monat = input ("Bitte geben Sie den Monat (1 bis 12) ein: ")
jahr = input ("Bitte geben Sie das Jahr ein: ")


# Pruefung der Eingabe - NICHT IMPLEMENTIERT
print "Protokoll: Pruefung nicht implementiert"
 
 
# B E R E C H N U N G
anzahl_tage = ( jahr - 1900 ) * 365 + ( jahr - 1900 ) // 4
print anzahl_tage

if monat <= 2 and (jahr-1900) % 4 == 0:
    anzahl_tage -= 1
    print "Protokoll: Schaltjahr, Anzahl Tage minus 1."

if monat == 1:
        anzahl_tage += tag 
elif monat == 2:
        anzahl_tage += januar + tag 
elif monat == 3:
        anzahl_tage += januar + februar + tag 
elif monat == 4:
        anzahl_tage += januar + februar + maerz + tag  
elif monat == 5:
        anzahl_tage += januar + februar + maerz + april + tag 
elif monat == 6:
        anzahl_tage += januar + februar + maerz + april + mai + tag 
elif monat == 7:
        anzahl_tage += januar + februar + maerz + april + mai + juni + tag 
elif monat == 8:
        anzahl_tage += januar + februar + maerz + april + mai + juni + juli + tag 
elif monat == 9:
        anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + tag 
elif monat == 10:
        anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + september + tag 
elif monat == 11 :   
        anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + september + oktober + tag 
elif monat == 12:
        anzahl_tage += januar + februar + maerz + april + mai + juni + juli + august + september + oktober + november + tag 
print anzahl_tage

wochentag = anzahl_tage  % 7
print "Protokoll:",  wochentag


# A U S G A B E 
 
if wochentag == 0:
    print "Sonntag"
elif wochentag == 1:
    print "Montag"
elif wochentag == 2:
    print "Dienstag"
elif wochentag == 3:
    print "Mittwoch"
elif wochentag == 4:
    print "Donnerstag"
elif wochentag == 5:
    print "Freitag"
elif wochentag == 6:
    print "Samstag"
else:
    print "Fehler"

Gewinnstrategie beim Roulette

[Bearbeiten]

Unfertig, erste Version

kapital = 1

for i in range (0, 1000000):
    kapital = kapital * 2
    
print kapital

Obiger Code hat etwas von einer Endlos-Schleife.

Musterlösung

Anzahl Bytes in passende metrische Einheit umwandeln

[Bearbeiten]
while True:
    print "Geben Sie 0 ein, um das Programm zu beenden."
    byte = input("Geben Sie eine Anzahl Bytes ein: ")

    if byte >= 1024 * 1024 * 1024:
        print byte,  "Byte sind",  byte * 1.0 / (1024 * 1024 * 1024),  "GByte."
    elif byte >= 1024 * 1024:
        print byte,  "Byte sind",  byte * 1.0/ (1024 *  1024),  "MByte."
    elif byte >= 1024:
        print byte,  "Byte sind",  byte * 1.0 / (1024),  "KByte."
    else:
        print byte,  "Byte sind",  byte * 1.0,  "Byte."

Durchaus interessante Musterlösung, allerdings halte ich 1024 für den Umrechnungswert!?

Berechnen Sie die Kreiszahl Pi mit dem Wallisschen Produkt

[Bearbeiten]

/PI, Lösung

Berechnen Sie abundante und vollkommene Zahlen

[Bearbeiten]

Objekt-Orientierung

[Bearbeiten]

Felder

[Bearbeiten]

Rekursion

[Bearbeiten]

Backtracking

[Bearbeiten]

Suchen

[Bearbeiten]

Sortieren

[Bearbeiten]

Java Interfaces

[Bearbeiten]

Sonstiges

[Bearbeiten]

Schildkrötengrafik

[Bearbeiten]

Anmerkungen

[Bearbeiten]