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

Python 有人能告诉我我的代码有什么问题吗,python,algorithm,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

我是一个初学者,只想说谢谢你的帮助。我可能犯了一些新手错误,但这就是我来这里学习的原因。我不知道出了什么问题,但假设我插入一个字符串(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

好的,让我们一点一点地看一下:

  • 对于F到C
    以及代码中的其他类似“语句”都是无效的python。另外,它们似乎毫无用处,所以我在下面删除了它们
  • 对变量执行的操作未到位。执行
    (值-32)*5/9
    时,必须将结果存储在某个位置<代码>值将始终保持不变,除非为其指定值
  • 当你返回时,你必须返回一些东西。只要有
    return
    关键字就行了
  • 这是您的代码的修订版本。为了说明第2点,我特意将第一个和第二个案例(F到C,F到K)说得更详细一些:

    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
    
    另外还有几点:

    • 正如我将在下面演示的那样,最好将您的案例集中起来。在我看来,这使得代码更具可读性
    • 您应该始终标准化您的输入。在这种情况下,请考虑用户以小写形式输入
      “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
    

    当你在这里时,我们不妨给出正确的换算公式

    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)
    

    请提供调用代码,并修复缩进以反映您实际拥有的内容,缩进在Python中具有重要意义。最简单的方法是:直接从编辑器中复制并粘贴,然后高亮显示并按ctrl-k键。C到F的值*(9/5)+32这甚至不是有效的python。1。您没有调用该函数;哪一个2。实际上没有意义。当您对C到F等执行
    操作时,您试图实现什么?
    返回(值+273)#对于C到K
    可能是您想要的。例如,您可以只使用一个
    返回
    语句,并且可以将结果存储在单个变量中。这不是比一个函数有五个返回语句更具python风格吗?只要一切都简洁,我看不出多个返回有什么问题。这可以归结为个人偏好。但如果我们真的想压缩OP的代码,还有其他方法(即使用字典)。一般来说,在处理
    n
    单元之间的转换时,处理每个可能的转换都需要O(n^2)个代码路径。取而代之的是,选择一个中间单位(不一定是实际单位之一),并仅定义中间单位和目标之间的转换。这只需要O(n)个代码路径。在这种情况下,只需使用K作为中介;将任何输入转换为开尔文(如有必要),然后将开尔文转换为最终目标(如有必要)。例如,这样可以避免将摄氏度直接转换为华氏度。