2015-09-29 86 views
2

我正在做一個貨幣轉換器。轉換器需要最小範圍和最大範圍,轉換器會要求您更改範圍,以便在貨幣價值高於或低於這些範圍時轉換貨幣。例如,如果用戶將範圍設置爲最小範圍3和最大範圍7之間的範圍,則只能在貨幣值介於3和7之間時進行轉換。Python轉換器 - 我被卡住了

將會有幾種貨幣類型的轉換器,這就是爲什麼我正在使用第二個「範圍函數」和變量「輸入文本」等。

大部分似乎工作,因爲「範圍」函數似乎拿起最小範圍,最大範圍和答案值等等,但我不能找到一種方式返回到currency_convert()。我嘗試在範圍()中將值更改爲零,然後嘗試爲它們,列表,循環和所有內容設置新值。嘗試在範圍()中更改它之後,Currency_convert()仍然顯示相同的貨幣值。如何將「答案」發回給currency_convert()?我必須在range()或其他東西中做出「answer2」嗎?

任何想法我做錯了什麼呢?

這是劇本的部分看起來像ATM:

def range(min_range, max_range, answer, inputtext): 
    if answer > min_range and answer < max_range: 
    return 
    else: 
    answer = 0 
    min_range = input("Set a min range for conversion: ") 
    max_range = input("Set a max range for conversion: ") 
    answer = input(inputtext) 
    Return answer (?) 



def currency_convert(): 
    min_range = input("min range: ") 
    max_range = input("max range: ") 

    inputtext = "How many dollars to convert: " 
    answer = input(inputtext) 
    range(min_range, max_range, answer, inputtext) 

    sek = answer * 3 
    print("%d is the same as" % (sek)) 

回答

2

您應該返回回所有需要的物品(我猜min_rangemax_rangeanswer,因爲他們纔是gettings在range()改變功能),然後在您的currency_convert()功能中接受它們。示例 -

def newrange(min_range, max_range, answer, inputtext): 
    if answer > min_range and answer < max_range: 
    return min_range, max_range, answer 
    else: 
    answer = 0 
    min_range = input("Set a min range for conversion: ") 
    max_range = input("Set a max range for conversion: ") 
    answer = input(inputtext) 
    return min_range, max_range, answer 



def currency_convert(): 
    min_range = input("min range: ") 
    max_range = input("max range: ") 

    inputtext = "How many dollars to convert: " 
    answer = input(inputtext) 
    min_range, max_range, answer = newrange(min_range, max_range, answer, inputtext) 

    sek = answer * 3 
    print("%d is the same as" % (sek)) 

我也建議不要命名您的函數或變量作爲range因爲這會掩蓋內置函數range()

+0

神奇,它的工作原理。謝謝!只有一件事,返回應該是返回(小r)否則你會得到錯誤。 – saltcracker

2

首先一個簡單的答案。電話應該是answer = adjust_range(min_range, max_range, answer, inputtext)。正如Sharon Dwilif K所說,調用函數「範圍」並不好,因爲它影響了內建函數。那麼函數中的最後一個語句就是return answer

但是,它聽起來就像使用一個類可以幫助。這是一個使用一個類的完整的工作示例:

class CurrencyConverter: 
    """Convert currency within a certain range.""" 
    RATES = {'USD_SEK': 3, 
      'USD_INR': 60} 

    def __init__(self, currency_from, currency_to): 
     self.currency_from = currency_from 
     self.currency_to = currency_to 
     self.min_range = 0 
     self.max_range = 0 
     self.amount_from = 0 

    def ask_range(self): 
     self.min_range = int(input("Set a min range for conversion: ")) 
     self.max_range = int(input("Set a max range for conversion: ")) 

    def calculate_amount_to(self): 
     self.ask_amount_from() 
     self.adjust_range() 
     rate_key = '%s_%s' % (self.currency_from, self.currency_to) 
     return self.amount_from * self.RATES[rate_key] 

    def ask_amount_from(self): 
     self.amount_from = int(
      input("How many %s to convert: " % self.currency_from)) 

    def adjust_range(self): 
     """Makes sure the self.amount_from is within the range.""" 
     if not self.min_range <= self.amount_from <= self.max_range: 
      self.ask_range() 
      self.ask_amount_from() 


if __name__ == "__main__": 
    converter = CurrencyConverter('USD', 'SEK') 
    converter.ask_range() 
    sek = converter.calculate_amount_to() 
    print("%d is the result in SEK." % sek) 
    sek = converter.calculate_amount_to() 
    print("%d is another result in SEK." % sek) 

    converter = CurrencyConverter('USD', 'INR') 
    converter.ask_range() 
    inr = converter.calculate_amount_to() 
    print("%d is rupees." % sek) 
+0

1+給你。感謝您的貢獻。 – saltcracker