Python-Grundlagen und Code-Herausforderungen
Willkommen zum praktischen Übungsarbeitsbuch. Dieser Abschnitt enthält realistische Probleme, mit denen Sie Ihr grundlegendes algorithmisches Denken, Ihre Optimierungsstrategien und Ihre technischen Arbeitsabläufe testen können.
Community-Herausforderungen und externe Ressourcen
Um Ihre Übungsroutine über dieses Modulverzeichnis hinaus zu erweitern, erkunden Sie dieses kuratierte Repository mit strukturierten täglichen Programmiersprints:
- Externe Sprints: Break the Ice with Python – Externes tägliches Referenz-Repo für grundlegende Programmierübungen.
Übungsportfolio
1: TYPKONVERTIERUNG
Frage: Erstellen Sie ein Laufzeitkonsolenprogramm, das zur Eingabe eines Geburtsjahres auffordert, es in eine Ganzzahl umwandelt, das Alter basierend auf dem Jahr 2025 berechnet und es ausgibt.
Hinweis: Der Text von input() ist standardmäßig ein String (str). Sie müssen es in eine Ganzzahl umwandeln, um Berechnungen durchzuführen.
Konzept: Variablen und mathematische Operationen
birth_year = input("Enter your birth year: ")
age = 2025 - int(birth_year)
print (f'your age is: {age}')
2: PASSWORTPRÜFUNG
Frage: Erfassen Sie einen Benutzernamen und ein Passwort, berechnen Sie die Passwortlänge, maskieren Sie es mit Sternchen (*) und drucken Sie eine Bestätigungsnachricht aus.
Hinweis: Multiplizieren Sie ein Zeichenfolgenzeichen mit einer Ganzzahl (z. B. „*“ * 5), um es zu wiederholen. Verwenden Sie len() für die Länge.
Konzept: Strings & Indizierung & Variablen
username = input ("Enter your Username")
password = input ("Enter your password")
password_length = len(password)
hidden_password = password_length * '*'
print(f"Hey {username}, your password {hidden_password} is {password_length} letter long")
3: LOGISCHER OPERATOR
Frage: Werten Sie die booleschen Flags is_magician und is_expert aus, um abhängig von ihrer Fähigkeitskombination unterschiedliche Nachrichten zu drucken.
Hinweis: Kombinieren Sie logische Prüfungen mit und zusammen mit not für negative Zustandsauswertungen.
Konzept: Boolescher Typ und bedingte Logik
is_magician = True
is_expert = False
if is_magician and is_expert:
print('you are a master magician')
elif is_magician and not is_expert:
print('at least you\'re getting there')
elif not is_magician:
print('you need magic powers')
4: SCHWIERIGER ZÄHLER
Frage: Berechnen Sie die kumulative Gesamtsumme der Zahlen von 1 bis 10 innerhalb einer Sequenz, ohne die Zwischenschritte auszugeben.
Hinweis: Lassen Sie Ihre endgültige Druckanweisung vollständig außerhalb der Schleife eingerückt, um eine Iterationsprotokollierung zu vermeiden.
Konzept: Schleifen und Listen
myList = [1,2,3,4,5,6,7,8,9,10]
counter = 0 #we need varible on the outside of loop
for i in myList:
counter = counter + i
print(counter) #the print indentation to be outside of the loop to avoid iteration
5: INDEX-FINDER
Frage: Erzeugen Sie einen Bereich bis 100, scannen Sie die Sequenz und drucken Sie den genauen Listenindex aus, wenn der Wert 50 erreicht.
Hinweis: Die integrierte Funktion enumerate() generiert neben Schleifenelementen automatisch sequentielle Tracker-Schlüssel.
Konzept: Schleifen und Listen
for i,char in enumerate (list(range(100))):
if char == 50:
print (f'index of 50 is : {i}')
6: GUI-ÜBUNG
Frage: Schleife über eine verschachtelte mehrdimensionale Binärmatrix, um Sternchen (*) für echte Einträge und Leerzeichen für falsche Einträge auszugeben.
Hinweis: Legen Sie das Schlüsselwortargument end='' in Ihrer print-Anweisung fest, um automatische Zeilenumbrüche zu verhindern.
Konzept: Schleifen und Funktionen
picture = [
[0,0,0,1,0,0,0],
[0,0,1,1,1,0,0],
[0,1,1,1,1,1,0],
[1,1,1,1,1,1,1],
[0,0,0,1,0,0,0],
[0,0,0,1,0,0,0]
]
# Generates a Christmas tree
def show_tree():
for row in picture: #for loop, item, variable
for pixel in row: #nesting, item of item(pixels in row)
if pixel: #conditional logic, item & logical operator(pixel == 1) or just pixel because we don't need 1(its a truthy value)
print('*', end='') #Default behavior: newline after each print, using end=''empty string
else:
print(' ', end='')
print('') #need new line after every list
show_tree()
7: DUPLIKATE FINDEN
Frage: Extrahieren und isolieren Sie sich wiederholende doppelte Zeichen aus einer Rohliste in ein sauberes Validierungsarray ohne Wiederholung.
Hinweis: Verfolgen Sie Vorkommen mit .count() und verwenden Sie eine nicht bedingte Prüfung, um Duplikate zu vermeiden.
Konzept: Listen und bedingte Logik
some_list = ['a', 'b', 'c', 'd', 'b', 'm', 'n', 'n']
duplicates = []
for char in some_list:
if some_list.count(char) > 1:
if char not in duplicates: #avoids repeatability
duplicates.append(char)
#for loop, .count() & .append(), if, in & not
print(duplicates)
8: ÜBERPRÜFEN SIE DAS FAHRERALTER
Frage: Schreiben Sie eine Engine, die eine optionale Altersvariable auswertet, um unterschiedliche Fahrerberechtigungsprofile über drei Gates hinweg zu drucken.
Hinweis: Konfigurieren Sie einen sicheren Fallback-Wert (z. B. Alter = 0) direkt in Ihren Funktionsargumentdefinitionen.
Konzept: Funktionen und bedingte Logik
def checkDriverAge(age = 0):
if int(age) < 18:
print("Sorry, you are too young to drive this car. Powering off")
elif int(age) > 18:
print("Powering On. Enjoy the ride!")
elif int(age) == 18:
print("Congratulations on your first year of driving. Enjoy the ride!")
checkDriverAge()
9: FUNKTIONSÜBUNG
Frage: Erstellen Sie eine Funktion, die ungerade Ziffern aus einem Listenparameter löscht, die geraden Elemente extrahiert und die höchste gerade Zielzahl zurückgibt.
Hinweis: Verwenden Sie das Modulo-Parameterelement % 2 == 0, um Geraden zu ermitteln, und schließen Sie dann Ihr Endergebnis in max() ein.
Konzept: Funktionen und mathematische Operationen
def highest_even(li):
evens = []
for item in li:
if item % 2 == 0:
evens.append(item)
return max(evens)
print(highest_even([1,2,3,4,5,11,21,10]))
10: ÜBERALL KATZEN
Frage: Richten Sie einen dynamischen Basis-Blueprint zur Verfolgung von Katzenprofilen ein, instanziieren Sie drei Objekte und verwenden Sie ein funktionales Dienstprogramm, um das Top-Alter zu extrahieren.
Hinweis: Mit der Syntax *args kann eine Funktion eine variable Anzahl von Positionsargumenten sauber als iterierbare Liste verarbeiten.
Konzept: Objektorientierte Programmierung
class Cat:
species = 'mammal'
def __init__(self, name, age):
self.name = name
self.age = age
cat1 = Cat('whisker', 10)
cat2 = Cat('kitty', 3)
cat3 = Cat('jewels', 6)
def oldest_cat(*args):
return max(args)
print(
f'The oldest cat is {oldest_cat(cat1.age, cat2.age, cat3.age)} years old')
11: Vererbungsübung
Frage: Entwerfen Sie ein architektonisches Basisklassenlayout und Unterklassen, die polymorph identische Tracking-Verhaltensweisen ausführen.
Hinweis: Übergeben Sie untergeordnete Objekte innerhalb struktureller Tracking-Arrays, um benutzerdefinierte überschriebene Konfigurationen sauber auszuführen.
Konzept: Objektorientierte Programmierung
class Pets():
animals = []
def __init__(self, animals):
self.animals = animals
def walk(self):
for animal in self.animals:
print(animal.walk())
class Cat():
def __init__(self, name, age):
self.name = name
self.age = age
def walk(self):
return f'{self.name} is just walking around'
class Simon(Cat):
def sing(self, sounds):
return f'{sounds}'
class Sally(Cat):
def sing(self, sounds):
return f'{sounds}'
#1 Add another Cat
class Jerry(Cat):
def sing(self, sounds):
return f'{sounds}'
my_cats = [Simon('Simon', 5), Sally('Sally', 3), Jerry('Jerry', 4)]
my_pets = Pets(my_cats)
my_pets.walk()
12: LISTE ERWEITERN
Frage: Erbt vom nativen integrierten Listenprimitiv, überschreibt jedoch dessen Eigenschaft zur Berechnung der magischen Dunder-Länge, um 1000 zurückzugeben.
Hinweis: Durch die Unterklassifizierung von Grundelementen wie der Liste bleiben Kernverhalten wie .append() erhalten und gleichzeitig gezielte Dunder-Überschreibungen möglich.
Konzept: Objektorientierte Programmierung und Listen
class SuperList(list): #inheriting from built-in with parameter list
def __len__(self):
return 1000
super_list1 = SuperList()
print(len(super_list1))
super_list1.append(5)
print(super_list1[0])
print(issubclass(SuperList, list))
13: FUNKTIONALE PROGRAMMIERÜBUNG
Frage: Führen Sie Datenpipelines aus, indem Sie funktionale Methoden anwenden, um Arrays per Karte zu verändern, Paare per Zip zu sequenzieren und Daten mit Filter einzuschränken.
Hinweis: Reine Funktionsschritte verändern Sammlungen nicht direkt; Wrapping-Ausgaben in typexplizite Factorys wie list().
Konzept: Funktionale Programmierung
from functools import reduce
my_pets = ['sisi', 'bibi', 'titi', 'carla']
def capitalize (char):
return char.upper()
print(list(map(capitalize, my_pets)))
my_strings = ['a', 'b', 'c', 'd', 'e']
my_numbers = [5,4,3,2,1]
print(tuple(zip(sorted(my_numbers), my_strings)))
scores = [73, 20, 65, 19, 76, 100, 88]
def greater_50(num):
return num >= 50
print(list(filter(greater_50, scores)))
def accumulator(acc, item):
return acc + item
print(reduce(accumulator, (my_numbers + scores)))
14: Lambda-ÜBUNG
Frage: Erstellen Sie anonyme mathematische Transformationsformeln und führen Sie benutzerdefinierte Sortierpfade für Tupellisten unter Verwendung spezifischer sekundärer Indexschlüssel aus.
Hinweis: Geben Sie in Ihrem Schlüsselwortparameter .sort(key=...) eine Lambda-Skriptdefinition an, die auf Zielzuordnungskoordinaten verweist.
Konzept: Funktionale Programmierung und Tupel
my_list = [5,4,3]
print(list(map(lambda i: i ** 2, my_list)))
# List sorting
a = [(0,2), (4,3), (9,9), (10,-1)]
a.sort(key= lambda x: x[1]) #sorts according to second item in tuple
print(a)
15: VERSTEHENSÜBUNG
Frage: Refaktorieren Sie mehrzeilige Schleifen mithilfe von Listenverständnissen und Set-Castings, um doppelte Elemente in einem optimierten Betriebsschritt zu bereinigen.
Hinweis: Verschachteln Sie die Array-Prüfungen Ihrer Sammlung direkt innerhalb der Listenverfolgungsgrenzen [x für x in li if ...].
Konzept: Funktionale Programmierung und Mengen
some_list = ['a', 'b', 'c', 'd', 'b', 'm', 'n', 'n']
duplicates = list(set([x for x in some_list if some_list.count(x) > 1]))
print(duplicates)
16: DEKORATORÜBUNG
Frage: Entwickeln Sie ein Dekoratormuster für Funktionen höherer Ordnung mit dem Namen @authenticated, das Benutzerprofilaufrufe abfängt, um Tracking-Eigenschaften zu validieren.
Hinweis: Die Decorator-Wrapper-Ebene nimmt funktionale Argumente entgegen und prüft Indizes, bevor sie innere Ziele auslöst.
Konzept: Dekorateure
user1 = {
'name': 'Sorna',
'valid': True
}
def authenticated(fn):
def wrapper(*args, **kwargs):
if args[0]['valid']== True: #== True is not needed because it checks for truthy value
return fn(*args, **kwargs)
else:
return print('invalid user')
return wrapper
@authenticated
def message_friends(user):
print('message has been sent')
message_friends(user1)
17: ÜBUNG ZUR FEHLERBEHANDLUNG
Frage: Erzwingen Sie defensive Eingabepipelines innerhalb unendlicher Eingabesequenzen, die Berechnungs- und Strukturtypfehler ordnungsgemäß behandeln.
Hinweis: Verwenden Sie explizite Ausnahmeparameter wie „except ValueError:“ und führen Sie Teardown-Zustände mit „finally:“ aus.
Konzept: Fehlerbehandlung
while True:
try:
age = int(input('Enter your age:' ))
10/age
except ValueError:
print('please enter a valid number')
#continue #continue, if value error occurs. the code starts over
except ZeroDivisionError:
print('Enter value more than Zero')
break #breaks from the loop, does'nt print the actual age
else:
print('thank you')
#break #breaks out of the loop
finally:
print('ok, I am finally done')
print('can you hear me?') #it does'nt get printed until the break statement is present
18: FIBONACCI-ÜBUNG
Frage: Konstruieren Sie zwei numerische Progressionsrechner, die Sequenzgenerierungsmetriken über Listenarrays im Vergleich zu verzögert ausgewerteten Generatoren verfolgen.
Hinweis: Generatoren setzen die yield-Anweisung ein, um Elemente zurückzugeben, die Echtzeitzustände nacheinander verfolgen, anstatt Werte in RAM-Blöcken zu speichern.
Konzept: Generatoren
# generators keeps the value in same location and just prints it out instead of saving in the memory
def fib_gen(num):
a = 0
b = 1
for item in range(num):
yield a
temp = a
a = b
b = temp + a
for i in fib_gen(20):
print(i)
# list keep every value in different locations
def fib_list(num):
a = 0
b = 1
list = []
for item in range(num):
list.append(a)
temp = a
a = b
b = temp + a
return list
print(fib_list(20))
19: ERraten Sie eine Zahl
Frage: Codieren Sie eine interaktive Gaming-Schnittstelle, indem Sie ganzzahlige Kriteriengrenzen auswählen, Eingaben für die Schleifenanalyse auffordern und vor Abstürzen bei der Eingabe schützen.
Hinweis: Nutzen Sie Standard-Try/Except-Konstrukte über Ihre Konvertierungsebenen, um ungültige Syntaxanomalien sauber abzufangen.
Konzept: Module & Pakete & Fehlerbehandlung
import random
print('GUESS A NUMBER')
x = random.randint(1, 10)
# if argv[1] and argv[2]:
# x = randint(int(argv[1]), int(argv[2]))
# else:
print(x)
while True:
try:
guess = int(input('enter a numbers 1-10: '))
if guess is x:
print('You are a genius')
break
except ValueError:
print('you did something wrong')
continue
20: ÜBERSETZER
Frage: Erstellen Sie einen Automatisierungsschritt, der Terminalbefehle verwendet, um Abhängigkeiten herunterzuladen, Dateiströme zu analysieren und Übersetzungen zu protokollieren.
Hinweis: Stellen Sie Systempfade sicher umgeben von open(...)-Mustern bereit, um Automatisierungsregeln zum Öffnen/Schließen von Dateien nahtlos zu handhaben.
Konzept: Datei-I/O- und Entwicklungstools
import subprocess
subprocess.check_call([__import__('sys').executable, '-m', 'pip', 'install', 'translate'])
from translate import Translator
translator = Translator(to_lang='ja')
try:
with open("C:/Users/marwa/OneDrive/Desktop/test.txt", mode='r') as my_file:
text = my_file.read()
translation = translator.translate(text)
with open('./test-ja.txt', 'w') as my_file2:
my_file2.write(translation)
except FileNotFoundError as err:
print('file not found')