J'ai des difficultés dans un cours d'informatique pour débutants au collège et j'ai juste besoin d'une aide aux devoirs simple.
Maintenant, nous travaillons actuellement sur des définitions de fonctions, et je dois écrire un programme qui lit une liste d'entiers et indique si la liste contient tous les nombres pairs, impairs ou aucun. L'entrée commence par un entier indiquant le nombre d'entiers dans la liste. Le premier entier n'est pas dans la liste (il indique simplement la longueur de la liste).
Mon programme doit définir et appeler les deux fonctions suivantes. def is_list_even() retourne vrai si tous les entiers de la liste sont pairs et faux sinon. def is_list_odd() retourne vrai si tous les entiers de la liste sont impairs et faux sinon. Si la liste est toute paire, je dois aussi imprimer «tout pair». Si la liste est impaire, je dois imprimer «tous impairs». Si la liste contient les deux, je dois imprimer «pas pair ou impair».
J'ai pu insérer tous les nombres entiers dont j'ai besoin dans la liste, mais les définitions sont ce avec quoi je me débat (formatage, retour, etc.). J'ai collé le code que j'ai jusqu'à présent ci-dessous (ce site Web a changé le format de celui-ci) mais mon programme ne produit aucune sortie. Toute aide serait appréciée. Merci.
n = int(input())
my_list =[]
for i in range(n):
num = int(input())
my_list.append(num)
def IsListEven(my_list):
for i in range(len(my_list)):
if my_list[i] % 2 == 0:
return True
else:
return False
def IsListOdd(my_list):
for i in range(len(my_list)):
if my_list[i] % 2 == 1:
return True
else:
return False
def GetUserValues():
if IsListOdd(my_list) == True:
print("all odd")
elif IsListEven(my_list) == True:
print("all Even")
else:
print("not even or odd")
4 Réponses :
Utilisez un indicateur pour vérifier si toutes les valeurs satisfont à la condition. Exemple :
def IsListEven(my_list):
answer = True
for i in range(len(my_list)):
if my_list[i] % 2 == 0: # As pointed in comment, use != for isEven
answer = False
break
return answer
C'est inutile. Vous pouvez simplement return False dans la boucle et return True à la fin.
@Brian non, ici il faut renvoyer le drapeau booléen, mais le mieux est d'utiliser all()
La logique ici est incorrecte, elle devrait l'être if my_list[i] % 2 != 0
@WasifHasan Il n'y a pas besoin de drapeau. Voir la réponse acceptée.
@Brian la réponse acceptée est la mienne!
@Wasif je pense que bbnumber2 avait la réponse acceptée quand j'ai posté ça.
return interrompra immédiatement la boucle, utilisez donc une variable booléenne de maintien comme:
my_list = [1,3,5] print(all(x % 2 == 1 for x in my_list))
Mais vos fonctions peuvent être une seule ligne si vous utilisez all() , un exemple pour vérifier si tout est impair
def IsListEven(my_list):
allEven = True
for i in range(len(my_list)):
if my_list[i] % 2 != 0:
allEven = False
return allEven
def IsListOdd(my_list):
allOdd = True
for i in range(len(my_list)):
if my_list[i] % 2 != 1:
allOdd = False
return allOdd
def GetUserValues():
if IsListOdd(my_list) == True:
print("all odd")
elif IsListEven(my_list) == True:
print("all Even")
Le dernier one-liner pourrait être simplifié pour print(all(x % 2 == 1 for x in my_list))
Il y a une erreur logique majeure et quelques corrections syntaxiques mineures.
Actuellement, les fonctions IsListEven() et IsListOdd() retournent immédiatement lorsqu'elles trouvent un élément pair ou impair, respectivement. Cela conduit à ce que les listes soient marquées comme «paires» même si seul le tout premier élément est pair (et vice versa). Une façon de résoudre ce problème est de renvoyer false lorsque le contraire est trouvé, et true sinon:
if IsListOdd(my_list):
print("all odd")
elif IsListEven(my_list):
print("all Even")
else:
print("not even or odd")
et
def IsListEven(my_list):
for i in my_list:
if i % 2 == 1:
return False
else:
return True
Plus explicitement, cela peut être défini avec une instruction for-else (bien que cela ne soit pas complètement nécessaire ici):
def IsListEven(my_list):
for i in range(len(my_list)):
if my_list[i] % 2 == 0:
return False
else:
return True
En termes de syntaxe, il n'y a pas beaucoup de raison d'utiliser l'indexation de liste dans les boucles for. Une méthode plus simple consiste à accéder directement aux numéros:
def IsListOdd(my_list):
for i in range(len(my_list)):
if my_list[i] % 2 == 0:
return False
return True
De plus, les vérifications finales peuvent être simplifiées car les valeurs renvoyées sont des booléens:
def IsListEven(my_list):
for i in range(len(my_list)):
if my_list[i] % 2 == 1:
return False
return True
Je pense que vous êtes sur la bonne voie, il vous suffit de simplifier un peu la logique de vos boucles for:
Enter the number of elements: 4 Enter element 1: 1 Enter element 2: a Error: Enter an integer, try again... Enter element 2: 2 Enter element 3: 1 Enter element 4: 7 [1, 2, 1, 7] mix of evens and odds
Exemple d'utilisation 1:
Enter the number of elements: 3 Enter element 1: 2 Enter element 2: 2 Enter element 3: 2 [2, 2, 2] all even
Exemple d'utilisation 2:
Enter the number of elements: 5 Enter element 1: 1 Enter element 2: 1 Enter element 3: 1 Enter element 4: 1 Enter element 5: 1 [1, 1, 1, 1, 1] all odd
Exemple d'utilisation 3:
def get_int_input(prompt):
num = -1
while True:
try:
num = int(input(prompt))
break
except:
print("Error: Enter an integer, try again...")
return num
def is_list_even(lst):
for x in lst:
if x % 2 != 0:
return False
return True
def is_list_odd(lst):
for x in lst:
if x % 2 == 0:
return False
return True
def main():
num_elements = get_int_input("Enter the number of elements: ")
my_list = []
for i in range(num_elements):
my_list.append(get_int_input(f"Enter element {i + 1}: "))
print(my_list)
if is_list_even(my_list):
print("all even")
elif is_list_odd(my_list):
print("all odd")
else:
print("mix of evens and odds")
if __name__ == "__main__":
main()
returnmet immédiatement fin à une fonction. Vous avez unreturndans vos bouclesforqui garantit qu'elles ne boucleront jamais sur toutes les valeurs. Par exemple,IsListEvencommence de manière prometteuse, mais lors de la première itération de la boucle for, elle retourne True ou False indépendamment de l'origine de nombreux éléments que vous aviez l'intention d'examiner.Quel est le problème avec votre code actuel en particulier?
peut utiliser
allfonctions intégrées pour vérifier si tous les nombres sontevenouodd. Par exemple, déterminer si une liste contient uniquementoddnombresodd, peut faire:all(map(lambda x: x%2, my_list))J'ai besoin que le programme produise une sortie "tout pair", "tout impair" ou "pas pair ou impair". Quand je l'exécute, aucune sortie n'est produite. Il ne me montre aucune erreur. Je vais essayer de déplacer les déclarations de retour, mais je suis un peu confus sur la façon de le faire. (Je m'excuse, mon professeur d'informatique n'a pas été très doué pour expliquer les choses à la classe.)
Avez-vous un débogueur? C'est un problème facile lorsque vous voyez ce que fait réellement votre code.