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
31
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 22:47 »
Nota che con la formattazione di stringa non hai stretta necessità di usare     che allinea ogni 8 spazi, perché hai il controllo completo sulla lunghezza/occupazione delle singole stringhe (ricordando che la virgola finale di print aggiunge un ulteriore spazio):

Aggiungo: il controllo con la formattazione di stringa arriva al punto che puoi anche non indicare a priori quanto spazio serve per allineare correttamente tutti i numeri al crescere della cifre.
Lo fai calcolare al programma, così:
[codice]def stampa(num_righe):
    spazio = len(str(num_righe*10))  # Calcola quanto spazio occupa la cifra piu' grande, per esempio 1000 sono 4 cifre
    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):
                # Non viene indicato esplicitamente quanto spazio occupa la stringa,
                # si usa l'asterisco al suo posto ed il valore effettivo e' nella variabile spazio calcolata a runtime.
                print "%*s" % (spazio, riga * colonna),  
            else:
                print  "%*s" % (spazio, ""),
        print

stampa(10)
[/codice]
La cosa è ancora più generale: tutti i valori per la formattazione di stringa che non conosci puoi sostituirli con un asterisco,
nelle parentesi tonde dopo l'ultimo simbolo di percentuale, metti tante variabili quanti sono gli asterischi.

A runtime ogni asterisco sarà sostituito nello stesso ordine dal corrispondente valore della variabile.
grazie , avevo letto dell'asterisco ma credevo di far diventare la cosa troppo complessa.
invece col tuo esempio tutto è piu chiaro.

32
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 22:43 »
Citazione da: spiritoserio
ecco il codice con la formattazione con l'operatore %:

Nota che con la formattazione di stringa non hai stretta necessità di usare     che allinea ogni 8 spazi, perché hai il controllo completo sulla lunghezza/occupazione delle singole stringhe (ricordando che la virgola finale di print aggiunge un ulteriore spazio):

[codice]
def stampa(num_righe):
    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 '%3s' % (riga*colonna,),  # <--- 3 + 1 caratteri
            else:
                print '   ',    # <--- 3 + 1 spazi
        print

stampa(10)
[/codice]

il tuo codice funziona con la formattazione il mio invece se tolgo i tab non funziona come dovrebbe :D

33
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 22:13 »
Citazione da: spiritoserio
ecco il codice con la formattazione con l'operatore %:

Nota che con la formattazione di stringa non hai stretta necessità di usare     che allinea ogni 8 spazi, perché hai il controllo completo sulla lunghezza/occupazione delle singole stringhe (ricordando che la virgola finale di print aggiunge un ulteriore spazio):

[codice]
def stampa(num_righe):
    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 '%3s' % (riga*colonna,),  # <--- 3 + 1 caratteri
            else:
                print '   ',    # <--- 3 + 1 spazi
        print

stampa(10)
[/codice]

versione 2.0 :D (sicuramente migliorabile)

[codice]
def stampa(num_righe):
    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 ('%3s' % (riga*colonna,)),
            if colonna == 2 and riga == 2:
                print ('%3s' % (riga*colonna,)),
            if colonna == 3 and riga == 3:
                print ('%3s' % (riga*colonna,)),
            if colonna == 4 and riga == 4:
                print ('%3s' % (riga*colonna,)),
            if colonna == 5 and riga == 5:
                print ('%3s' % (riga*colonna,)),
            if colonna == 6 and riga == 6:
                print ('%3s' % (riga*colonna,)),
            if colonna == 7 and riga == 7:
                print ('%3s' % (riga*colonna,)),
            if colonna == 8 and riga == 8:
                print ('%3s' % (riga*colonna,)),
            if colonna == 9 and riga == 9:
                print ('%3s\t' % (riga*colonna,)),
            else:
                print '\t',
           
        print
[/codice]

Nota: se togli gli ultimi due TAB come dici tu che dovrebbe gestire tutto la formattazione(GIUSTAMENTE) però in realtà in pratica non funziona e vorrei capire perchè...
se tolgo gli ultimi due TAB mi salta tutto l'ordine mentre cosi funziona una meraviglia.

Accetto idee per capire come dimezzare il codice .
Per ora il codice funziona fino a 10 sto ragionando su come fargli prendere il numero di righe :D

34
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 20:43 »
Dopo aver letto la tua lezione sul blog e dopo aver provato varie situzioni
ecco il codice con la formattazione con l'operatore %:

[codice]

def stampa(n):
    for x in range(1, n+1):
        for y in range(1, 11):
            if y in (1, 10) or x in(1, n):
                print ('%3s\t' % (x*y,)),
            else:
                print '\t',
        print

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)
[/codice]

ora se inserisco 20 per esempio, l'ultima riga con 0 è perfettamente in linea con quello sopra. :D

ah poi ho capito anche che avevo problemi con le virgole [codice]che servono per continuare la stampa sulla stessa riga[/codice] dopo un po' di prove ho capito che
erano da spostare come puoi vedere dalla riga print che effettua il calcolo.

OT: spero che ne scriverai altre di lezioni :D

35
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 16:07 »
versione 1.1

[...]

Ma se volessi disegnare una linea obliqua con i numeri ?

Prima di passare alla versione 2.0,
magari sarebbe opportuno prevedere una versione 1.1.1 che sistemi il problema di formattazione.

Come avrai notato mettendo 20, l'ultima riga sembra vada a farfalle....

in realtà sono tutte le altre che non si adeguano a numeri più grandi
aumentando lo spazio tra prima e ultima cifra in modo da essere sempre allineate all'ultima riga.

Se ti va di farlo, l'aiutino consiste nelle espressioni di formattazione di stringhe.
Leggi bene ed alla fine di entrambi avrai la soluzione.

Male che vada ti indico con precisione dove puntare la tua attenzione.

Ciao P , grazie per il link al tuo bellissimo blog (inserito nei preferiti) e devo dire che spieghi anche in una maniera meravigliosa;  ho letto con attenzione gli articoli e stasera faro' subito delle prove ora devo uscire, poi posto la versione 1.1.1 con le tue dritte.

grazie.

36
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 15:54 »
versione 1.1

[...]

Ma se volessi disegnare una linea obliqua con i numeri ?

Prima di passare alla versione 2.0,
magari sarebbe opportuno prevedere una versione 1.1.1 che sistemi il problema di formattazione.

Come avrai notato mettendo 20, l'ultima riga sembra vada a farfalle....

in realtà sono tutte le altre che non si adeguano a numeri più grandi
aumentando lo spazio tra prima e ultima cifra in modo da essere sempre allineate all'ultima riga.

Se ti va di farlo, l'aiutino consiste nelle espressioni di formattazione di stringhe.
Leggi bene ed alla fine di entrambi avrai la soluzione.

Male che vada ti indico con precisione dove puntare la tua attenzione.

Però se lo eseguO nella shell sia rimpicciolita si ingrandita non ci sono problemi e siccome ho fatto copia ed incolla del disegno in notepad poi gli ho aggiunto gli '1' per fare l'esempio allora è saltato l'ordine :D

comunque do lo stesso un occhiata :D

37
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 15:42 »
Questa versione è dedicata a voi che mi avete aiutato!

[codice]
def stampa(n):
    for x in range(1, n+1):
        for y in range(1, 11):
            if y in (1, 10) or x in(1, n):
                print 'Grazie','\t',
            elif y == 5 and x == n/2:
                print 'GRAZIE', '\t',
           
            else:
                print '\t',
        print
               

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)
[/codice]

38
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 15:22 »
mancava il [codice]print[/codice] alla fine della funzione.

Si, bravo, mancava quel print in quella posizione!  ;)

E no, quella a rigore non è la fine della funzione.
Guarda l'indentazione: è la fine del ciclo più interno, quello che stampa una riga completa.

Vero!!! è la fine del [codice]for y[/codice]

siete fenomenali , spero che non vi stancherete di me perchè vi chiederò aiuto spesso e cerchero' di non richiedere codice gia pronto...

[codice]
print 'GRAZIE\n' * 1000
[/codice]

39
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 15:19 »
versione 1.1

quadrato bidimensionale con le tabbelline ehhehehheeh

[codice]
def stampa(n):
    for x in range(1, n+1):
        for y in range(1, 11):
            if y in (1, 10) or x in(1, n):
                print x*y,'\t',
            elif y in (2,9) or x in(2, val-1):
                print x*y,'\t',
            else:
                print '\t',
        print
               

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)
[/codice]

Ma se volessi disegnare una linea obliqua con i numeri ?
cioè :
Riga n°1 -> Riga completa
Riga n°* -> Print 2 numeri
Riga n°* -> print 3° numero
Riga n°* -> print 4° numero
.......................

tipo questo:

[codice]
1    2    3    4    5    6    7    8    9    10    
2 1                           20    
3                            30    
4    1                        40    
5                            50    
6       1                     60    
7          1                  70    
8                            80    
9             1               90    
10                            100    
11                1            110    
12                            120    
13                   1         130    
14                            140    
15                      1      150    
16                            160    
17                            170    
18                         1   180    
19                            190    
20    40    60    80    100    120    140    160    180    200    

[/codice]

40
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 14:30 »
Aggiungo: nel primissimo codice postato a inizio thread c'è la soluzione, li non viene scritto tutto su un'unica riga.

Citazione
Indizio: il programma stampa quello che serve, ma è tutto su un'unica riga.
Invece ogni volta che finisce la stampa di una riga deve andare a capo e stampare su quella nuova.

 ;) Ci sono arrivatooooo!

[codice]Codice completo:[/codice]

[codice]
def stampa(n):
    for x in range(1, n+1):
        for y in range(1, 11):
            if y in (1, 10) or x in(1, n):
                print x*y,'\t',
            else:
                print '\t',
        print
              

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)[/codice]

mancava il [codice]print[/codice] alla fine della funzione.

41
Base / Re: Aiuto cicli
« il: Novembre 17, 2013, 14:14 »
Fantastici, mi piace questa soluzione per imparare....
ci arrivero' ora mi metto a riflettere ihihihiih

  :birrame:

42
Base / Re: [RISOLTO]Aiuto cicli
« il: Novembre 17, 2013, 13:14 »
Lo vedi bene perché probabilmente stai usando una shell larga esattamente 80 colonne che manda automaticamente a capo a fine riga, ma in realtà è tutto scritto su un'unica riga.


Uso IDLE  (python 2.7.5) ed aimè hai perfettamente ragione.
Se ingrandisco la finestra della shell non disegna nessun quadrato.
se non ingrandisco disegna il quadrato di numeri....

allora a questo punto sono al punto di partenza...... avete una soluzione ?


43
Base / Re: [RISOLTO] Re: Aiuto cicli
« il: Novembre 17, 2013, 12:54 »
Si si è tutto sotto controllo , stavo facendo delle prove con gli asterischi e ho postato quel codice
ma semplicemente basta cambiare il primo  [...]

Scusami, lo so che sono puntiglioso (qualità positiva di chi vuol programmare...  :angel:), ma quanto dici non basta perché:
[codice]INSERIRE NUMERO: 20

1    2    3    4    5    6    7    8    9    10    2                            20    3                            30    4                            40    5                            50    6 [/codice]
E sarebbe anche carino postare il codice "definitivo" e non le prove in itinere...
altri (magari anche loro alle prime armi) probabilmente leggeranno questi messaggi, lasciamogli del codice che possa essere d'aiuto.

Per me è la formattazione del forum che è pessima perchè quando eseguo il codice sul mio pc funziona perfettamente....

Hai perfettamente ragione : tra 10 minuti modifico il post e pubblico il codice completo.

[codice]Codice completo:[/codice]

[codice]def stampa(n):
    for x in range(1, n+1):
        for y in range(1, 11):
            if y in (1, 10) or x in(1, n):
                print x*y,'\t',
            else:
                print('\t'),

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)[/codice]

44
Base / Re: [RISOLTO] Re: Aiuto cicli
« il: Novembre 17, 2013, 10:16 »
Quando copio-incollo il codice da "leggi sorgente" appare come indicato da te.
Ma non dovresti metterci le istruzioni per ottenere il prodotto tipo tabellina che dicevi all'inizio di questa discussione?

vorrei che mi stampasse la prima e l'ultima riga completa della tabellina mentre quelle centrali solo il primo e ultimo risultato cosi da creare tipo un quadrato.

Avevo capito tu volessi ottenere una cosa così,
[codice]
VALORE: 10
  1   2   3   4   5   6   7   8   9  10
  2                                  20
  3                                  30
  4                                  40
  5                                  50
  6                                  60
  7                                  70
  8                                  80
  9                                  90
 10  20  30  40  50  60  70  80  90 100[/codice]
e non degli asterischi mischiati a tabulazioni su un'unica riga.

Si si è tutto sotto controllo , stavo facendo delle prove con gli asterischi e ho postato quel codice
ma semplicemente basta cambiare il primo : [codice]print[/codice]
della funzione: [codice]stampa(n):[/codice]
da: [codice]print '*\t'[/codice] a[codice]print x*y,'\t',[/codice]

45
Base / Re: [RISOLTO] Re: Aiuto cicli
« il: Novembre 17, 2013, 00:06 »
[codice]
def stampa(n):
    for x in range(1, n+1):
        for y in range(1, 11):
            if y in (1, 10) or x in(1, n):
                print '*   ',
            else:
                print('   '),

acquisizione_numero = input('INSERIRE NUMERO: ')
print

stampa(acquisizione_numero)
[/codice]

Output:
[codice]INSERIRE NUMERO: 10
*   *   *   *   *   *   *   *   *   *   *                           *   *                           *   *[/codice]
e va avanti così per un po'... forse il programma è da completare/correggere o non ho capito cosa volevi fare?
Il forum da qualche problema comunque nelle due [codice]print[/codice] nella funzione [codice]stampa(n)[/codice] vanno modificate cosi:

[codice]print('*\t') e print '\t'[/codice]

Pagine: 1 2 [3] 4