Как исправить "метод возврата Python, не возвращающий целое число в объединенной строке - PullRequest
0 голосов
/ 14 января 2019

Когда код запускается, он выводит, но не так, как требуется, он возвращает пустое значение для всех процентов

def income():
    num= raw_input("Enter your Income: ")
    print "Your income is: %d " % int(num)
    return num
income= income()

def bills_expenses():
    bills_kitty=0
    bills_kitty=(income*(55/100))
    return  ("Your bills kitty should have: ", bills_kitty)

def long_term_savings():
    long_term_savings_kitty=(10/100)*income
    return "Your long term kitty should have: ",  long_term_savings_kitty

def play_and_leisure():
    play_and_leisure_kitty=(10/100)*income
    return "Your play and leisure kitty should have: " , play_and_leisure_kitty


def education_personal_growth():
    education_personal_growth_kitty=(10/100)*income
    return "Your personal growth  kitty should have: ", education_personal_growth_kitty


def pay_myself_Financial_fredom():
    pay_myself_Financial_fredom_kitty=(10/100)*income
    return "Your pay yourself kitty should have: ", pay_myself_Financial_fredom_kitty

def give_back_to_the_community():
    give_back_to_the_community_kitty=(5/100)*income
    return "Your giving back kitty should have: " , give_back_to_the_community_kitty



bills=bills_expenses()
long_term = long_term_savings()
play=play_and_leisure()
education=education_personal_growth()
mine=pay_myself_Financial_fredom()
give=give_back_to_the_community()


print bills
print long_term
print play
print education
print mine
print give

Ожидаемые результаты состоят в том, что каждый вызываемый метод должен выводить проценты. но это то, что я получаю.

Enter your Income: 200
Your income is: 200
('Your bills kitty should have: ', '')
('Your long term kitty should have: ', '')
('Your play and leisure kitty should have: ', '')
('Your personal growth  kitty should have: ', '')
('Your pay yourself kitty should have: ', '')
('Your giving back kitty should have: ', '')

Чего мне не хватает?

Ответы [ 4 ]

0 голосов
/ 14 января 2019

Просто верните доход как int

return int(num)
0 голосов
/ 14 января 2019

Проблема, с которой вы столкнулись, имеет две стороны.

Тип вашего ввода с raw_input - строка, вы не получаете ошибки, потому что

print "tata" * 2     # tatatata

является допустимой строковой нотацией - вы умножаете на 0 все время, поэтому вы получаете пустые строки: ''.

Во-вторых, вам нужно настроить деление, чтобы вернуть поплавки.

Фиксированный код:

def get_income(): # See Prunes post
    num = float(raw_input("Enter your Income: "))
    print "Your income is: %d " % int(num)
    return num

income= get_income()

print(type(income))

def bills_expenses():
    bills_kitty=0
    bills_kitty=(income*(55/100.0))
    return  ("Your bills kitty should have: ", bills_kitty)

def long_term_savings():
    long_term_savings_kitty=(10/100.0)*income
    return "Your long term kitty should have: ",  long_term_savings_kitty

def play_and_leisure():
    play_and_leisure_kitty=(10/100.0)*income
    return "Your play and leisure kitty should have: " , play_and_leisure_kitty

def education_personal_growth():
    education_personal_growth_kitty=(10/100.0)*income
    return "Your personal growth  kitty should have: ", education_personal_growth_kitty

def pay_myself_Financial_fredom():
    pay_myself_Financial_fredom_kitty=(10/100.0)*income
    return "Your pay yourself kitty should have: ", pay_myself_Financial_fredom_kitty

def give_back_to_the_community():
    give_back_to_the_community_kitty=(5/100.0)*income
    return "Your giving back kitty should have: " , give_back_to_the_community_kitty

bills=bills_expenses()
long_term = long_term_savings()
play=play_and_leisure()
education=education_personal_growth()
mine=pay_myself_Financial_fredom()
give=give_back_to_the_community()


print bills
print long_term
print play
print education
print mine
print give

Выход:

Enter your Income: Your income is: 200 
<type 'float'>
('Your bills kitty should have: ', 110.00000000000001)
('Your long term kitty should have: ', 20.0)
('Your play and leisure kitty should have: ', 20.0)
('Your personal growth  kitty should have: ', 20.0)
('Your pay yourself kitty should have: ', 20.0)
('Your giving back kitty should have: ', 10.0)

Вы получите неточности с плавающей точкой - см. Математика с плавающей запятой не работает? - вы можете использовать round(3.2222,2) для округления до 2 десятичных цифр.

0 голосов
/ 14 января 2019

raw_input возвращает здесь строку, а не целое число, поэтому вам придется приводить переменную дохода к int и обрабатывать ошибку, когда она не может быть приведена.

Поскольку доход представляет собой строку,. Тонкая ошибка здесь в умножении. В python2 целочисленное деление возвращает округленное в целое число. Это означает, что 55/100 вернет 0, а не 0,55. Вам нужно разделить поплавки, поэтому 55,0 // 100 даст вам .55.

По сути, вы умножаете свой доход (строку) на 0. Умножение строки на значение x в python повторяет строку x раз. Итак, вы получаете пустую строку здесь.

0 голосов
/ 14 января 2019

Код довольно понятен: income возвращает строку. Ваша "арифметика" в строке возвращает пустую строку. Преобразуйте его в int перед возвратом. Также не перегружайте переменную income:

def get_income():
    num = int(raw_input("Enter your Income: "))
    print "Your income is: %d " % num
    return num

income = get_income()
...