2017-06-12 6 views
1
CHANGE_TOTAL = (float(input('type in the change total '))) 
def main(): 
    value_1 = (float(input('type in the first value '))) 
    value_2 = (float(input('type in the second value '))) 
    value_3 = (float(input('type the third value '))) 
    values_average(value_1,value_2,value_3) 
def values_average(a,b,c): 
    total = (a+b+c) 
    if total > CHANGE_TOTAL: 
     print ('there\'s not change availibility at the moment plase wait') 
     main() 
    else: 
     print ('your change is being process plase wait a moment') 
    change_due(total) 
def change_due(items_cost): 
    input ('"press enter"') 
    money_received = (float(input('type in the amount of money received '))) 
    change = (money_received - items_cost) 
    print ('your change is', change) 
    change_total_aft_trans(change) 
def change_total_aft_trans(a): 
    change_left = (CHANGE_TOTAL - a) 
    print ('the change left is', change_left) 

main() 

das ist die Sache, wie Sie in der ¨values_average FUNTION sehen kann, wenn ich in einer Schleife versuchen, die ganze Sache durch den Haupt function¨after die if-Anweisung aufrufen Es fordert mich nicht auf, einen neuen CHANGE_TOTAL-Wert einzugeben, was ich gerne tun würde. irgendein Rat ? Danke im VorausAufruf eine Funktion ohne Eingabe globale Variable Weglassen

+0

Bitte den Code richtig einrücken. Es ist unmöglich, Python ohne korrekte Einrückung zu lesen. –

+0

ich meinte CHANGE_TOTAL –

+0

Veröffentlichen Sie keine Korrekturen in den Kommentaren. * Korrigieren Sie die Frage selbst, indem Sie sie bearbeiten *. –

Antwort

0

Ich denke, sich auf veränderlichen globalen Zustand ist uncool. Aber Sie können es leicht so machen, wenn Sie wirklich wollen. Bewegen Sie die CHANGE_TOTAL = (float(input('type in the change total ')))innenmain und legte eine global Richtlinie:

def main(): 
    global CHANGE_TOTAL 
    CHANGE_TOTAL = (float(input('type in the change total '))) 
    value_1 = (float(input('type in the first value '))) 
    value_2 = (float(input('type in the second value '))) 
    value_3 = (float(input('type the third value '))) 
    values_average(value_1,value_2,value_3) 
def values_average(a,b,c): 
    total = (a+b+c) 
    if total > CHANGE_TOTAL: 
     print ('there\'s not change availibility at the moment plase wait') 
     main() 
    else: 
     print ('your change is being process plase wait a moment') 
    change_due(total) 
def change_due(items_cost): 
    input ('"press enter"') 
    money_received = (float(input('type in the amount of money received '))) 
    change = (money_received - items_cost) 
    print ('your change is', change) 
    change_total_aft_trans(change) 
def change_total_aft_trans(a): 
    change_left = (CHANGE_TOTAL - a) 
    print ('the change left is', change_left) 

Hier wäre ein sinnvoller gestaltet sein, meiner Meinung nach:

def main(): 
    change_total, *values = prompt_values() 
    cost = sum(values) 
    while cost > change_total: 
     print("there's not change availibility at the moment plase wait") 
     change_total, *values = prompt_values() 
     cost = sum(values) 
    change_due(cost, change_total) 

def prompt_values(): 
    change_total = float(input('type in the change total ')) 
    value_1 = float(input('type in the first value ')) 
    value_2 = float(input('type in the second value ')) 
    value_3 = (float(input('type the third value '))) 
    return change_total, value_1, value_2, value_3 

def change_due(items_cost, change_total): 
    print ('your change is being process plase wait a moment') 
    input ('"press enter"') 
    money_received = (float(input('type in the amount of money received '))) 
    change = (money_received - items_cost) 
    print ('your change is', change) 
    change_total_aft_trans(change, change_total) 

def change_total_aft_trans(change, change_total): 
    change_left = change_total - change 
    print ('the change left is', change_left) 

Hinweis, ich habe eine while-Schleife anstelle der gegenseitigen Rekursion.

+0

Danke, es wird funktionieren, ich werde die Art und Weise, wie ich Code schreibe, neu überdenken, ich habe vor zwei Wochen begonnen, Python mit einem pdf-Aufruf zu lernen, angefangen mit Python ist es ein ziemlich gutes Buch weit –

0

Ich habe Ihren Code ein wenig geändert. Es ist eine gute Übung in der Programmierung, keine globalen Variablen zu definieren, die sie ändern werden, da es in großen Co-Klassen fast unmöglich ist, Fehler zu verfolgen. Es empfiehlt sich, den zu ändernden Wert in eine Funktion zu übergeben und dann den neuen Wert zurückzugeben. Dies macht es viel einfacher, einzelne Funktionen auf Fehler zu überprüfen. Wenn Sie mehrere Werte zurückgeben wollen, sind nur Tupel zurückgeben und entpacken, zB

def func(val1, val2, val3): 
    val1 += 1 
    val2 += 2 
    val3 += 3 
    return (val1, val2, val3) 

def main(): 
    a, b, c = 1, 2 ,3 
    a, b, c = func(a, b, c) 
    # a=2, b=4, c=6 

Ich habe auch einen Versuch außer Block hinzugefügt, die das Programm geöffnet bleiben machen, wenn Sie versehentlich einen Wert falsch eingeben, dies ist wirklich gut trainieren.

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 


def main(): 
    # Insdead of gloval funciton just pass it to functions 
    CHANGE_TOTAL = get_value('CHANGE TOTAL') 

    value_1 = get_value('Value1') 
    value_2 = get_value('Value2') 
    value_3 = get_value('Value3') 
    average = values_average(value_1,value_2,value_3) 
    new_balance = withdraw(CHANGE_TOTAL, average) 

# Since you are getting three float values from input why not make a fucntion 
# that gets a values, specifed by a name and checks for invalid entries 
# if you ever need to get another float value, just call this with a param 
def get_value(name_of_value: str) -> float: 
    print('Please enter the',name_of_value, 'value: ', end='') 
    while True: 
     try: 
      value = float(input()) 
      break 
     except ValueError: 
      print('Invalid entry, try again: ', end='') 
    return value 

#this functions does too much seperate it fucntions: get_average() and 
# withdraw() deposit() 

def values_average(a,b,c): 
    total = a + b + c 
    return total/3 #average 

def withdraw(available_change, amount): 
    if amount >= available_change: 
     return available_change - ammount 
    else: 
     print('Invaild funds for transaction') 

""" 
# Please note I have stopped here!! b 
def change_due(items_cost): 
    input ('"press enter"') 
    money_received = (float(input('type in the amount of money received '))) 
    change = (money_received - items_cost) 
    print ('your change is', change) 
    change_total_aft_trans(change) 

def change_total_aft_trans(a): 
    change_left = (CHANGE_TOTAL - a) 
    print ('the change left is', change_left) 
""" 

main() 
Verwandte Themen