2017-10-21 81 views
-1

Mon code actuel sont comme ci-dessous:Nombre entier reste entier mais les nombres décimaux resteront les décimales dans ma réponse de sortie?

num = input() 
numlist = num.split(",") 

def even(list): 
    string = "" 
    for number in list : 
     number = float(number) 
     if number %2 == 0: 
      string += "~"+str(number) 
    return(string) 
def odd(list): 
    string = "" 
    for number in list: 
     number = float(number) 
     if number %2 != 0: 
      string += "~"+str(number) 
    return(string) 

print "even numbers :" ,even(numlist) 
print "odd numbers :" ,odd(numlist) 

Ma sortie: Même les chiffres: ~ 56,0 nombres impairs: ~ 3,0 ~ 1,0 ~ 5,9 ~ 12,6 ~ 8,9

Résultats attendus: Même numéros: ~ 56 nombres impairs: ~ 3 ~ 1 ~ 5,9 ~ 12,6 ~ 8,9 grâce à l'aide

+0

mes sorties attendues sont Nombre pairs: ~ 56 Nombre impair: ~ 3 ~ 8.9 ~ 7.7 ~ 5 –

+1

[Éditer] votre question pour inclure votre entrée, votre sortie attendue __et__ votre sortie observée. – khelwood

+0

Ce qui ne fonctionne pas tout va bien dans mon PC – Dark

Répondre

0

Puisque vous obtenez chaîne essayez ceci à utiliser dans vos scission '.' méthodes iE:

if string.split('.')[-1] == '0': 
     string = string.split('.')[0] 

Programme complet:

num = input() 
numlist = num.split(",") 

def even(list): 
    string = "" 
    for number in list : 
     number = float(number) 
     if number %2 == 0: 
      string += "~"+str(number) 
     if string.split('.')[-1] == '0': 
      string = string.split('.')[0] 
    return(string) 

def odd(list): 
    string = "" 
    for number in list: 
     number = float(number) 
     if number %2 != 0: 
      string += "~"+str(number) 
     if string.split('.')[-1] == '0': 
      string = string.split('.')[0] 
    return(string) 

print ("even numbers :" ,even(numlist)) 
print ("odd numbers :" ,odd(numlist)) 

Exemple de sortie:

5,5.6 
even numbers : 
odd numbers : ~5~5.6 

Note: Modulus ne doit pas être utilisé sur flotteurs. Ici, il ne considère que la partie intégrale, pas la décimale.

0

La méthode la plus simple consiste à ajouter simplement la chaîne d'origine de numlist à la chaîne de sortie.

J'ai également changé les noms des arguments pour vos fonctions: vous ne devriez pas utiliser list comme nom de variable parce que cela occulte le type intégré list.

def even(lst): 
    string = "" 
    for s in lst : 
     number = float(s) 
     if number %2 == 0: 
      string += "~" + s 
    return string 

def odd(lst): 
    string = "" 
    for s in lst: 
     number = float(s) 
     if number %2 != 0: 
      string += "~" + s 
    return string 

# Test 

data = '3,1,56,5.9,12.6,8.9' 
numlist = data.split(',') 
print numlist 
print "even numbers :" ,even(numlist) 
print "odd numbers :" ,odd(numlist) 

sortie

['3', '1', '56', '5.9', '12.6', '8.9'] 
even numbers : ~56 
odd numbers : ~3~1~5.9~12.6~8.9 
0

Vous pouvez vérifier si votre flotteur est un entier, avec la méthode is_integer() des flotteurs. Si c'est un entier, vous le lancez en int, sinon vous le laissez tel quel. Alors vous pouvez faire quelque chose comme ceci:

num = input() 
numlist = num.split(",") 

def even(list): 
    string = "" 
    for number in list : 
     number = float(number) 
     if number.is_integer(): 
      number = int(number) 
     if number %2 == 0: 
      string += "~"+str(number) 
    return(string) 

def odd(list): 
    string = "" 
    for number in list: 
     number = float(number) 
     if number.is_integer(): 
      number = int(number) 
     if number %2 != 0: 
      string += "~"+str(number) 
    return(string) 

print "even numbers :" ,even(numlist) 
print "odd numbers :" ,odd(numlist) 

entrée: 56, 3, 5,9, 12,6, 8,9

sortie: les nombres pairs: ~ 56
nombres impairs: ~ 3 ~ 5,9 ~ 12,6 ~ 8.9

De toute façon, je suis d'accord avec les autres qu'il est vraiment bizarre d'utiliser le module avec des nombres non entiers.