« Discussion:INFO719 : rappels et compléments de programmation » : différence entre les versions

De Wiki du LAMA (UMR 5127)
Aller à la navigation Aller à la recherche
Ligne 48 : Ligne 48 :


Voici le code qui marche
Voici le code qui marche
def identique(c):
def identique(c):
"""Cette fonction va compter le nombre de lettre identique a la fin et au debut du mot"""
"""Cette fonction va compter le nombre de lettre identique a la fin et au debut du mot"""
n=len(c)/2
n=len(c)/2
Ligne 54 : Ligne 54 :
l=0
l=0
while (c[i]==c[-i-1]) and (i'''<'''n):#ici on a mit un strictement inférieur et ça marche!!!
while (c[i]==c[-i-1]) and (i'''<'''n):#ici on a mit un strictement inférieur et ça marche!!!
sauf que vous vouliez que l'on mette un <= et dans ce cas là le code ne marche plus et met false dans chaque cas. POURQUOI?
l=l+1
l=l+1
i=i+1
i=i+1
return (l)
return (l)
sauf que vous vouliez que l'on mette un <= et dans ce cas là le code ne marche plus et met false dans chaque cas. POURQUOI?


def palindrome(c):
def palindrome(c):
"""Cette fonction retourne vraie si le compte est égale à la taille divisée par deux du mot, False sinon"""
"""Cette fonction retourne vraie si le compte est égale à la taille divisée par deux du mot, False sinon"""
if identique(c) ==len(c)/2:
if identique(c) ==len(c)/2:
Ligne 67 : Ligne 65 :
else:
else:
return (False)
return (False)

----

: En fait, ce que je demandais, c'était de compter 3 pour <tt>identique("abcba")</tt>. Pour aller jusqu'à la case du milieu, le plus simple est de faire la boucle jusqu'à <tt>(len(c)+1)/2</tt>. Si on fait simplement un <tt><=</tt>, ca marche quand la taille est impaire, mais pas quand la taille est paire. Voici une possibilité :

<source lang="python">
def identique(c):
"""Cette fonction va compter le nombre de lettre identique a la fin et au debut du mot"""
n = len(c)
if n == 0:
return(0)
elif n == 1:
return(1)
i=0
l=0
while (c[i]==c[-i-1]) and (i<(n+1)/2):
l=l+1
i=i+1
return (l)

def palindrome(c):
"""Cette fonction retourne vraie si le compte est égale à la taille divisée par deux du mot, False sinon"""
if identique(c) == (1+len(c))/2:
return (True)
else:
return (False)
</source>

Version du 17 septembre 2009 à 09:59

Présentation...

Salut, moi c'est Pierre, et mon bureau est le 22 dans le bâtiment Chablais...


Plus sérieusement, pour commencer une discussion, il suffit de cliquer sur le + en haut de la page. Vous pouvez alors rentrer un sujet de discussion et éditer le texte comme pour le wiki.

C'est mieux de signer vos intervention en utilisant l'avant dernier bouton d'édition, ou avec --~~~~.

Pour répondre, il faut « modifier » la section correspondante...
Par soucis de visibilité, il est parfois préférable de rajouter une marge à gauche (comme ici). Pour faire ça, il faut commencer votre ligne par un «:». (Ou un «::»...)

--Hyvernat 8 septembre 2009 à 10:05 (CEST)

Solution de la question 1 (recherche des deux valeurs distinctes les plus grandes)

def recherche(tableau):
   """Cette fonction va chercher les deux valeurs les distinctes les plus grandes"""
   maximum=tableau[0]
   maximum2=tableau[0]
   for e in tableau:
       if e>maximum:
           maximum=e
   
  
   for e in tableau:
       if e>maximum2 and e<maximum:
           maximum2=e
   return maximum2,maximum

rq :
  • pour écrire des morceaux de programme, le plus simple est de se débrouiller pour que chaque ligne commence par un espace. Comme ça, tout le programme se retrouve dans un cadre et le wiki respecte les sauts de lignes, l'indentation et tout le reste.
  • un peu mieux, mais un peu plus long : on met un <source lang="python"> avant le programme et un </source> après le programme. Comme ça, le wiki rajoute des couleurs pour les mots clé de python...
  • Cette fonction marche souvent, mais dans quelques cas particulier elle donne un résultat faux. Que se passe-t'il, et comment le corriger ?
   >>> recherche (range(100))
   (98, 99)
   >>> recherche (range(100,0,-1))
   (100, 100)
Question subsidiaire : peut-on trouver les deux valeurs (distinctes) maximales en n'utilisant qu'une seule boucle ?
--Hyvernat 17 septembre 2009 à 11:37 (CEST)

Problème sur l'exercice du palindrome (question3)

Voici le code qui marche

def identique(c):
   """Cette fonction va compter le nombre de lettre identique a la fin et au debut du mot"""
   n=len(c)/2
   i=0
   l=0
   while (c[i]==c[-i-1]) and (i<n):#ici on a mit un strictement inférieur et ça marche!!! 
       l=l+1
       i=i+1
   return (l)

sauf que vous vouliez que l'on mette un <= et dans ce cas là le code ne marche plus et met false dans chaque cas. POURQUOI?

def palindrome(c):
   """Cette fonction retourne vraie si le compte est égale à la taille divisée par deux du mot, False sinon"""
   if identique(c) ==len(c)/2:
       return (True)
   else:
       return (False)

En fait, ce que je demandais, c'était de compter 3 pour identique("abcba"). Pour aller jusqu'à la case du milieu, le plus simple est de faire la boucle jusqu'à (len(c)+1)/2. Si on fait simplement un <=, ca marche quand la taille est impaire, mais pas quand la taille est paire. Voici une possibilité :

<source lang="python"> def identique(c):

  """Cette fonction va compter le nombre de lettre identique a la fin et au debut du mot"""
  n = len(c)
  if n == 0:
      return(0)
  elif n == 1:
      return(1)
  i=0
  l=0
  while (c[i]==c[-i-1]) and (i<(n+1)/2):
      l=l+1
      i=i+1
  return (l)

def palindrome(c):

  """Cette fonction retourne vraie si le compte est égale à la taille divisée par deux du mot, False sinon"""
  if identique(c) == (1+len(c))/2:
      return (True)
  else:
      return (False)

</source>