-2
votes

Quel est le problème avec la ligne 5 dans ce code? Y a-t-il quelque chose de mal avec les autres lignes?

Je viens de commencer à apprendre Python. J'ai une certaine expérience avec C ++ de l'école. Le problème consiste à écrire du code qui imprime le plus grand nombre impair de l'entrée de l'utilisateur et d'imprimer des commentaires pertinents s'il n'y a pas de nombre impair. Quel est le problème avec ce code et existe-t-il de meilleurs moyens de résoudre ce problème? XXX


3 commentaires

Dupliqué possible de Comment puis-je lire les entrées en tant que chiffres?


Il est possible que le plus grand nombre impair ne soit pas le plus grand nombre de X, Y et Z. Par exemple, considérons le cas où x = 8, y = 5 et z = 3.


Le groupe moyen de si Les instructions ne peuvent jamais être vraies, car elles commencent tous avec si x% 2! = 0 , mais vous êtes déjà à l'intérieur d'un si x% 2 == 0 contexte.


3 Réponses :


1
votes

Peut-être que la logique devient plus facile si vous en faites une petite liste et triez-la:

x = input ("Enter first number: ")
y = input ("Enter second number: ")
z = input ("Enter third number: ")

odds = sorted([ i for i in [x,y,z] if int(i)%2 ],reverse=True)
if not odds:
    print("No odd number")
elif odds.count(odds[0]) == len(odds):
    print("All odd numbers are equal")
else:
    print(f"{odds[0]} is the largest odd number")


0 commentaires

0
votes

2 choses: 1. Convertissez des données. 2. Votre code n'est pas formaté correctement, par l'apparence de celui-ci.

pour 1: p> xxx pré>

pour 2- Votre code ne retournera jamais le plus grand nombre impair si le plus grand nombre impair est plus petit que le plus grand nombre même. Par exemple [20, 9, 5]. Pour résoudre ce problème: P>

#Create a list to work with
num_li = [x,y,z]

#Get all the odd numbers    
num_li = [i for i in num_li if i%2!=0]

#If no odd numbers
if len(num_li) == 0:
    print('No odds')
#Print the largest odd number
else:
    num_li.sort(reverse = True)
    print('The largest odd number is: ' + str(num_li[0])) 


0 commentaires

0
votes

Il y a deux problèmes avec la version actuelle du code:

1) TypeError - Vous recevez des chaînes comme des entrées et les traiter comme des entiers p>

2) Erreur logique - Vos conditions ne couvrent pas Tous les cas. P>

J'ai réécrit le code. Les chaînes sont converties en int et tous les cas sont couverts. P>

Exemple de travail: P>

x = int(input ("Enter first number: "))
y = int(input ("Enter second number: "))
z = int(input ("Enter third number: "))

numbers = [x, y, z]
odd_numbers = []
for number in numbers: // loop through the numbers and create an odd number list
  if number % 2 != 0:
    odd_numbers.append(number)

if odd_numbers: //print out the largest number in the list using max()
  print(max(odd_numbers))
else:
  print("No odd numbers")// if the list is empty this will be printed


0 commentaires