Problème input vide

Résolu/Fermé
preliator - 20 janv. 2020 à 20:16
 preliator - 20 janv. 2020 à 22:26
Bonjour à tous,

Je souhaite créer un programme qui recherche des éléments dans une liste en fonction de valeurs maximum que tape l'utilisateur. Mon problème réside dans les Input NULL ou l'utilisateur ne rentre rien, que je ne sais pas (encore) gérer.
Une condition en bas affiche tout les éléments de la liste qui correspond aux critères donnés.

Voici mon code :


pente_max_parcelles = input("pente max = ")
altitude_max_parcelle = input("altitude max = ")
orientation_max_parcelle = input("orientation max = ")
nom_proprietaire = input("nom_proprietaire = ")

compt = 0

mes_parcelles = [12, 128, 256, "POSTEL"], [8, 140, 16, "RADE"], [40, 1458, 30, "POLO"], [36, 540, 30, "RADI"], [69, 1240, 201, "XAVI"], [45, 30, 58, "SAID"]

if pente_parcelles == "":
pente_parcelles = int(pente_parcelles)
pente_parcelles = 99999
else:
pente_parcelles = int(pente_parcelles)

if altitude_parcelle == "":
altitude_parcelle = int(altitude_parcelle)
altitude_parcelle = 99999
else:
altitude_parcelle = int(altitude_parcelle)

if orientation_parcelle == "":
orientation_parcelle = int(orientation_parcelle)
orientation_parcelle = 99999
else:
orientation_parcelle = int(orientation_parcelle)


for raw in mes_parcelles:
if (raw[0] < pente_parcelles) and (raw[1] < altitude_parcelle) and (raw[2] < orientation_parcelle) and (raw[3] == nom_proprietaire):
print (mes_parcelles[compt])
else:
compt = compt + 1


On part du principe que si l'utilisateur de rentre rien parmi les critères ci-dessus, c'est qu'il accepte n'importe quelle valeur.
Comme on peut le voir, j'ai tenté de me dépatouiller avec mes moyens pour gérer les Input vides, afin que la valeur soit toujours vrai au niveau de la condition. Cela ne marche évidemment pas (un entier ne peut être vide).

J'ai pensé à faire une condition "dynamique" qui n'interroge que les éléments entrés par l'utilisateur, malheureusement cela dépasse mes connaissances.

Merci à vous.

2 réponses

Bonsoir,

Ce que tu as fait devrait fonctionner pour les nombres, tout du moins si tu supprimes le cast des valeurs si les chaines sont vides.

Ceci
pente_parcelles = int(pente_parcelles)
plantera forcément si pente_parcelles est une chaine vide.

Pour la comparaison de nom_proprietaire, c'est un peu plus compliqué pour dire n'importe quelle chaine si rien n'est indiqué par l'utilisateur.

On peut imaginer faire une fonction qui retournera toujours True si rien n'est donné, et une autre qui comparera l'élément 3 avec ce qu'à indiqué l'utilisateur.
if not nom_proprietaire:
    func_comp_proprietaire = lambda value: True
else:
    func_comp_proprietaire = lambda value: value == nom_proprietaire


Ainsi pour tester il ne suffirait plus qu'à utiliser cette fonction.

for raw in mes_parcelles:
    if (
        raw[0] < pente_parcelles) and
        raw[1] < altitude_parcelle) and
        raw[2] < orientation_parcelle) and
        func_comp_proprietaire(raw[3])
    ):
        print(raw)
0
Merci beaucoup pour ta réponse, cela résout mon problème :)

Effectivement, pour les cases vides en int, j'ai résolu mon problème comme cela :


if not pente_parcelles:
pente_parcelles = 99999
else:
pente_parcelles = int(pente_parcelles)
0