Se hai svolto l'esercizio, lo hai anche eseguito, quindi Python ti avrebbe anche detto dove sono gli errori e se funziona o no. Comunque, l'idea è abbastanza corretta, serve solo correggere i due errori che ci sono:
Python è CASE SENSITIVE, quindi se una variabile la scrivi 'Velisti', dopo non puoi riferirti a 'velisti'.
I vettori iniziano da 0, quindi il range deve partire da 0.
C'è poi un errore nell'implementazione: secondo te, a che serve NRTessera?
Inoltre, sarebbe bene 'blindare' la funzione contro i casi limite: cosa succede se passo un NRTessera inesistente?
Cosa succede se uno od entrambi i vettori (Velisti e Barche) sono vuoti?
Sulla tua funzione si potrebbe poi obiettare che è poco 'pitonica', ma questo dipende dal livello di conoscenza di Python a cui si è arrivati.
Un esempio 'pitonico':
for Barca in Barche:
if Barca[3] and Barca[2] <= livello:
l.append(Barca[0])
Più pitonico ancora:
l = [Barca[0] for Barca in Barche if Barca[3] and livello>=Barca[2]]