@Fabio2002: Du könntest das Zeilenendezeichen ausgeben ('\n'), aber was ist an einem ``print()`` so schlimm? Und da die Leerzeile in beiden Fällen – gefunden und nicht gefunden – ausgegeben werden soll, könntest Du das vor der Schleife tun, und musst es deshalb nur *einmal* in den Code schreiben. Man könnte auch überlegen ob die Ausgabe der Leerzeile überhaupt in diese Funktion gehört, oder nicht doch eher Aufgabe des Aufrufers ist. Dann kann der nämlich entscheiden ob da eine Leerzeile ausgegeben werden soll oder nicht.
Ansonsten würde ich da noch die Einrückung einheitlich mit vier Leerzeichen pro Ebene machen.
Dann ist das ein bisschen ”asymmetrisch” das die „gefunden“-Ausgabe in Englisch, die „nicht gefunden“-Ausgabe aber in Deutsch ist. Ich würde da auch nicht von einer Liste sprechen, denn Du weisst an der Stelle ja gar nicht ob die Funktion tatsächlich mit einer Liste aufgerufen wurde. Deine Lösung funktioniert mit jedem Sequenztypen von dem man die Länge abfragen kann – nicht nur mit Listen.
An der Stelle noch mal der Hinweis, dass ``from i in len(range(sequence)):`` in Python ein „anti pattern“ ist. Man kann direkt über die Elemente von Sequenzen iterieren, ohne den Umweg über einen Index. Falls man zusätzlich noch eine laufende Zahl benötigt, gibt es die `enumerate()`-Funktion. Das hat den Vorteil das so eine Funktion nicht nur mit Sequenzen funktioniert, sondern mit jedem beliebigen iterierbaren Objekt.
Und falls man das wirklich nur für Sequenzen implementieren möchte, hat Sirius3 ja die Lösung dafür gezeigt die `index()`-Methode nicht noch einmal selbst zu implementieren.
Man sollte die Argumente auch anders bennenen, denn der Funktion ist es letztendlich ja völlig egal was in der übergebenen Sequenz enthalten ist, und auch `n` suggeriert dem Leser den Typ „ganze Zahl“. Die Funktion funktioniert aber mit Sequenzen die irgendwas enthalten. Du kannst da auch eine Liste mit den Namen von Eiscreme-Sorten übergeben und schauen an welchem Index 'Vanille' zu finden ist.
`generate_random_numbers()` würde ich als „list comprehension“ formulieren. Das wurde hier ja bereits in einem Beitrag gezeigt.
Code: Alles auswählen
#!/usr/bin/env python3
import random
def generate_random_numbers(size):
return [random.randint(-100, 100) for _ in range(size)]
def linear_search(items, needle):
for i, item in enumerate(items):
if item == needle:
print(f'{needle} found at index {i}')
break
else:
print(f'{needle} not found')
def main():
random_numbers = generate_random_numbers(100)
print(random_numbers)
print()
linear_search(random_numbers, 5)
if __name__ == '__main__':
main()