berechnen, welche Schiffe übrig sind erste, bevor if
zu verwenden, wenn es zu testen, waren alle: erste
left_names = [name for name, size in Ships if name[0] in ships_left]
if left_names:
print(left_names[0])
Durch die Berechnung, welche Schiffe bleiben, können Sie das Ergebnis sowohl für die if
Test wiederverwenden und die print()
Funktion; Andernfalls müssten Sie zweimal dieselbe Berechnung durchführen.
Sie brauchen auch nicht zwei Schleifen; Sie müssen nur Ihre Ships
Liste durchlaufen und jeden Namen gegen die ships_left
Liste prüfen. Ich würde ships_left
einen Satz machen, jedoch für eine schnellere Mitgliedschaft Prüfung:
ships_left = {"A", "B", "S", "D", "P"}
Mitgliedschaft Tests in einer Liste führen zu N Stufen (wobei N die Länge der Liste ist), während in einer Reihe Mitgliedschaft Prüfung dauert konstante Zeit (O (1)). Dies macht ein Schiff zu entfernen, sobald es versenkt worden (oder auf dem Brett platziert) einfach und schnell zu:
ships_left.remove(name[0])
Sie die next()
Funktion mit einem Generator Ausdruck verwenden könnten, wenn man nur das erste Spiel müssen; dies vermeidet alle Namen zu extrahieren:
ship_left = next((name for name, size in Ships if name[0] in ships_left), None)
if ship_left:
print(ship_left)
Demo:
>>> Ships = [
... ["Aircraft Carrier", 5],
... ["Battleship", 4],
... ["Submarine", 3],
... ["Destroyer", 3],
... ["Patrol Boat", 2]
... ]
>>> ships_left = {"A", "B", "S", "D", "P"}
>>> next((name for name, size in Ships if name[0] in ships_left), None)
'Aircraft Carrier'
>>> ships_left.remove('A')
>>> next((name for name, size in Ships if name[0] in ships_left), None)
'Battleship'
>>> ships_left.clear() # remove all ships
>>> next((name for name, size in Ships if name[0] in ships_left), None) is None
True
Können Sie uns die erwartete Ausgabe zur Verfügung stellen? – Aurel
Können Sie die Logik und was Sie wollen als Ausgabe erklären, warum über alle Schiffe iterieren, wenn Sie nur die erste Übereinstimmung wollen? –
In welchem Zustand testen Sie? Was bedeutet "* eigentlich *"? Sie haben uns nicht gesagt, was Sie erreichen wollen. – cdarke