Python 转换器 - 我卡住了

Python converter - I'm stuck

我正在制作一个货币转换器。转换器需要一个最小范围和最大范围,如果货币值高于或低于这些范围,转换器将要求您更改范围以能够转换货币。例如,如果用户将范围设置在 min-range 3 和 max-range 7 之间,则他只能在货币值介于 3 和 7 之间时进行转换。

将有多种货币的转换器,这就是我使用第二个 "range function" 和 "inputtext" 等变量的原因。

它的大部分似乎都有效,因为 "range" 函数似乎可以获取最小范围、最大范围和答案值等。但是我找不到 return 它的方法回到 currency_convert()。在尝试为它们、列表、循环和所有内容设置新值之前,我尝试将 range() 中的值更改为零。 Currency_convert() 尝试在 range() 中更改后仍显示相同的货币值。如何将 "answer" 发送回 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))

您应该 return 返回所有必需的项目(我猜 min_rangemax_rangeanswer ,因为它们是您 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() .

先简单回答一下。调用应该是 answer = adjust_range(min_range, max_range, answer, inputtext)。正如 Sharon Dwilif K 所说,调用函数 "range" 并不好,因为它隐藏了内置函数。那么函数中的最终语句就是 return answer.

不过,听起来使用 class 可能会有帮助。这是使用 class:

的完整工作示例
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)