有人能告诉我我的代码有什么问题

时间:2017-09-26 19:56:33

标签: python algorithm

我是初学者编码员,我想感谢您的帮助。我可能犯了一些菜鸟错误,但这就是我在这里学习的原因。我无法弄清楚出了什么问题,但我可以说我插入一个字符串(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 个答案:

答案 0 :(得分:2)

好的,让我们一点一点地抓住它:

  1. for F to C以及您在代码中使用的其他类似“语句”都不是有效的python。另外,它们似乎没有用处,所以我已将它们删除。
  2. 对变量执行的操作不是就地执行的。执行(value -32)* 5 / 9时,必须将结果存储在某处。 value始终保持不变,除非您为其指定值。
  3. 当您return时,您必须返回某些内容。仅使用return关键字就无法执行任何操作。
  4. 以下是您的代码的修订版。我故意将第一和第二个案例(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
    

答案 1 :(得分: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')

我认为你可能也错误地调用了这个函数。

有一件非常重要的事情你可能不知道,这里没有人告诉你。它可能会让你头疼,试图找出你为什么得到错误的值。

整数浮点数字(或浮点数)。简单来说,整数是整数,但浮点数可以使用小数和小数值。

如果仅使用整数,则会将值四舍五入为整数。我在很大程度上注意到了Celsius到Fahrenheit的转换。当我使用9/5而不是9.0 / 5.0时,它对该值进行了大量舍入,而我的回答却很明显。这是因为它将9/5舍入为整数,而不是9/5 = 1.8。

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

我在所有公式中都包含小数点,因此Python使用浮点数进行数学计算。 (至少我的Python解释器是。)

另外,仔细检查公式。

编辑:

别忘了打印你的答案

print(result)