Topic: iterare al contrario  (Letto 3150 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline ivelios75

  • python neanderthalensis
  • ****
  • Post: 268
  • Punti reputazione: -3
    • Mostra profilo
iterare al contrario
« il: Luglio 26, 2013, 18:41 »
Ho fatto da solo quel ridicolo ersercizio del libro che  chiedeva di creare uno script per trasformare un numero da base 10 a 8.
Ma ora sta un problema ho cercato su internet e seguendo questo esempio: http://forum.masterdrive.it/python-69/leggere-contrario-sottostringe-59219/
Ma non ha dato risultati.

ecco il codice:

[codice]numero=input("Imetti un numero in base 10: ")
intero=int(numero)
for line in numero:
    line=intero%8
    intero=intero//8
    line=str(line)
    for i  in range(1,len(line)+1):
        print(line[-i])[/codice]

Comunque si ci ho ragionato ieri e oggi, mi sono preso una pausa, ho cercato di documentarmi su internet,piu di cosi non posso fare nulla.

Offline micio

  • python habilis
  • **
  • Post: 73
  • Punti reputazione: 0
    • Mostra profilo
Re: iterare al contrario
« Risposta #1 il: Luglio 26, 2013, 18:54 »
[codice]'ciao'[::-1][/codice]
ritorna
'oaic'

Offline ivelios75

  • python neanderthalensis
  • ****
  • Post: 268
  • Punti reputazione: -3
    • Mostra profilo
Re: iterare al contrario
« Risposta #2 il: Luglio 26, 2013, 19:15 »
perche questo?

[codice]numero=input("Imetti un numero in base 10: ")
intero=int(numero)
for line in numero:
    line=intero%8
    intero=intero//8
    line=str(line)
    print(line[::-1])[/codice]

Mi esce sempre il numero non rovesciato.
« Ultima modifica: Luglio 26, 2013, 19:17 da ivelios75 »

Offline Max74

  • python neanderthalensis
  • ****
  • Post: 383
  • Punti reputazione: 0
    • Mostra profilo
Re: iterare al contrario
« Risposta #3 il: Luglio 26, 2013, 19:24 »
Ho fatto da solo quel ridicolo ersercizio del libro che  chiedeva di creare uno script per trasformare un numero da base 10 a 8.
Ma ora sta un problema ho cercato su internet e seguendo questo esempio: http://forum.masterdrive.it/python-69/leggere-contrario-sottostringe-59219/
Ma non ha dato risultati.

ecco il codice:

[codice]numero=input("Imetti un numero in base 10: ")
intero=int(numero)
for line in numero:
    line=intero%8
    intero=intero//8
    line=str(line)
    for i  in range(1,len(line)+1):
        print(line[-i])[/codice]

Comunque si ci ho ragionato ieri e oggi, mi sono preso una pausa, ho cercato di documentarmi su internet,piu di cosi non posso fare nulla.

Non ho capito cosa stai facendo. Prima inserisci un intero.
poi cerchi di iterarlo, e non mi sembra che gli interi siano iterabili...
quindi dividi l'intero per 8 assegnano il valore ad una variabile locale già assegnata (e non una qualsiasi)
poi fai una coversione della stessa variabile in stringa
poi... vabbeh, mi fermo.
Scopiazzare il codice qua e la non ti è di nessun aiuto, anzi stai regredendo.

Offline Max74

  • python neanderthalensis
  • ****
  • Post: 383
  • Punti reputazione: 0
    • Mostra profilo
Re: iterare al contrario
« Risposta #4 il: Luglio 26, 2013, 19:26 »
perche questo?

[codice]numero=input("Imetti un numero in base 10: ")
intero=int(numero)
for line in numero:
    line=intero%8
    intero=intero//8
    line=str(line)
    print(line[::-1])[/codice]

Mi esce sempre il numero non rovesciato.

Quel codice non può funzionare. Allora, non ho il libro, cosa ti chiede esattamente?

Offline ivelios75

  • python neanderthalensis
  • ****
  • Post: 268
  • Punti reputazione: -3
    • Mostra profilo
Re: iterare al contrario
« Risposta #5 il: Luglio 26, 2013, 19:46 »
Per prima cosa non l ho copiato da nessuna parte :P.
Secondo il libro chiede  uno script che converta un numero da base 10 a base 8, l ho fatto, funziona però vorrei che me lo leggesse al contrario (cioe dalla parte giusta), e comunque:

"Non ho capito cosa stai facendo. Prima inserisci un intero.
poi cerchi di iterarlo, e non mi sembra che gli interi siano iterabili...
quindi dividi l'intero per 8 assegnano il valore ad una variabile locale già assegnata (e non una qualsiasi)
poi fai una coversione della stessa variabile in stringa
poi... vabbeh, mi fermo."
Il codice tranne per quel fatto che non lo legge al contrario funziona ;)

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3.124
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re: iterare al contrario
« Risposta #6 il: Luglio 26, 2013, 20:10 »
ivelios75, ogni volta con te è la stessa storia, sai far meglio dell'U.C.A.S. (Ufficio Complicazione Affari Semplici)!  :devil:

Nel testo dell'esercizio c'era anche scritto che l'algoritmo da usare era simile (in realtà è uguale) a quello usato in decimalToBinary.py.
Bastava usare quello ed eri a posto.

A dispetto di tutto anche la tua soluzione in qualche modo funziona, ma ha il difetto di produrre il risultato a contrario,
da cui la tua richiesta che all'inizio non capivo:
[codice]Imetti un numero in base 10: 42
2
5[/codice]
La soluzione corretta infatti è 52 ma è stampata al contrario.

Offline Max74

  • python neanderthalensis
  • ****
  • Post: 383
  • Punti reputazione: 0
    • Mostra profilo
Re: iterare al contrario
« Risposta #7 il: Luglio 26, 2013, 20:14 »
Per prima cosa non l ho copiato da nessuna parte :P.
Secondo il libro chiede  uno script che converta un numero da base 10 a base 8, l ho fatto, funziona però vorrei che me lo leggesse al contrario (cioe dalla parte giusta), e comunque:


Aaah, ho capito cosa vuoi fare. Mi era sembrato che iterassi l'intero, invece iteri la stringa.
 E comunque non funziona neanche senza rovesciare il numero e non può funzionare. Prova ad inserire 99, il risultato sarà 34 invece di 134. Prova ad inserire 550. Avrai lo stesso errore.
Iteri la stringa, quindi con "99" fai due iterazioni, ma il numero ottale è fatto da 3 cifre, quindi l'ultimo numero non lo calcola proprio.
Inoltre stai cercando di leggere al contrario una stringa composta da una sola lettera. E' ovvio che ti restituisca sempre la stessa.

Ma se si trattava di convertire un numero, perché usi le stringhe?

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.655
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re: iterare al contrario
« Risposta #8 il: Luglio 26, 2013, 20:17 »
Per prima cosa non l ho copiato da nessuna parte :P.
Secondo il libro chiede  uno script che converta un numero da base 10 a base 8, l ho fatto, funziona però vorrei che me lo leggesse al contrario (cioe dalla parte giusta), e comunque:

"Non ho capito cosa stai facendo. Prima inserisci un intero.
poi cerchi di iterarlo, e non mi sembra che gli interi siano iterabili...
quindi dividi l'intero per 8 assegnano il valore ad una variabile locale già assegnata (e non una qualsiasi)
poi fai una coversione della stessa variabile in stringa
poi... vabbeh, mi fermo."
Il codice tranne per quel fatto che non lo legge al contrario funziona ;)

Il tuo codice non "legge" nulla al contrario, semmai codifica un numero da base 10 a base 8 e stampa le sue cifre al contrario. Premesso questo, a parte che quel codice ha dei nomi di variabili che fanno spavento (for line in numero è una mostruosità) e non credo che ne benefici la tua comprensione. Guarda come diventa più leggibile cambiando i nomi:

[codice]
stringa = input("Immetti un numero in base 10: ")  
valore = int(stringa)  
for ch in stringa:  
    cifra = valore % 8  
    valore = valore // 8  
    cifra_str = str(cifra)  
    print(cifra_str, end=" ") #[::-1] è inutile, in quanto quella cifra assume valori tra 0 e 7, che invertiti non cambiano, end=" " serve per non andare a capo
[/codice]

Oltretutto, per non stampare le cifre al contrario devi memorizzarle in una qualche struttura dati, cosa che al momento non credo che tu conosca.

Per prima cosa non l ho copiato da nessuna parte :P.
Secondo il libro chiede  uno script che converta un numero da base 10 a base 8, l ho fatto, funziona però vorrei che me lo leggesse al contrario (cioe dalla parte giusta), e comunque:


Aaah, ho capito cosa vuoi fare. Mi era sembrato che iterassi l'intero, invece iteri la stringa.
 E comunque non funziona neanche senza rovesciare il numero e non può funzionare. Prova ad inserire 99, il risultato sarà 34 invece di 134. Prova ad inserire 550. Avrai lo stesso errore.
Iteri la stringa, quindi con "99" fai due iterazioni, ma il numero ottale è fatto da 3 cifre, quindi l'ultimo numero non lo calcola proprio.
Inoltre stai cercando di leggere al contrario una stringa composta da una sola lettera. E' ovvio che ti restituisca sempre la stessa.

Ma se si trattava di convertire un numero, perché usi le stringhe?

Ottima osservazione, io non capisco perché converti il numero in stringa ed iteri sulle cifre. Il modo corretto di farlo (che non ti rivelerò), non converte il numero in stringa.

Offline ivelios75

  • python neanderthalensis
  • ****
  • Post: 268
  • Punti reputazione: -3
    • Mostra profilo
Re: iterare al contrario
« Risposta #9 il: Luglio 26, 2013, 20:26 »

"Aaah, ho capito cosa vuoi fare. Mi era sembrato che iterassi l'intero, invece iteri la stringa.
 E comunque non funziona neanche senza rovesciare il numero e non può funzionare. Prova ad inserire 99, il risultato sarà 34 invece di 134. Prova ad inserire 550. Avrai lo stesso errore.
Iteri la stringa, quindi con "99" fai due iterazioni, ma il numero ottale è fatto da 3 cifre, quindi l'ultimo numero non lo calcola proprio.
Inoltre stai cercando di leggere al contrario una stringa composta da una sola lettera. E' ovvio che ti restituisca sempre la stessa."

Risolto questo errore:

[codice]numero=input("Imetti un numero in base 10: ")
intero=int(numero)
for line in range(len(numero)+1):
    line=intero%8
    intero=intero//8
    line=str(line)
    print(line[::-1])[/codice]

Offline Max74

  • python neanderthalensis
  • ****
  • Post: 383
  • Punti reputazione: 0
    • Mostra profilo
Re: iterare al contrario
« Risposta #10 il: Luglio 26, 2013, 20:50 »

"Aaah, ho capito cosa vuoi fare. Mi era sembrato che iterassi l'intero, invece iteri la stringa.
 E comunque non funziona neanche senza rovesciare il numero e non può funzionare. Prova ad inserire 99, il risultato sarà 34 invece di 134. Prova ad inserire 550. Avrai lo stesso errore.
Iteri la stringa, quindi con "99" fai due iterazioni, ma il numero ottale è fatto da 3 cifre, quindi l'ultimo numero non lo calcola proprio.
Inoltre stai cercando di leggere al contrario una stringa composta da una sola lettera. E' ovvio che ti restituisca sempre la stessa."

Risolto questo errore:

[codice]numero=input("Imetti un numero in base 10: ")
intero=int(numero)
for line in range(len(numero)+1):
    line=intero%8
    intero=intero//8
    line=str(line)
    print(line[::-1])[/codice]
Adesso hai il problema opposto, se iteri 100 (o qualunque valore che ha lo stesso numero di cifre in decimale e in ottale) hai un valore in più.
Ma non hai risolto neanche il problema precedente, infatti per valori alti, tipo 9999999999 l'errore permane, perché in ottale ci sono due cifre in più che in decimale.
Un consiglio? Lascia perdere l'iterazione sulla stringa, sulla lunghezza della stessa e cambia approccio.

Offline ivelios75

  • python neanderthalensis
  • ****
  • Post: 268
  • Punti reputazione: -3
    • Mostra profilo
Re: iterare al contrario
« Risposta #11 il: Luglio 26, 2013, 20:53 »
e quale approccio?

Però 2  balle cosi per un problemino del cavolo 3 giorni..

Offline Giornale di Sistema

  • python sapiens sapiens
  • ******
  • Post: 3.124
  • Punti reputazione: 4
    • Mostra profilo
    • Distillato di Python
Re: iterare al contrario
« Risposta #12 il: Luglio 26, 2013, 21:56 »
Però 2  balle cosi per un problemino del cavolo 3 giorni..

La responsabilità è unicamente tua.

Ti ricordo ancora una volta che nel testo dell'esercizio c'era chiaramente indicato che l'algoritmo da usare
era quello usato in decimalToBinary.py del paragrafo 4.3.2.

Era lo stesso identico algoritmo, l'unica cosa da sostituire era un 8 al posto di 2 perché la base era diventata ottale.
5 secondi al massimo, altro che 3 giorni.

Offline ivelios75

  • python neanderthalensis
  • ****
  • Post: 268
  • Punti reputazione: -3
    • Mostra profilo
Re: iterare al contrario
« Risposta #13 il: Luglio 26, 2013, 22:35 »
cmq non e proprio  uguale e non capisco come i numeri gli escano non rovesciati.

Certo che mi sono fatto una brutta reputazione tutti a rispondermi scontrosamente

Offline GlennHK

  • python sapiens sapiens
  • ******
  • Post: 1.655
  • Punti reputazione: 1
    • Mostra profilo
    • La Tana di GlennHK
Re: iterare al contrario
« Risposta #14 il: Luglio 26, 2013, 22:59 »
cmq non e proprio  uguale e non capisco come i numeri gli escano non rovesciati.

Certo che mi sono fatto una brutta reputazione tutti a rispondermi scontrosamente

E' il modo in cui tu ti proponi a indisporre gli altri. In pochi giorni hai espresso più di una richiesta continuando a lamentarti che non sai fare niente, invece di provare da solo ad arrivare alla soluzione hai aspettato che te la scrivessero gli altri, ti è stato spiegato più di una volta in che direzione procedere e hai ignorato i suggerimenti.