开始 Python 个函数和列表

Beginning Python functions and lists

*快速编辑我正在使用 python 3.4

我刚开始在 class 中学习 python,虽然它似乎是一种比 C++ 更容易处理的语言,但仍有一些我无法解决的问题。

我需要做一个小函数,它接受一些以华氏度为单位的温度,并将它们转换为摄氏度,然后以列表形式放回它们。我有大部分代码,我相信它应该可以工作。但是,我一直收到一个错误,指出变量尚未声明。

input_temps = [-20.0, -10.0, 5.0, 18.0, 50.0, 212.0]

def farenheit_to_celsius(data):         #function definition
    output_temps = []                   #create empty list
        for input in data:              #cycle through list
            ((input_temps-32)* 5/9)     #done to each item oninput_temps
    output_temps += [input]             #connects list to list
    return output_temps                 #returns output_temps with newvalues

 print(output_temps)                    #prints out output_temps to debug

代码在我的编辑器上缩进正确。但是,当我尝试 运行 时,它说 "output_temps" 尚未声明。另外,我正在尝试将列表添加到列表中,但是我不确定我是否正确地添加了列表。

output_temps += [input]          #not 100% sure if this is right.
for input in data:              
    ((input_temps-32)* 5/9) # this should be input = (input - 32)*5/9

Int 在 Python 中是不可变的。
您的代码中有一些缩进错误。
在打印 output_temps.

之前,您还没有调用 farenheit_to_celsius
input_temps = [-20.0, -10.0, 5.0, 18.0, 50.0, 212.0]

def farenheit_to_celsius(data):         #function definition
    output_temps = []                   #create empty list
    for input in data:              #cycle through list
        input =  ((input-32)* 5/9)     #done to each item oninput_temps
        output_temps += [input]             #connects list to list
        # I think use output_temps.append(input) will be better. But it's ok here.
    return output_temps                 #returns output_temps with newvalues

print(farenheit_to_celsius(input_temps))                    #prints out output_temps to debug

output_temps 正在您的方法内部声明,但在不在方法内部的打印语句中被引用,这就是您收到错误的原因。不要打印 output_temps,而是打印对方法的调用,这将 return output_temps:

print(farenheit_to_celsius(my_data))

要添加到 Python 中的列表,您可以这样做:

my_list.append(my_data)
input_temps = [-20.0, -10.0, 5.0, 18.0, 50.0, 212.0]


def farenheit_to_celsius(data):
    output_temps = []

    for input in data:
        ((input_temps-32)* 5/9)
        output_temps += [input]

    return output_temps
    print(output_temps)

你在这里应该很好,我只需要修复这个程序中的一些白色-space错误和output_temps += [input] 好的它不会导致任何错误

首先,如果不重新分配 input 变量,则不会修改它们。其次,output_temps中的修改应该在循环内部完成。第三也是最重要的一点,该函数应该已经被调用(output_temps 的作用域在函数执行结束后结束)。

input_temps = [-20.0, -10.0, 5.0, 18.0, 50.0, 212.0]
def farenheit_to_celsius(data):         #function definition
    output_temps = []                   #create empty list
    for input in data:              #cycle through list
        input = ((input-32)* 5/9)     #done to each item oninput_temps
        output_temps += [input]             #connects list to list
    return output_temps                 #returns output_temps with newvalues

print(farenheit_to_celsius(input_temps))

output_temps += [input] 是正确的。它将 input 放入列表中,它是唯一的元素,然后将其添加到 output_temps 。但是,可能更好的方法是使用 append method on lists

output_temps.append(input)

问题是您定义函数,而不是调用函数。就像在 C++ 中一样,函数中代码的 none 是 运行,除非您调用该函数。

此外,即使您在 print 之前调用该函数,print 也不会工作,因为您正在尝试访问 output_temps,它是函数,来自函数外部。函数 returns output_temps,所以你应该这样做:

output_temps = fahrenheit_to_celsius(input_temps)

您在函数本身内部也有问题,您还没有 运行 因为您没有在代码中调用它。首先,((input_temps-32)* 5/9) 指的是温度列表,而不是您正在迭代的当前温度。但即使您执行 ((input-32)* 5/9),它也只会计算您想要的值,而不会保存它。你需要对结果做些什么;例如,您可以将它分配给一个变量:

result = (input_temps - 32) * (5 / 9)

接下来,output_temps += [result] 应该 for 循环中;否则,您只能在 for 循环完成后将最后一个温度添加到输出列表。此外,您应该使用 output_temps.append() 向列表中添加一个值,而不是您现在正在做的事情。

这是您的代码的固定版本,对变量名称进行了一些更改:

fahrenheit_temps = [-20.0, -10.0, 5.0, 18.0, 50.0, 212.0]

def fahrenheit_to_celsius(temps):
    celsius_temps = []
    for fahrenheit in data:
        celsius = (input_temps - 32) * (5 / 9)
        celsius_temps.append(celsius)
    return celsius_temps

 print(fahrenheit_to_celsius(fahrenheit_temps))

现在,一般来说,我建议让函数只处理一个值,并在函数外部处理列表。

此代码最终与上面的代码执行相同的操作,但它更简洁、更灵活。

def fahrenheit_to_celsius(temp):
    return (temp - 32) * (5 / 9)

fahrenheit_temps = [-20.0, -10.0, 5.0, 18.0, 50.0, 212.0]
celsius_temps = [fahrenheit_to_celsius(temp) for temp in fahrenheit_temps]

print(celsius_temps)