• Modificato

Oggi ho creato questo mini programmino in python per allenarmi usando elementi come le liste e l'indexing (almeno così lo sta chiamando il tizio del tutorial che sto seguendo) che in precedenza non avevo mai usato, se non forse le liste.
Fatto sta, che questo programma rende le lettere grandi in piccole e viceversa!

word = input("Inserisci una parola: ")
z = 0
list = []
y = -1
x = 0
for x in word:
    list.append(word[z:z+1])
    z += 1
    y += 1
while y >= 0:
    if list[y].islower():
        list[y] = list[y].upper()
    else:
        list[y] = list[y].lower()
    y -= 1

for x in list:
    print(x)

FUNZIONAMENTO:

-Chiedo la parola (input) + variabili
-Un ciclo for divide le lettere e le mette singolarmente in una lista, inizialmente vuota
-Un while controlla singolarmente ogni lettera, se è piccola la fa diventare grande e viceversa
-Un ciclo for stampa poi il risultato

DOMANDE MIE:
-Esiste un modo per fare ciò in modo più compatto?
-Come posso rendere le lettere tutte attaccate, e non una lettera in ogni riga?

Si certo, puoi semplificarlo in questo modo:

word = input("Inserisci una parola: ")
result = []

for char in word:
    if char.islower():
        result.append(char.upper())
    else:
        result.append(char.lower())

print(''.join(result))

Così puoi evitare di usare variabili come "z","y","list" e "x" insomma ti semplifichi la vita. Per concatenare le lettere puoi usare join.

Se vuoi formare una parola senza spazi puoi metterla in questo modo:
print(''.join(result), end='')

Con end='' eviti il carattere su \n quando il programma restituisce, così tutte le lettere sono attaccate, senza spazi o newline.

Per passare da una lettera maiuscola ad una lettera minuscola, indipendentemente dal linguaggio di programmazione, faccio riflettere su questo: secondo la codifica ASCII, abbiamo:
A=65 (numero decimale), ... Z=90
a=97, ... z=122
Quindi fra le lettere maiuscole e quelle minuscole c'è un "salto" costante pari a 32.

A seconda del linguaggio cambierà la sintassi, in Python possiamo fare questo esempio che poi spiego:

x='a'
print(x)
x=ord(x)
print(chr(x-32))

La funzione ord(x) restituisce il numero intero (codifica Unicode) del carattere fornito in input. Una volta rappresentato come numero, possiamo svolgere operazioni aritmetiche come ±32, in questo caso.
La funzione chr(x) è l'opposto, quindi preso un intero in input, ne fornisce il rispettivo carattere.
Combinando le due funzioni, nel semplice esempio che ho fatto, trasformiamo 'a' in 'A'. Nel caso di una stringa, semplicemente si tratta di un array di caratteri quindi si può fare questa operazione un elemento alla volta, con un ciclo. Consiglio di considerare i limiti 65-90 e 97-122, poiché eventuali elementi al di fuori di questo range (vari caratteri speciali, simboli) non ha senso convertirli, ad esempio '-' + 32 = 'C' (45+32=67), la cosa non avrebbe acun senso.

Molto valido anche usare ASCII, mi ero dimenticato dell'esistenza di swapcase() che serve proprio a quello:

word = input("Inserisci una parola: ")
result = word.swapcase()
print(result)

Poi ci chiediamo perché Python di per sé non è ottimizzato!

Powered by: FreeFlarum.
(remove this footer)