Topic: Aiuto...prossimo ad esame.  (Letto 514 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline siva99

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
Aiuto...prossimo ad esame.
« il: Gennaio 31, 2018, 19:18 »
allora vi spiego subito.
sono al primo anno di università(Ingegneria informatica e biomedica).
Ora, sono nel panico dato che non ho avuto la possibilità di frequentare,e tra pochi giorni avrò l'esame su python.
mi sto esercitando se non fosse che venendo da un industriale ed avendo studiato java, incasino sempre il tutto e vi lascio immaginare.
la traccia di uno degli esercizi è questa:
******************
"""Si scriva un metodo main che legge da tastiera un vettore di interi V1 e un vettore di double V2 di lunghezza rispettivamente n e m (anch’essi letti da tastiera) e
1) calcoli la media degli elementi in posizione pari del vettore V1
2) verifichi che non esiste nessun elemento del vettore V2 uguale alla suddetta media e stampa su output la stringa
“verifica positiva” se la verifica ha avuto esito positivo, “verifica negativa” in caso contrario.
Ad esempio, se V1 = [1, 2, 3, 5, 8, 5] e V2 = [10.8, 7.5, 6.4], la media sarà pari a 4.0 e quindi la verifica darà esito positivo
perché non esiste nessun elemento del secondo vettore pari a 4.0."""
******************************
mi incasinano anche semplici parole come "main" dato che a livello teorico di python non sono un granchè(sono vicino allo 0); vi posso assicurare però che anche conoscendo poco
riesco a modificare un programma fin quando non arrivo a quello che serve a me.
se qualcuno può aiutarmi lo faccia...grazie in anticipo.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:Aiuto...prossimo ad esame.
« Risposta #1 il: Gennaio 31, 2018, 19:57 »
Mah.
La prima cosa da dire è che in python non esiste il concetto di "vettore" e non esiste il concetto di "double". Quelle che vedi nell'esempio (V1 e V2) sono due *liste*, una composta da oggetti di tipo *integer*, l'altra da oggetti di tipo *float*. Ora, anche lasciando perdere l'uso di espressioni molto dubbie come "leggere da tastiera" (eh??), o peggio ancora "metodo" quando molto probabilmente vuole dire "funzione"..., c'è seriamente da chiedersi se chi ha scritto l'esercizio abbia dimestichezza con python.
Se chi ha scritto l'esercizio è il tuo professore, io onestamente al posto tuo andrei a chiedergli se ha dimestichezza con python. Dopo tutto, non sei alla scuola dell'obbligo. Stai *pagando* per ricevere un insegnamento, mi sembra il minimo chiedere al professore se conosce quello che sta insegnando.

Seconda cosa. Se sei "a qualche giorno" da un "esame su python" e non hai la capacità neppure di iniziare a capire un esercizio molto elementare, allora che senso ha dare l'esame? Non puoi imparare python in pochi giorni. E la soluzione di *un* esercizio non ti sarà di nessun aiuto, non puoi letteralmente neanche capirla. Dai l'esame alla prossima sessione, non sarà la fine del mondo.

Offline caronte

  • python erectus
  • ***
  • Post: 221
  • Punti reputazione: 0
    • Mostra profilo
Re:Aiuto...prossimo ad esame.
« Risposta #2 il: Gennaio 31, 2018, 21:14 »
e dovevi frequentare...

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:Aiuto...prossimo ad esame.
« Risposta #3 il: Gennaio 31, 2018, 23:23 »
e dovevi frequentare...
Mah... non giurerei che frequentare le lezioni di un professore che dà un esercizio così formulato sia proprio il modo più proficuo di impiegare il proprio tempo, ma sì, in linea generale concordo.

Comunque (che poi non si dica che qui non vogliamo aiutare), ecco la mia bozza di soluzione. C'è qualche scorciatoia rispetto alle cose più insensate dell'esercizio, e almeno un tentativo (non soddisfacente) di affrontare il noto problema dei float che il prof mostra di non aver capito.

def mean_of_evens(a_list):
    if len(a_list) < 2:
        return 0
    evens = a_list[1::2]
    mean = sum(evens) / len(evens)
    return float(format(mean, '.2f'))


def is_not_in_list(n, a_list):
    return n not in a_list


def do_check(first_list, second_list):
    return is_not_in_list(mean_of_evens(first_list), second_list)


def test():
    test_cases = (
        ([], [1, 2, 3, 4], True),
        ([], [3, 5, 0, 3], False),
        ([2], [5, 7], True),
        ([1], [0, 5, 7], False),
        ([1, 2, 3, 4, 5, 6], [1, 4, 3], False),
        ([1, 2, 3, 4, 5, 6], [1, 4.0, 3], False),
        ([1, 2.0, 3, 4, 5, 6], [1, 4, 3], False),
        ([1, 6, 3, 4, 5, 6], [5.33], False),
        ([1, 6, 3, 4, 5, 6], [5.333], True), # FIXME should be False?!
        ([1, 2, 3, 5, 8, 5], [10.8, 7.5, 6.4], True), # the OP example
            )
    return all([do_check(first, second)==res
                 for first, second, res in test_cases])


def ask_user_for_a_list():
    print('Enter one list item at a time.')
    print('Items can be integer or decimal values.')
    print('Please use . (dot) as a decimal separator!')
    print('Enter "x" to terminate.')
    a_list = []
    while True:
        item = input('Next: ')
        if item in 'xX':
            print('Finished. Here is the list you just inserted:')
            print(a_list)
            print('\n')
            return a_list
        try:
            a_list.append(float(item))
        except ValueError:
            print('Invalid item, please try again.')


def main():
    assert test()
    first_list = ask_user_for_a_list()
    second_list = ask_user_for_a_list()
    check = do_check(first_list, second_list)
    res = 'check is positive' if check else 'check is negative'
    print(res)


if __name__ == '__main__':
    main()

Mah. In bocca al lupo all'OP, credo.
« Ultima modifica: Febbraio 01, 2018, 08:55 da RicPol »

Offline riko

  • python deus
  • *
  • moderatore
  • Post: 7.453
  • Punti reputazione: 12
    • Mostra profilo
    • RiK0 Tech Temple
Re:Aiuto...prossimo ad esame.
« Risposta #4 il: Febbraio 01, 2018, 10:14 »
Ric, piu' ci penso e piu'... ma hai *idea* della gente che entra in aula? Non entra gente che vuole imparare (qualcosa -- qualcuno si, ma non puoi fare lezione solo per quelli). Il che vuole dire che avere aspettive troppo alte vuole solo dire perdersi 2/3 della classe. Pensa a quell'esercizio. Pensa a quanto e' elementare. Ora, se quell'esercizio e' un challenge allo stato attuale, come pensi di potere affrontare i float come si deve?

Lo puoi fare, ma poi il corso di programmazione I diventa da 30 crediti. Oggettivamente fintanto che c'e' un altro corso (obbligatorio) che colma la lacuna, direi che non e' un gran problema. Poi il docente magari ha fatto un accenno su come fare/non fare la cosa e qualcuno lo ha colto qualcuno no. Non sappiamo: OP mi sembra di avere capito che e' uno studente lavoratore.

Ma al di la di tutto e' beside the point. Qui il punto e' che li sta facendo esercitare con indici e cicli. Perche'? Perche' non lo hanno mai fatto. Sebbene programmare sia elementare quanto scrivere e fare di conto (per lo meno nella sua forma piu' algoritmica e su problemi semplici), per molte persone e' qualcosa cui si arriva a 20 anni invece che a 6. E quindi l'effetto e' come di vedere qualcuno che va in universita' e gli fanno le tabelline. Toh... le espressioni, via.

Cioe' effettivamente questo tipo di esercizio non e' elementare per lo studente medio. Cioe', e' facile e si fa all'inizio, ma rappresenta comunque una sfida o comunque qualcosa che richiede attenzione. E si, formula bene, e questo no... sai che sono d'accordo in principio. Ma non ha nemmeno senso fare dieci volte la fatica per includere informazione preziosa che poi gli studenti non colgono. Anche perche' tanto non puo' essere quella la barra: tanto piu' di tanto non puoi bocciare e in modo velato o meno devi comunque riscalare i voti verso l'alto per controllare il numero di bocciature.

Quindi fai fatica per dare informazione complicata a qualcuno che non e' pronto per riceverla/non gli interessa. Gliela puoi chiedere, ma se non la sa lo devi promuovere lo stesso. Che fai? Semplicemente prepari un programma se vuoi molto minimale ma che almeno puoi chiedere (e rimuovi l'ambiguita' allo studente: se spieghi troppe cose alla fine non sanno quali sono quelle importanti da ricordare davvero). Ho mai raccontata quella del flow-chart con if a tre vie?

Da cui quell'esercizio, mi aspetto, viene nemmeno molto riadattato da qualunque linguaggio facessero prima. Ed e' un problema? No. Alla fine il punto e' un'esercizio su indici e cicli. E grosso modo e' necessario.

La demografica e' cambiata: ai miei tempi, la maggior parte aveva qualche grado di passione (e di abilita' pregressa -- almeno quelli che andavano avanti). Qui da noi avevano un corso interessantissimo: non c'era programmazione I. Se volevi entrare, portavi un portfolio di progetti che dimostravano che sapevi programmare (e mi sembra un colloquio per evitare copiature). Guarda caso la gente che ci andava era brava. E potevi tranquillamente cominciare a concentrarti da subito ad insegnare cose interessanti. Adesso quel corso e' chiuso. Non abbastanza iscritti.

Perche' fare IT e' "avere un mestiere". E prima o poi sarebbe successo.


Detto questo, per OP... come e' possibile programmare da almeno 3-5 anni e avere problemi con "main"? Comunque lasciati dare un consiglio: non pensare di fare un esame in 5 giorni. Mettiti a studiare, *impara* a programmare e poi vedrai che il resto viene da se.

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.862
  • Punti reputazione: 9
    • Mostra profilo
Re:Aiuto...prossimo ad esame.
« Risposta #5 il: Febbraio 01, 2018, 11:53 »
> ma hai *idea* della gente che entra in aula?

Non mi riferivo alla media della gente che entra in aula. Mi riferivo in specifico all'OP, e mi/gli chiedevo se la sua intenzione era di stare in quella media, o anche più in basso, oppure di farsi delle domande un po' più adulte su se stesso, cosa vuole fare del limitato tempo che ha a disposizione, e di conseguenza anche farsi domande sulla qualità dell'insegnamento che sta ricevendo. Poi le risposte possono essere molteplici, eh? Del tipo, cambio università, studio per conto mio ma sul serio, etc. etc.

>  Qui il punto e' che li sta facendo esercitare con indici e cicli.

Uhm, questo non lo avevo capito... sorry. Probabilmente dovevo scrivere una soluzione più orientata a indici e cicli, allora. Ops.

> Ora, se quell'esercizio e' un challenge allo stato attuale, come pensi di potere affrontare i float come si deve?

Ah no, qui probabilmente stiamo parlando di cose diverse. Io non sto parlando della comprensione che ha l'OP (e la media della classe) dei float. Do per scontato che l'OP non abbia le idee chiare sui float, figurati, non ce le ho io per primo.
No, io sto parlando del livello di comprensione che ha *il professore* dei float. Perché questo sembra un esercizio scritto da uno che non ha capito i float. O per lo meno, che non si è reso conto che qui senza una comprensione dei float si ottengono molto facilmente risultati molto sbagliati/inaspettati.
Che te lo dico a fare? Ma insomma, per completezza e rispetto in generale di chi legge questo thread...
Il problema qui è che l'esercizio assume che uno faccia la media nel modo "ovvio", con la divisione: sum(a_list) / len(a_list). E questo naturalmente restituisce un float nel caso generale. Ora: va bene un float per rappresentare una media? Certamente. Il problema, come per tutti i tipi di dato, è *quali operazioni* poi uno si aspetta di fare su quel dato, e con *quali risultati* attesi. E viene fuori che un float è particolarmente debole quando vuoi fare comparazioni esatte (uguaglianze). E guarda caso, questo esercizio ti chiede poi *per l'appunto* di fare una comparazione esatta tra un float e un altro float. Ops.

Ora, così come per scrivere un libro per bambini ci vuole un genio della letteratura, anche per scrivere un esercizio *molto semplice* bisogna avere una grande dimestichezza con i concetti più complessi. Altrimenti è facile poi scrivere un esercizio risolvendo il quale i tuoi allievi cascheranno in trappole complicatissime da cui tu stesso avrai difficoltà a tirarli fuori.
Nel caso specifico: se voglio che i miei allievi si concentrino su cicli e indici di liste, allora perché (perché, perché, perché?!??! c***azzo) ci metto dentro una media-e poi-confronto? Una divisione-e-poi-confronto? Se sono un professore di informatica, *devo saperlo* che una media mi produce un float, e che poi confrontare i float è un calvario.
Che cosa mi costa scrivere l'esercizio dicendo:
"fate la S-O-M-M-A degli elementi pari della lista, e poi verificate che non compaia nell'altra lista"
invece che
"fate la M-E-D-I-A degli elementi pari della lista, e poi verificate che non compaia nell'altra lista"?
Se faccio la somma non ho più problemi di float, resto nel regno degli interi, e mi concentro sul tema vero dell'esercizio senza nessuna trappola nascosta. Facile, vero? Già. A pensarci. Ma capisci, la pigrizia mentale... "fare la media" è un'operazione più comune di "fare la somma", e quindi il nostro allegro prof scrive "fate la media" e poi va a fare shopping con la moglie senza pensarci su un secondo di troppo. Tanto nella mia classe sono tutti delle bestie, cosa vuoi che mi freghi. E poi non sono pagato abbastanza (ah, questa soprattutto: non sono MAI pagati abbastanza, a sentirli).

Considera inoltre, d'altra parte, tutto lo spreco di energie che questo professore ci mette a specificare che la prima lista deve essere di integer e la seconda di float (anche se li chiama in modo sbagliato, ma stendiamo un velo pietoso...). Questo dovrebbe comportare, da parte dello studente che ha un minimo di zelo, una validazione dell'input diversa per le due liste, ovvero uno spreco di tempo e di energia che ti distoglie ancora dal focus dell'esercizio. Ma evidentemente il professore non sa, o non ha capito, o non ha dimestichezza con quello che ha capito, che python gestisce le comparazioni tra integer e float in modo trasparente. Per quel che vale, si possono mescolare allegramente integer e float in entrambe le liste a piacere, e il risultato non cambia (e neanche i problemi nascosti, ovviamente).


Ora, che cosa vuoi che pensi di un professore che dà un esercizio così? Pagato dallo Stato?
Poi per carità, l'OP farà tutte le sue valutazioni e le sue scelte di vita.
Ma non stiamo a parlare della qualità degli studenti, quando il problema è la qualità dell'insegnamento prima di tutto.
« Ultima modifica: Febbraio 01, 2018, 11:55 da RicPol »

Offline siva99

  • python unicellularis
  • *
  • Post: 2
  • Punti reputazione: 0
    • Mostra profilo
grazie
« Risposta #6 il: Febbraio 01, 2018, 17:40 »
vi ringrazio a tutti ragazzi.
vi parlo in modo molto schietto.
non ho mai chiesto aiuto a nessuno,soprattutto su queste cose che personalmente mi sono sempre piaciute, ma quando ci si trova così...comunque...
Succo del discorso?
Non ho iniziato come si doveva, ed ora sono qui(classico studente in crisi) per semplice colpa mia.
Non mi pento di aver fatto questo genere di "esperienza", anche perchè meglio alla prima sessione d'esami che non a fine anno(dove di solito ci si sente di potersi mangiare il mondo con meno di un "pugno di mosche" e poi sappiamo tutti come va a finire...)
Grazie ancora a tutti per la disponibilità e scusate per il disturbo...