2017-09-26 96 views
-3

我是一名初学者编码人员,只想感谢您的帮助。我可能犯了一些新秀错误,但这就是我在这里学习的原因。我无法弄清楚什么是错的,但可以说我塞在一个字符串(50,K,C)应50开尔文转换为摄氏温度,但我的代码什么也不做有人可以告诉我我的代码有什么问题

def temperature_converter(value, scale_from, scale_to): 

    if scale_from == "F" and scale_to == "C": 
     (value -32)* 5/9 for F to C 
     return 
    elif scale_from == "F" and scale_to == "K": 
     (value * 5/9) + 273 for F to K 
     return 
    elif scale_from == "C" and scale_to == "F": 
     value * (9/5) + 32 for C to F 
     return 
    elif scale_from == "C" and scale_to == "K": 
     (value + 273) for C to K 
     return 
    elif scale_from == "K" and scale_to == "F": 
     9/5 * (value - 273) + 32 for K to F 
     return 
    elif scale_from == "K" and scale_to == "C": 
     value - 273 for K to F 
     return 
+2

请提供调用代码,并修复缩进*反映了你确实有*,压痕已meaningin的Python。最简单的方法:直接复制并粘贴您的编辑器,然后突出显示并按下ctrl-k。 –

+4

'C *到F'的值*(9/5)+32甚至不是有效的python。 –

+1

1.您未调用该功能;这实际上并不合理。 – jonrsharpe

回答

2

好吧,让我们把它的点点滴滴:

  1. for F to C和其他类似的“声明”,你在你的代码是无效的Python。另外,它们似乎没有任何用处,所以我已经将它们删除了。
  2. 对变量执行的操作不是在原地完成的。当您执行(value -32)* 5/9时,您必须在某处存储该结果。除非您为其分配值,否则value将始终保持不变。
  3. 当你return,你必须返回东西。只需拥有return关键字,就不会执行任何操作。

这是您的代码的修订版本。我已经故意制成与第一和第二壳体(F至C,F至K)更详细的说明点2:

def temperature_converter(value, scale_from, scale_to): 
    if scale_from == "F" and scale_to == "C": 
     a = (value -32)* 5/9 #Assign the modified value to a variable 
     return a 
    elif scale_from == "F" and scale_to == "K": 
     value = (value * 5/9) + 273 #The value variable can be reused 
     return value 
    elif scale_from == "C" and scale_to == "F": 
     return value * (9/5) + 32 #Always return something. Don't have just the keyword 
    elif scale_from == "C" and scale_to == "K": 
     return value + 273 
    elif scale_from == "K" and scale_to == "F": 
     return 9/5 * (value - 273) + 32 
    elif scale_from == "K" and scale_to == "C": 
     return value - 273 

几个加分:

  • 最好是聚成一团你的情况,我将在下面进行演示。它使IMO更具可读性的代码。
  • 您应该始终标准化您的输入。在这种情况下,考虑到用户输入"f"的可能性。
  • 帐户被给予虚假的论点。

最终代码将是:

def temperature_converter(value, scale_from, scale_to): 
    scale_from = scale_from.upper() #Make all arguments upper case 
    scale_to = scale_to.upper() 

    if scale_from == "F": #Group cases together 
     if scale_to == "C": 
      return (value -32)* 5/9 
     elif scale_to == "K": 
      return (value * 5/9) + 273 
    elif scale_from == "C": 
     if scale_to == "F": 
      return value * (9/5) + 32 
     elif scale_to == "K": 
      return value + 273 
    elif scale_from == "K": 
     if scale_to == "F": 
      return 9/5 * (value - 273) + 32 
     elif scale_to == "K": 
      return value - 273 

    raise ValueError("Invalid argument") #Have predictable behavior if invalid input is given 
+0

你可以只有一个'return'语句并且可以将结果存储在单变量。是不是更pythonic,而不是有一个单一的函数**五返回**语句。 – Ishpreet

+0

只要一切都简洁,我不会看到多重回报问题。这归结于个人偏好。但是如果我们真的想压缩OP的代码,还有其他方法(即使用字典)。 – stybl

+0

通常,在处理n个单元之间的转换时,处理每个可能的转换都需要O(n^2)个代码路径。相反,选择一个中间单位(不一定是实际单位之一),并且只定义中介和目标之间的转换。这只需要O(n)个代码路径。在这种情况下,只需使用K作为中介;将任何输入转换为开尔文(如有必要),然后将开尔文转换为最终目标(如有必要)。例如,这避免了必须将摄氏温度直接转换成华氏温度。 – chepner

0

我们不妨给予正确的转换公式而你在这里

def temperature_converter(value, scale_from, scale_to) : 

    if scale_from == "F" and scale_to == "C" : 
     return (value - 32.0) * 5/9 #for F to C 
    elif scale_from == "F" and scale_to == "K": 
     return (value + 459.67) * 5/9 #for F to K 
    elif scale_from == "C" and scale_to == "F": 
     return value * (9.0/5.0) + 32 #for C to F 
    elif scale_from == "C" and scale_to == "K": 
     return value + 273.15 #for C to K 
    elif scale_from == "K" and scale_to == "F": 
     return ((value - 273.15) * 1.8) + 32 #for K to F 
    elif scale_from == "K" and scale_to == "C": 
     return value - 273.15 #for K to C 

然后调用它像这样

result = temperature_converter(50, "F", "C") 

或此

result = temperature_converter(50, 'F', 'C') 

我想你也可能调用了错误的函数。

有一件很重要的事情,你可能不知道,也没有人告诉你。它可能会导致您主要头痛,试图找出为什么你得到错误的值。

整数浮点号码(或浮子)。简单地说,整数是整数,但浮点数可以使用小数和小数值。

如果只使用整数,它会将值四舍五入为整数。我注意到这与摄氏到华氏转换有很大关系。当我使用9/5而不是9.0/5.0时,它的价值大大增加了,我的回答很顺利。这是因为它将整数9/5凑整,而不是9/5 = 1.8。

请记住这一点。确保你的Python解释器以你期待的方式使用浮点数(十进制值),并按照你想要的方式进行数学运算。

我在所有的公式中都包含了小数点,所以Python在数学上使用了浮点数。 (至少我的Python解释器是。)

此外,请仔细检查公式。

编辑:

不要忘了打印你的答案

print(result) 
相关问题