Partage
  • Partager sur Facebook
  • Partager sur Twitter

exercice [débutant]

2 octobre 2010 à 15:56:41

bonjour :)
j'apporte un exercice du cours de Gérard Swinnen pour débutant juste pour comparer les codes et avancer un peu :p voila l'exercice:

Citation : Gérard Swinnen

7.12. Définissez une fonction inverse(ch) qui permette d'inverser les l'ordre des caractères d'une
chaîne quelconque. (La chaîne inversée sera renvoyée au programme appelant).


je poste ma solution dés qu'une reponse et ajouter ;)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 octobre 2010 à 15:59:08

inverse=lambda s: s[::-1]


inverse=lambda s: ''.join([s[i] for i in xrange(len(s)-1, -1, -1)])


  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 16:21:58

@fred1599: pour ton code j'ai pas trop compris quand j'execute sa me donne le resultat:
>>> inverse=lambda s:'na15'.join([s[i] for i in xrange(len(s)-1, -1, -1)])
>>> print(inverse)
<function <lambda> at 0xb7568c2c>

bon voila mon code long mais simple:
def inverse(ch):
        c=len(ch)
        ch2=str()
        ch3=str()
        for i in ch:
                c=c-1
                ch3+=ch2+ch[c]
        print(ch3)
inverse(input("entrez la chaine a inverser: "))
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 octobre 2010 à 16:25:47

Citation

@fred1599: pour ton code j'ai pas trop compris quand j'execute sa me donne le resultat:



C'est une fonction dont le nom est inverse. lambda crée une fonction anonyme : 1er lien google

>>> inverse(tachaine)


  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 16:32:55

il ya toujours une erreur quand j'execute:
>>> inverse=lambda s: ''.join([s[i] for i in xrange(len(s)-1, -1, -1)])
>>> ch="machaine"
>>> inverse(ch)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 1, in <lambda>
NameError: global name 'xrange' is not defined


ps: verion Python 3.1.2
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 octobre 2010 à 16:38:50

xrange n'existe pas en version 3, utilise range

na15, pourquoi créer 2 chaines vides, tu aurais pu simplifier beaucoup plus ton code

def inverse(ch):
        ch2=""
        for i in range(len(ch)-1, -1, -1):     
            ch2+=ch[i]
        print ch2

inverse(raw_input("entrez la chaine a inverser: "))
  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 16:47:26

tu as reson mais l'important que sa marche :)
la simplification sa viendra apres ;)

ps: ton code il est bien! ;)
  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 16:56:39

voila ce que j'avais fait quand j'en était là, je n'utilisait pas encore les boucles for

def inverse(ch):
    l = len(ch)
    i, chi = l-1, ""
    while i >= 0:
        chi = chi + ch[i]
        i = i -1
    return chi
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 octobre 2010 à 17:03:32

Sans la boucle for, je trouve c'est moins intuitif, mais on peut simplifier aussi

def inverse(ch):
    chi, i="", len(ch)-1
    while i != -1:
        chi+=ch[i]
        i-=1
    print chi
  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 17:05:16

@Darioo2: Et à ton niveau actuel tu ferais comment ?

PS: Personnellement j'ai la même solution que fred1599, avec la fonction lambda. Juste les noms de variables qui changent ^^
  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 17:20:53

Pas trop nouveau, mais histoire de :
def f(li): 
    return ''.join([li[len(li)-1-i] for i in range(len(li))])
  • Partager sur Facebook
  • Partager sur Twitter
2 octobre 2010 à 18:30:59

Citation : Plug'n'Play 512

@Darioo2: Et à ton niveau actuel tu ferais comment ?



def inverse(ch):
	chi = ""
	for car in range(len(ch)-1, -1, -1):
		chi = chi + ch[car]
	return(chi)


comme ça ! ça a déja été posté
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
2 octobre 2010 à 19:27:24

Pour le fun :
def inverse(s):
    for i in s:
        s = i + s[:-1]
    return s


Et en plus ça peut donner des trucs sympas :
>>> s = 'albalb albalbalb albalbalb'
>>> for i in s:
...     s = i + s[:-1]
...     print(s)

	
aalbalb albalbalb albalbal
laalbalb albalbalb albalba
blaalbalb albalbalb albalb
ablaalbalb albalbalb albal
lablaalbalb albalbalb alba
blablaalbalb albalbalb alb
 blablaalbalb albalbalb al
a blablaalbalb albalbalb a
la blablaalbalb albalbalb 
bla blablaalbalb albalbalb
abla blablaalbalb albalbal
labla blablaalbalb albalba
blabla blablaalbalb albalb
ablabla blablaalbalb albal
lablabla blablaalbalb alba
blablabla blablaalbalb alb
 blablabla blablaalbalb al
a blablabla blablaalbalb a
la blablabla blablaalbalb 
bla blablabla blablaalbalb
abla blablabla blablaalbal
labla blablabla blablaalba
blabla blablabla blablaalb
ablabla blablabla blablaal
lablabla blablabla blablaa
blablabla blablabla blabla
  • Partager sur Facebook
  • Partager sur Twitter
3 octobre 2010 à 1:25:41

C'est rigolo, mais à éviter en vrai. Sinon :
inverse = lambda s : "".join(list(s).__reversed__())
  • Partager sur Facebook
  • Partager sur Twitter
3 octobre 2010 à 22:08:47

def rev(ch):
	l=list(ch)
	out=''
	while l: out+=l.pop()
	return out
  • Partager sur Facebook
  • Partager sur Twitter

Python c'est bon, mangez-en. 

3 octobre 2010 à 22:31:40

Sinon tu as ça, plus compréhensible, plus clean, plus propre ^^:p . (reprise de maxibolt pour mieux comprendre)
def inverse(string):
    string = list(string)
    string.reverse()
    return ''.join(string)


^^

@maxibolt..; désolé j'avias pas vu que t'avais fait la meme chose... :-°
  • Partager sur Facebook
  • Partager sur Twitter
3 octobre 2010 à 23:15:06

Le mieux c'est quand même s[::-1] hein.
  • Partager sur Facebook
  • Partager sur Twitter
4 octobre 2010 à 13:23:50

pour sur que c'est le mieux
  • Partager sur Facebook
  • Partager sur Twitter
11 octobre 2010 à 18:31:50

Bonjour,

je vous propose un code simpliste:

def renverser(chaine):
    i = len(chaine)
    a=[]
    while i >= 1:
        a.append(chaine[i-1])
        i-=1
    chaine = "".join(a)
    print(chaine)

reverser("salut")

>> tulas
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 octobre 2010 à 20:43:20

inverse=lambda s: "".join(reversed(s))

print inverse("salut")
  • Partager sur Facebook
  • Partager sur Twitter
11 octobre 2010 à 21:18:16

Citation : Maxibolt

C'est rigolo, mais à éviter en vrai. Sinon :

inverse = lambda s : "".join(list(s).__reversed__())
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 octobre 2010 à 21:29:44

Autant pour moi :p
  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2022 à 17:10:13

def inv(ch):
    res=""
    res2=ch[0]
    for i in range(len(ch)-1,0,-1):
        res=res+ch[i]
    res = res+res2
    return res



  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2022 à 17:50:58

Bravo, on a fait un déterrage!
ch = "".join(ch[::-1])

-
Edité par PierrotLeFou 20 octobre 2022 à 17:51:35

  • Partager sur Facebook
  • Partager sur Twitter

Le Tout est souvent plus grand que la somme de ses parties.

20 octobre 2022 à 17:51:05

déterrage de 12 ans !! bravo !!!
  • Partager sur Facebook
  • Partager sur Twitter
20 octobre 2022 à 18:08:53

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter