Visualizza post

Questa sezione ti permette di visualizzare tutti i post inviati da questo utente. N.B: puoi vedere solo i post relativi alle aree dove hai l'accesso.


Post - spiritoserio

Pagine: 1 [2] 3 4
16
Base / Re: Aiuto cicli
« il: Novembre 23, 2013, 15:42 »
[codice]
or riga ==  num_colonne-colonna+1
[/codice]

Si, esprimendo riga in funzione di colonna, o al contrario esprimendo colonna in funzione di riga,
che era la formulazione nei tuoi programmi precedenti:
[codice]or colonna == num_colonne - riga + 1[/codice]


corretto.

però mi sfugge una cosa:

colonna parte da 1 quindi in questo caso colonna come fa ad essere uguale a 10-2=8 ?
non riesco a raffigurare nella mia testa le colonne.

il primo For mi stampa la prima riga da 1 a num_righe , poi la seconda poi la terza e cosi via....
quando arriva a num_righe(MAX) passa a capo e stampa una nuova riga.

ma colonna invece non riesco ad organizzarlo nella mia testa.

quindi se parte da 1 come fa ad essere uguale a num_colonne - riga+1 ?

17
Base / Re: Aiuto cicli
« il: Novembre 23, 2013, 14:44 »
 
Se hai un valore Z che varia da 1 a N puoi ottenere un un valore che procede  al contrario da N a 1 con: n = N - Z + 1

dopo un paio d'ore a rileggere questa dritta ci sono arrivato :D

grande ragazzi meraviglioso !
grazie per l'aiuto e per la sopportazione della mia ignoranza ! :D

[codice]
or riga ==  num_colonne-colonna+1
[/codice]

in pratica:

[codice]
riga(2) e uguale a num_colonne(10)-colonna+1(2) ?
[/codice]

18
Base / Re: Aiuto cicli
« il: Novembre 23, 2013, 13:28 »

Ora guarda la prima e l'ultima riga: sono le stesse degli altri quadrati e sono stampate dalla prima parte della condizione,
[codice]riga in (1,num_righe) or colonna in (1,num_colonne)[/codice]
quindi quella va bene. Rimane da sistemare l'ultima condizione dopo l'or:
[codice]or colonna == riga[/codice]
Concentriamoci sulla seconda riga del quadrato che è anche la prima ad essere stampata da quest'ultima condizione:
in cosa è diversa dalla precedente? Guardandola, quali sono i valori di riga e colonna per cui avviene la stampa del numero 18?

Edit: in particolare colonna quanto vale in funzione di riga? Aiutati con quanto ti ha detto Claudio_F.

heeheheh

allora riga=2 e colonna= 9
         riga=3 e colonna = 8
         e cosi via.....

pero' non riesco a capire come modificare colonna == riga.


19
Base / Re: Aiuto cicli
« il: Novembre 23, 2013, 11:45 »
Citazione da: spiritoserio
ho provato a farla partire da destra verso sinistra ma nulla.

E io ti ho scritto la soluzione per non toccare minimamente i range già presenti ;)

non so se c'ho capito come usare il tuo indizio , ho provato a fare cosi.

[codice]n = num_colonne - colonne+1
[/codice]

poi

[codice]print '%*s' % (spazio, riga*n),[/codice]

cosi mi stampa da 10 a 1 però la riga obliqua parte sempre da sinistra verso destra a scendere....io invece vorrei che il quadrato partisse sempre da 1 a 10
ma la colonna obliqua partisse da destra a sinistra a scendere....

vorrei questo:

[codice]
1    2     3     4     5    6    7   8   9  10
2                                            18  20
3                                        24      30
4                                   28           40
5                              30                50
6                         35                     60
7                  28                            70
8           24                                   80
9    18                                          90
10  20  30  40  50  60  70  80  90 100
[/codice]

l'indentazione del quadrato è quella che è però rende l'idea....

20
Base / Re: Aiuto cicli
« il: Novembre 23, 2013, 00:14 »
Se hai un valore Z che varia da 1 a N puoi ottenere un un valore che procede  al contrario da N a 1 con: n = N - Z + 1

ho un dubbio , forse mi sono espresso male.
in pratica ho il quadrato di numeri con la linea obliqua che parte da sinistra e va verso destra , ho provato a farla partire da destra verso sinistra ma nulla.
ho provato a giocare con reversed(range(n,n,-1) ma......  :confused:

grazie.

21
Base / Re: Aiuto cicli
« il: Novembre 22, 2013, 22:18 »
Codice versione migliorata:

[codice]
# Versione 3.2 :D
# ciclo if minimizzato (grazie Claudio)
# corretto bug in for colonna ( grazie Paolo)


def stampa(num_righe, num_colonne):
    spazio = len(str(num_righe*num_colonne))
    for riga in range(1, num_righe+1):
        for colonna in range(1, num_colonne+1):
            if riga in(1,num_righe) or colonna in(1,num_colonne) or colonna == riga:
                print '%*s' % (spazio, riga*colonna),
            else:
                print '%*s' % (spazio, ''),
           
        print

num_righe = int(raw_input('INSERIRE NUMERO RIGHE: '))
print

num_colonne = int(raw_input('INSERIRE NUMERO COLONNE: '))
print

stampa(num_righe, num_colonne)
[/codice]

Rieccomi....

ho giocato ancora un po' con questo esempio , però nel provare ad invertire la riga mi sono bloccato , le ho provate tutte ma nulla
un aiuto a livello di ragionamento( no codice)?!?!?!?


22
Base / Re: Aiuto cicli
« il: Novembre 18, 2013, 23:26 »
Codice versione migliorata:

[codice]
# Versione 3.2 :D
# ciclo if minimizzato (grazie Claudio)
# corretto bug in for colonna ( grazie Paolo)


def stampa(num_righe, num_colonne):
    spazio = len(str(num_righe*num_colonne))
    for riga in range(1, num_righe+1):
        for colonna in range(1, num_colonne+1):
            if riga in(1,num_righe) or colonna in(1,num_colonne) or colonna == riga:
                print '%*s' % (spazio, riga*colonna),
            else:
                print '%*s' % (spazio, ''),
           
        print

num_righe = int(raw_input('INSERIRE NUMERO RIGHE: '))
print

num_colonne = int(raw_input('INSERIRE NUMERO COLONNE: '))
print

stampa(num_righe, num_colonne)
[/codice]

23
Base / Re: Aiuto cicli
« il: Novembre 18, 2013, 23:16 »
Attenzione che il programma ha un piccolo bug: la riga 6, quella del for sulle colonne è
[codice]for colonna in range(1, num_colonne+1):[/codice]
e non
[codice]for colonna in range(1, num_righe+1):[/codice]

edit: ma l'if tradotto in italiano come potrei rappresentarlo ? mi piacerebbe capire il suo funzionamento perchè ci sono arrivato si ragionando ma piu che altro per tentativi.

cio' if = se ...pero' quel IN mi confonde il ragionamento.

L'operatore in fa un test di appartenenza che può restituire True o False:
[codice]>>> stringa = "dammi il cinque"
>>> if "dammi" in stringa:
   print "OK!"

OK![/codice]

Grazie risolto  :D

if riga in( 1, 10) in pratica verifica se esiste l'1 e il 10 giusto ?
e se non esiste passa all'oR giusto?

24
Base / Re: Aiuto cicli
« il: Novembre 18, 2013, 22:09 »
Citazione da: spiritoserio"
[codice]
if colonna == riga or riga in(1, num_righe):
    print '%*s' % (spazio, riga*colonna),
elif colonna == num_righe or colonna in(1,num_righe):
    print '%*s' % (spazio, riga*colonna),
[/codice]

Secondo me queste condizioni, che se verificate eseguono esattamente la stessa operazione, si possono compattare in un solo if ;)

sono arrivato a questo:

[codice]
if riga in(1,num_righe) or colonna in(1,num_righe) or colonna == riga:
[/codice]

edit: ma l'if tradotto in italiano come potrei rappresentarlo ? mi piacerebbe capire il suo funzionamento perchè ci sono arrivato si ragionando ma piu che altro per tentativi.

cioè if = se ...pero' quel IN mi confonde il ragionamento.

25
Base / Re: Aiuto cicli
« il: Novembre 18, 2013, 21:15 »
Citazione da: spiritoserio"
[codice]
if colonna == riga or riga in(1, num_righe):
    print '%*s' % (spazio, riga*colonna),
elif colonna == num_righe or colonna in(1,num_righe):
    print '%*s' % (spazio, riga*colonna),
[/codice]

Secondo me queste condizioni, che se verificate eseguono esattamente la stessa operazione, si possono compattare in un solo if ;)

Vero , allora farò  la versione 3.1  prima della 4.0 :D
ora ci gioco un po' e poi pubblichero' il codice con il tuo prezioso consiglio :D
Grazie.

26
Base / Re: Aiuto cicli
« il: Novembre 18, 2013, 20:22 »
penso di essere arrivato alla perfezione (grazie a voi) di cio' che avevo chiesto all'inizio.

Versione 2.0 terminata!  :party:
È tempo di una versione 3.0 che preveda quanto dicevi prima:

Per ora il codice funziona fino a 10 sto ragionando su come fargli prendere il numero di righe :D

In realtà anche il numero di colonne, così sarebbe totalmente a discrezione dell'utente decidere cosa stampare

Edit:

mi stampa solo fino a 9 se metto 20 si ferma a 9 :(

È normale, la diagonale completa la puoi vedere solo se si tratta di un quadrato, quindi 10x10, 20x20, ma non 20x10.

Un altra cosa: se stai usando Python 2.x, al posto di input() usa raw_imput().
Quest'ultimo restituisce una stringa, per convertirla in numero int(raw_imput())

input() non fa quello che pensi tu in Python 2.x.
Va usato invece in Python 3.x dove fa quello che immagini.

Edit2: e quando ti occuperai di avere anche più di 10 colonne (la versione 3.0),
attenzione anche alla variabile spazio dove il moltiplicatore non è più fisso a 10, ma appunto varia del numero di colonne che stabilisci.

Edit3: rieditato ulteriormente parte del messaggio, meglio rileggerlo tutto.  ;)
Finalmente verisone 3.0 ultimata.
Purtroppo se nella shell inserisco 30 (non ingrandita) la formattazione viene persa comunque , stessa cosa nella shell  ingrandita se imposto 50 ...formattazione persa.
Ma a questo punto penso che sia normale.

Nella versione 4.0 imposterò un limite ai valori in input. :D

[codice]

# Versione 3.0 :D

def stampa(num_righe, num_colonne):
    spazio = len(str(num_righe*num_colonne))
    for riga in range(1, num_righe+1):
        for colonna in range(1, num_righe+1):
            if colonna == riga or riga in(1, num_righe):
                print '%*s' % (spazio, riga*colonna),
            elif colonna == num_righe or colonna in(1,num_righe):
                print '%*s' % (spazio, riga*colonna),
            else:
                print '%*s' % (spazio, ''),
           
        print

num_righe = int(raw_input('INSERIRE NUMERO RIGHE: '))
print

num_colonne = int(raw_input('INSERIRE NUMERO COLONNE: '))
print

stampa(num_righe, num_colonne)
[/codice]

27
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 23:51 »
penso di essere arrivato alla perfezione (grazie a voi) di cio' che avevo chiesto all'inizio.

Versione 2.0 terminata!  :party:
È tempo di una versione 3.0 che preveda quanto dicevi prima:

Per ora il codice funziona fino a 10 sto ragionando su come fargli prendere il numero di righe :D

In realtà di colonne, ma ci siamo capiti.

Edit:

mi stampa solo fino a 9 se metto 20 si ferma a 9 :(

A riga 5 con quell'if hai impostato che fosse così.
Sono condizioni da ripensare un po' perché così come sono non "scalano" bene su valori maggiori di 10.

Un altra cosa: se stai usando Python 2.x, al posto di input() usa raw_imput().
Quest'ultimo restituisce una stringa, per convertirla in numero int(raw_imput())

input() non fa quello che pensi tu in Python 2.x.
Va usato invece in Python 3.x dove fa quello che immagini.

Grazie Paolo ho fatto un po' di prove ma non sono riuscito per ora a iterare fino a num_righe :(

Sarà il compito di domani , per il dopo lavoro ehheheehhe
ebbene si ora sara' meglio andare a dormire domani mattina il dovere chiama.

Grazie per me oggi è stata una meravigliosa lezione.
 buona notte a te e Claudio.

28
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 23:38 »
penso di essere arrivato alla perfezione (grazie a voi) di cio' che avevo chiesto all'inizio.

Versione 2.0 terminata!  :party:
È tempo di una versione 3.0 che preveda quanto dicevi prima:

Per ora il codice funziona fino a 10 sto ragionando su come fargli prendere il numero di righe :D

In realtà di colonne, ma ci siamo capiti.
ho modificato il post perchè mi sono reso conto che non ci siamo ancora aahahahahah
ma so che ci sono vicino :D

avevo gia festeggiato uhmmmmmm

ci rimetto mano :D

29
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 23:29 »

[codice]Codice completo[/codice]

[codice]
def stampa(num_righe):
    spazio = len(str(num_righe*10))
    for riga in range(1, num_righe+1):
        for colonna in range(1, 11):
            if colonna in (1, 10) or riga in(1, num_righe):
                print '%*s' % (spazio, riga*colonna),
            elif colonna == riga:
                print '%*s' % (spazio, riga*colonna),
            else:
                print '%*s' % (spazio, ''),
          
        print

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)
[/codice]

[codice]
print 'grazie!!' * 1000
[/codice]

mi stampa solo fino a 9 se metto 20 si ferma a 9 :(

30
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 23:16 »
Citazione da: spiritoserio
se tolgo gli ultimi due TAB mi salta tutto l'ordine mentre cosi funziona una meraviglia.
Gli if che hai scritto non sono esclusivi, ma vengono controllati tutti, in particolare l'ultimo fallisce ogni volta che colonna e riga non valgono 9, quindi ad ogni print viene anche eseguito quel ramo else che aggiunge un     a quanto stampato finora. L'unico caso in cui quel ramo non viene eseguito è quando riga e colonna valgono 9, ecco perchè per non scombinare il tutto hai dovuto aggiungere un     anche nel ramo if dell'ultimo controllo.

Citazione
Accetto idee per capire come dimezzare il codice .
Controlli se riga vale 2 e colonna vale 2, poi se riga vale 3 e colonna vale 3 e cosi' via, non è più semplice controllare solo se colonna è uguale a riga? ;)

Provo a seguire la tua dritta! Grazie  :confused: :D

Pagine: 1 [2] 3 4