Devoir python [débutant]
Discutez d'informatique ici !
-
Felixe
- Messages: 1
- Enregistré le: 27 Fév 2022, 22:19
-
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
-
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")
-
mathelot
- Habitué(e)
- Messages: 13688
- Enregistré le: 08 Juin 2006, 09:55
-
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
-
par phyelec » 01 Mar 2022, 20:32
@mathelot, c'est tout à fait possible en organisant la saisie différemment.
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 14:00
-
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
-
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.
-
fatal_error
- Modérateur
- Messages: 6610
- Enregistré le: 22 Nov 2007, 14:00
-
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
-
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.
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités