Devoir python [débutant]

Discutez d'informatique ici !
Felixe
Messages: 1
Enregistré le: 27 Fév 2022, 22:19

devoir python [débutant]

par Felixe » 27 Fév 2022, 22:29

Bonjour, je suis débutant en python et j'avais un examen la semaine dernière qui m'a laissé perplexe.
Bref, on doit demander à l'utilisateur d'inscrire une fonction sour la forme a*x+b*y=c
ex.: 5*x+9*y=11, puis on donc vérifier si la fonction est bien écrite selon 4 critères:
1. "*x", "*y", "=" ne sont présents qu'une seule fois dans la fonction
2. "*x" arrive avant "*y" dans la fonction
3. "*y" arrive avant "=" dans la fonction
4. a et b doivent se trouver entre 0 et 9

comment est-ce que vous vous y seriez pris?



phyelec
Membre Rationnel
Messages: 946
Enregistré le: 06 Mar 2020, 18:47

Re: devoir python [débutant]

par phyelec » 01 Mar 2022, 19:13

Bonjour,

voici un petit programme python qui je crois correspond à la réponse (n'hésitez pas à me poser des questions) :
Code: Tout sélectionner
#En premier : demande de saisie avec les règles
print ("entrez une fonction  a*x+b*y=c avec a et b compris entre 0 et 9")
equation = raw_input("Tapez votre equation : ")
print("Bonjour votre equation est : ", equation)
#analyse de la saisie
chiffres=tuple("0123456789") #tuple liste qui ne plus être modifiée
#en python les indices commencent à 0
if (equation[0] in chiffres):
    print("la saisie de a est valide")
else:
    print("la saisie de a n'est pas valide")
   
if (equation[1]=="x"):
    print("la saisie de x est valide")
else:
    print("la saisie de x n'est pas valide")

if (equation[2]=="+"):
    print("la saisie de + est valide")
else:
    print("la saisie de + n'est pas valide")
   
if (equation[3] in chiffres):
    print("la saisie de b est valide")
else:
    print("la saisie de b n'est pas valide")
   
if (equation[4]=="y"):
    print("la saisie de y est valide")
else:
    print("la saisie de y n'est pas valide")   
   
   
if (equation[5]=="="):
    print("la saisie de = est valide")
else:
    print("la saisie de = n'est pas valide")   

#il faut vérifier que c est bien un nombre
str1=equation[6:len(equation)]
print str1   
if (equation[6:len(equation)].isdigit()):
    print("la saisie de c est valide")
else:
    print("la saisie de c n'est pas valide")   

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13688
Enregistré le: 08 Juin 2006, 09:55

Re: devoir python [débutant]

par mathelot » 01 Mar 2022, 19:49

ce qui serait pas mal, c'est que le programme crée dynamiquement une fonction (affine)
à partir de la saisie. je ne sais si c'est possible.

phyelec
Membre Rationnel
Messages: 946
Enregistré le: 06 Mar 2020, 18:47

Re: devoir python [débutant]

par phyelec » 01 Mar 2022, 20:32

@mathelot, c'est tout à fait possible en organisant la saisie différemment.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 14:00

Re: devoir python [débutant]

par fatal_error » 01 Mar 2022, 22:27

bonjour,

par regex, on transpire moins (si tant est que les coeffs soient des entiers)

Code: Tout sélectionner
import re
def validate (s):
  m = re.search('\dx\+\dy=\d', s)
  if m == None:
    return print(s, 'is not valid')
  print(m.group(0))

def get_f (s):
 # ici, on capture les digits, et on autorise les blancs entre les symboles +,=
  m = re.search('(\d+)*x\s*\+\s*(\d+)y\s*=\s*(\d+)', s)
  [a, b, c] = [int(m) for m in m.group(1, 2, 3)]
  return lambda x: (c - a * x) / b

validate('5x+2y=3')
validate('5x+2y=d')
f_x = get_f('5x + 2y = 3')
print(f_x(1))
print(f_x(2))
 
la vie est une fête :)

phyelec
Membre Rationnel
Messages: 946
Enregistré le: 06 Mar 2020, 18:47

Re: devoir python [débutant]

par phyelec » 02 Mar 2022, 00:09

@fatal_error, oui je suis d'accord, mais comme Felixe débute, je lui ai proposé un programme très simple, regex n'est pas facile quand on débute.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 14:00

Re: devoir python [débutant]

par fatal_error » 02 Mar 2022, 09:56

sans regex alors
Code: Tout sélectionner
def validate_2 (s):
  d = '0123456789'
  scheme = [d, 'x', '+', d, 'y', '=', d]
  for (i, c) in enumerate(s):
    if c not in scheme[i]:
      print('got', c, 'expected' + ('one of' if scheme[i] == d else ''), scheme[i])
      return False
  return True
la vie est une fête :)

phyelec
Membre Rationnel
Messages: 946
Enregistré le: 06 Mar 2020, 18:47

Re: devoir python [débutant]

par phyelec » 02 Mar 2022, 21:36

@fatal_error, oui très sympa ce validate et accessible à Felixe, qui s'il revient voir nos réponses ne pourra que progresser.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite