Changement majuscule en minuscule avec Python

Fermé
Lalali - Modifié le 31 mars 2018 à 12:17
 critou - 31 mars 2018 à 18:02
Bonjour,
j'essaye de faire un algorithme qui change une lettre en majuscule en minuscule si son opposé dans le mot (qui a été changé en liste préalablement) est en minuscule.

for i in range(len(mot_liste)):

if mot_liste[len(mot_liste)-1-i].isupper()== 0:

if mot_liste[i].isupper()== 1:

mot_liste[len(mot_liste)-1-i] = mot_liste[len(mot_liste)-1-i].lower()

return mot_liste

(les indentations n'apparaissent pas)

quand j'essaye avec une liste constituée de lettres, ça ne change rien à la liste et je ne comprends pas pourquoi

merci de votre aide

1 réponse

Bonjour.

L'opposé de l'index 0 dans un itérable indexable est -1, pour 1, -2, pour 2, -3, etc.

Sachant cela, tu peux bien comprendre qu'utiliser la longueur de la liste pour calculer l'index n'a pas d'intérêt.

De plus, si j'ai bien compris, tu veux transformer les 2 lettres opposées du mot, si une des deux est en minuscule, il suffit donc de parcourir la moitié du mot et de regarder si une des 2 lettres est en minuscule, et transformer les 2 en minuscules si cela est le cas.

mot = 'AbCdEFGH'
mot_liste = list(mot)
for i in range(int(len(mot)/2)):
    if mot[i].islower() or mot[-i-1].islower():
        mot_liste[i] = mot[i].lower()
        mot_liste[-i-1] = mot[-i-1].lower()
print(mot)
print("".join(mot_liste))


Note que pour un mot de longueur impaire, cela n'a pas trop de sens, puisque la lettre opposée de la lettre centrale est elle-même.

ps: pour que ton code garde son indentation, il faut utiliser les balises codes du forum.
1
Ok alors j'ai changé mon programme et en faite il faut que je mette en majuscule un lettre si son opposé dans la chaine est en majusucle et du coup passer l'opposé en minuscule
ex: ['C', 'O', 'u', 'C', 'o', 'u'] doit donner ['c', 'o', 'U', 'c', 'O', 'U']

 for i in range(len(mot_liste)):
        
        if mot_liste[i].isupper()== 0: #le caractère i est une minuscule
            
            if mot_liste[-i-1].isupper()== 1: #le caractère opposé est en majuscule
            
                mot_liste[i] = mot_liste[i].upper() #on passe le caractère i en majuscule
                mot_liste [-i-1]=mot_liste[-i-1].lower() #on passe son opposé en minuscule
                    
        else: #le caractère i,est une majuscule
            
            if mot_liste[-i-1].isupper()== 0: #le caractère opposé est une minuscule
                
                mot_liste[i]=mot_liste[i].lower() #on passe le caractère i en minuscule
                mot_liste[-i-1]=mot_liste[-i-1].upper() #on passe son opposé en majusucle


ça ne marche pas non plus..
0
Ok, tu veux donc échanger les casses de caractères entre les 2 côtés.

N'utilise pas ces affreux == dans tes conditions, cela ne sert à rien.

Sinon, ici c'est pareil, inutile de parcourir la liste en entier, il n'y a besoin que de regarder une des moitiés.

mot = 'COuCou'
mot_liste = list(mot)
for i in range(int(len(mot)/2)):
    minuscule_gauche = mot[i].islower()
    minuscule_droite = mot[-i-1].islower()
    # Casses différentes entre les 2 lettres
    if minuscule_gauche != minuscule_droite:
        # Si lettre de gauche est en minuscule 
        if minuscule_gauche:
            mot_liste[i] = mot[i].upper()
            mot_liste[-i-1] = mot[-i-1].lower()
        # lettre de gauche est en majuscule 
        else:
            mot_liste[i] = mot[i].lower()
            mot_liste[-i-1] = mot[-i-1].upper()
print(mot)
print("".join(mot_liste))


Simple non ?
0