Come creare un prototipo di metodo Python

1

Se sto dando una domanda di codifica per interviste in Java, posso specificare la maggior parte della domanda semplicemente dando una firma del metodo. (Segue l'esempio inventato.)

public class Table {
  public String identifier;
  public int seatCount;
}

public static List<String> tablesWithEnoughSeats(List<Table> tables, int minSeats)

Se il candidato preferisce Python, come posso presentare il problema? La firma del metodo Python non specifica il tipo di dati. C'è qualche modo standard in Python per farlo?

Se guardo le sfide di codifica di Python online, tendono a specificare i requisiti come prendere determinati input per produrre determinati output. Non voglio che il candidato sprechi tempo a scrivere codice per analizzare un file di input. (Il mio esempio ha solo String e int, ma il problema dell'intervista potrebbe contenere dati più complessi.) Qual è il modo migliore per esprimere i vincoli dei parametri in modo che il candidato possa implementare l'algoritmo a cui sono interessato senza fare un po 'di tubature?

    
posta Jeremy Stein 07.01.2014 - 23:30
fonte

5 risposte

4

Prendi in giro i tuoi input. Dì "Supponiamo che questo array sia costituito da numeri interi o float o qualsiasi altra cosa". Puoi anche annotare cose con commenti.

Scriverò questo in Python in questo modo:

class Table: #identifier: string, seat_count: int
    def __init__(self, identifier, seat_count):
        self.identifier = identifier
        self.seat_count = seat_count

Sono incline a scrivere Python in modo funzionale, quindi creerò un'istanza di tabelle e poi chiamerò una funzione che controlla ogni tabella per vedere se ha abbastanza posti o meno. Probabilmente userò un filtro per questo. Potrebbe anche fare una comprensione della lista. Quest'ultimo è più "Pythonic".

    
risposta data 07.01.2014 - 23:46
fonte
2

Fornisci loro la struttura dei dati (spiega namedtuple se non l'hanno mai visto prima):

from collections import namedtuple
Table = namedtuple('Table', 'name seats')

Quindi mostrali come invocazione di esempio:

>>> tables = [
...     Table(name="First", seats=6),
...     Table(name="Second", seats=4)
... ]
>>> tablesWithEnoughSeats(tables, 5)
[Table(name="First", seats=6)]
    
risposta data 08.01.2014 - 00:37
fonte
1

O semplicemente usi annotazioni in funzione e commenti in classe?

class Table:
    def __init__(self, identifier, seat_count):
        self.identifier = identifier  # str
        self.seat_count = seat_count  # int

def tablesWithEnoughSeats(tables: [ Table ], minSeats: int) -> [str]:
    pass

ATTENZIONE: funziona solo in p3k, p2.x non supporta annotazioni. Userei invece i commenti:

def tablesWithEnoughSeats(tables,  # list of Table
                          minSeats # int
                          ):       # return list of str
    pass

Un'altra opzione è docstring con un linguaggio di marcatura, ma non mi piace molto questa idea.

    
risposta data 08.01.2014 - 11:04
fonte
0

Se la sintassi attuale non ha importanza per te (che sembra il caso), spiega la firma del metodo e consenti loro di scrivere pseudo-codice per compilare l'algoritmo. Quindi, è effettivamente irrilevante quale "lingua" scelgano di usare finché l'intervistato può spiegare il loro pensiero a te.

Non c'è nulla di male nel guidarli in qualche modo; per esempio affermando esplicitamente che non hai bisogno di loro per analizzare un file di input. Se scendono lungo tale percorso, dì qualcosa come "immagina di avere già una funzione per analizzare il file e restituisce una serie di stringhe, qual è il tuo prossimo passo?"

    
risposta data 07.01.2014 - 23:59
fonte
0

Mi aspetto che un programmatore sufficientemente preparato e con esperienza non abbia nemmeno bisogno del codice del metodo per una domanda fittizia (in pratica è una questione completamente diversa).

  • Sto gestendo un ristorante come una semplice lista di oggetti table
  • Ogni table ha un nome e un numero fisso di posti .
  • Dato un elenco di table s e un numero richiesto di postazioni per una determinata parte, scrivi un metodo che trova e restituisce un secondo elenco di tutte le tabelle che potrebbero ospitare quella parte.
  • Come extra opzionale, ordina l'elenco in modo da ridurre al minimo il numero di "posti sprecati" a un tavolo.

Ora, i nomi delle proprietà e la definizione della classe possono essere tutti astratti e possono raggiungere l'attività di scrittura del codice effettivo.

    
risposta data 08.01.2014 - 05:02
fonte

Leggi altre domande sui tag