2014-11-12 4 views
0

у меня есть это домашнее задание, и я не думаю, чтобы изменить эту часть кодаПочему мой код постоянно спрашивает меня о квартирах 4 раза?

def main(): 

    pennies = get_input("Enter pennies : ") 
    nickels = get_input("Enter nickels : ") 
    dimes = get_input("Enter dimes : ") 
    quarters = get_input("Enter quarters : ") 

    print("You entered : ") 
    print("\tPennies : " , pennies) 
    print("\tNickels : " , nickels) 
    print("\tDimes : " , dimes) 
    print("\tQuarters : " , quarters) 

    total_value = get_total(pennies, nickels, dimes, quarters) 
    dollars, cents = get_left_over_cents(pennies, nickels, dimes, quarters) 
    left_over_cents = get_left_over_cents(pennies, nickels, dimes, quarters) 
    print("Total = $", format(total_value,".02f"), sep="") 
    print('You have', dollars, "dollars and", cents, "cent(s)") 

Это мой код для задания, я сделал

def main(): 
    pennies = get_input("Enter pennies : ") 
    nickels = get_input("Enter nickels : ") 
    dimes = get_input("Enter dimes : ") 
    quarters = get_input("Enter quarters : ") 

    print("You entered : ") 
    print("\tPennies : " , pennies) 
    print("\tNickels : " , nickels) 
    print("\tDimes : " , dimes) 
    print("\tQuarters : " , quarters) 

    total_value = get_total(pennies, nickels, dimes, quarters) 
    dollars, cents = get_left_over_cents(pennies, nickels, dimes, quarters) 
    left_over_cents = get_left_over_cents(pennies, nickels, dimes, quarters) 
    print("Total = $", format(total_value,".02f"), sep="") 
    print('You have', dollars, "dollars and", cents, "cent(s)") 

def get_input(pennies): 
    pennies = input("Enter Pennies: ") 
    while int(pennies) < 0: 
     print("Error: money cannot be negative") 
     pennies = int(input("Enter correct amount of pennies: ")) 
    return pennies 

def get_input(nickels): 
    nickels = input("Enter nickels: ") 
    while int(nickels) < 0: 
     print("Error: money cannot be negative") 
     nickels = int(input("Enter correct amount of nickels: ")) 
    return nickels 

def get_input(dimes): 
    dimes = input("Enter dimes: ") 
    while int(dimes) < 0: 
     print("Error: money cannot be negative") 
     dimes = int(input("Enter correct amount of dimes: ")) 
    return dimes 

def get_input(quarters): 
    quarters = input("Enter quarters: ") 
    while int(quarters) < 0: 
     print("Error: money cannot be negative") 
     quarters = int(input("Enter correct amount of quarters: ")) 
    return quarters 

def get_total(pennies, nickels, dimes, quarters): 
    amount_pennies = (int(pennies) * .01) 
    amount_nickels = (int(nickels) * .05) 
    amount_dimes = (int(dimes) * .10) 
    amount_quarters = (int(quarters) * .25) 
    return amount_pennies + amount_nickels + amount_dimes + amount_quarters 

def get_left_over_cents(pennies, nickels, dimes, quarters): 
    total = int(pennies) + 5*int(nickels) + 10*int(dimes) + 25*int(quarters) 
    return total // 100, total % 100 

main() 

Но каждый раз, когда я бегу код, он говорит мне четыре раза входить в четверть. Но я хочу, чтобы он сказал, введите гроши, введите никель и т. Д. Кто-нибудь может мне помочь? Я действительно запутался в том, как сделать это, не меняя этот код ядра.

+0

Я считаю, что вы пытаетесь перегрузить метод и не существует в python. –

+0

Исправьте углубление. – BartoszKP

+0

Может быть, он должен просто устроиться на работу? Серьезно, научитесь использовать отладчик, и эти тайны ответят на них сами. Https://docs.python.org/2/library/pdb.html – jeremyjjbrown

ответ

6

Вы продолжаете переопределять свою функцию get_input. Каждый раз, когда вы это делаете, старая функция get_input омрачается и становится недоступной. Итак, в конце концов, у вас есть только get_input, который вы сделали для кварталов.

Вам необходимо переименовать свои функции, чтобы каждое из них имело уникальное имя, которое не заслонит другую функцию. Почему бы не сделать что-то вроде:

def get_pennies(...): 
    ... 

def get_nickels(...): 
    ... 

def get_dimes(...): 
    ... 

def get_quarters(...): 
    ... 

Или еще лучше сделать одну функцию, которая может обрабатывать все типы монет. A (основной) пример ниже:

def get_coin(coin_type): 
    amount = int(input("Enter " + coin_type + ": ")) # BTW, you forgot to call int() up here before. 
    while amount < 0: 
     print("Error: money cannot be negative") 
     amount = int(input("Enter correct amount of " + coin_type + ": ")) 
    return amount 

Вы бы затем вызвать эту функцию:

pennies = get_coin('pennies') 
nickels = get_coin('nickels') 
... 
+0

+1, но ugh, не переименовывайте функции! Они настолько повторяемы и должны быть объединены в одну функцию, которая обрабатывает все виды монет. –

+0

Поскольку он не может изменить верхнюю часть кода, я не думаю, что переименование является вариантом. – linus

+0

Хм. Это было бы намного лучше. Я покажу пример OP. – iCodez

4

Как iCodez explains, каждый раз, когда вы пишете def get_input(dimes): или def get_input(quarters):, Вы создаете новое определение функция get_input, и скрывает старую. Тот факт, что параметр имеет другое имя, ничего не значит. (Как это могло? Когда вы пишете pennies = get_input("Enter pennies : "), как бы Python знать, что вы хотите назвать get_input(pennies) вместо get_input(quarters)?)

Вы можете исправить это, давая каждому из них уникальное имя (get_pennies, get_nickels и т.д.), и называя их уникальными именами.

Кроме того, обратите внимание, что вы на самом деле не с помощью аргумент pennies или nickels или любой другой. Вы берете строку со строкой и ничего не делаете с ней.

И это важно, потому что это означает, что вы можете реорганизовать их все в одну функцию. Если вы посмотрите на написанные вами реализации, они уже почти идентичны; единственное различие - в строках, которые вы распечатываете. И вы уже получаете разные строки подсказок с каждым вызовом. Итак, почему бы просто не использовать его?

def get_input(prompt): 
    number = input(prompt) 
    while int(number) < 0: 
     print("Error: money cannot be negative") 
     number = int(input(prompt)) 
    return number 

Теперь pennies = get_input("Enter pennies : ") спросит вас за гроши, nickels = get_input("Enter nickels : ") попросит вас никелевые и т.д.


Как примечание стороны, есть серьезная ошибка во всех четырех ваших реализаций (и в моя объединенная версия(). Если ваш первый ввод неотрицателен, функция вернет строку, например "3", если она отрицательная, но более поздняя - нет, функция вернет целочисленное значение, например 5. вероятно, хотят сделать первый number = …, а второй - идентичным.

Смежные вопросы