Python 有人能告诉我我的代码有什么问题吗
我是一个初学者,只想说谢谢你的帮助。我可能犯了一些新手错误,但这就是我来这里学习的原因。我不知道出了什么问题,但假设我插入一个字符串(50,K,C),它应该将50开尔文转换为摄氏度,但我的代码什么也不做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
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
关键字就行了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作为中介;将任何输入转换为开尔文(如有必要),然后将开尔文转换为最终目标(如有必要)。例如,这样可以避免将摄氏度直接转换为华氏度。