Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
简单Python函数语法错误问题_Python - Fatal编程技术网

简单Python函数语法错误问题

简单Python函数语法错误问题,python,Python,我是编程界的新手,所以如果这不是一个好问题,请对我放轻松。不管怎样,我正在尝试用Python创建我的第一个函数,但我一直遇到语法错误 具体地说,这就是我进入Python的内容: def convert (fahr): cels = fahr *1.8 + 32 return cels 然后,当我进入时: convert(10) 我收到这个错误: SyntaxError:无效语法 我不明白为什么我会得到这个,因为我似乎遵循了所有适用的规则。如果有人知道我为什么得到这个,我很想知

我是编程界的新手,所以如果这不是一个好问题,请对我放轻松。不管怎样,我正在尝试用Python创建我的第一个函数,但我一直遇到语法错误

具体地说,这就是我进入Python的内容:

def convert (fahr):
    cels = fahr *1.8 + 32
    return cels
然后,当我进入时:

convert(10)
我收到这个错误:

SyntaxError:无效语法


我不明白为什么我会得到这个,因为我似乎遵循了所有适用的规则。如果有人知道我为什么得到这个,我很想知道

将其分成多行:

def转换(fahr):
cels=fahr*1.8+32
返回cels
出现语法错误的原因是在同一行上有两条语句,一条接一条。如果你真的想把它写在一行中,你可以写:

def转换(fahr):cels=fahr*1.8+32;返回cels
但是Python的标准实践是每行只有一条语句


另外,您的函数表示0°F=32°C。我认为应该是相反的(0°C=32°F)。

在Python中,所有语句必须位于新行。因此,当您使用
def
定义函数时,必须在新行中包含函数的每个语句(例如步骤或计算)。所以正确的代码应该是这样的

def转换(fahr):
cels=(华氏*1.8)+32
返回cels
删除冗余变量的简单重构如下:

def转换(fhr):
返回(华氏*1.8)+32
然后你可以进一步简化它,这是你不应该经常使用的,它使用的代码是这样的

convert=lambda fahr:(fahr*1.8)+32
这样做的好处是函数只在一行中定义,但它会使代码难以读取。所以应该节约使用。还有最后一种方法,我最初没有把它作为你不应该做的事情的主要例子。您可以将多个语句放在同一行上,但可以使用分号分隔每个语句。这个的代码应该是这样的

def转换(fahr):cels=(1.8*fahr)+32;返回cels

所有这些函数都将由行
convert(x)
或您想要的任何数字调用。

错误在于您将其写入终端而不是.py文件,因此您需要小心输入代码。在这里,您需要在缩进之间留出一条空行。看看这个:

>>> def convert (fahr):
...     cels = fahr *1.8 + 32
...     return cels
...
请注意,
:python仍然希望我插入缩进代码。您需要留下一个空行,然后键入
covert(10)
,如下所示:

>>> def convert (fahr):
...     cels = fahr *1.8 + 32
...     return cels
...
>>> convert(10)
请注意下面的
convert(10)

这将生成一个语法错误:

>>> def convert (fahr):
...     cels = fahr *1.8 + 32
...     return cels
... convert(10)
文件“”,第4行
转换(10)
^
SyntaxError:无效语法

这与.py文件形成对比。在.py文件中,这是完全合法的(尽管惯例不鼓励这样做):


^更新:当我把函数复制到这个网站上时,它去掉了间距。但是,在Python中,冒号后面有一个新行,自动缩进之后还有一个新行,新行也从32开始。
return cels
标识必须与
cels=fahr*1.8+32
的标识对齐。@BenMogil您答案中的代码适用于meI输入,与您在那里输入的方式完全相同。当我把它复制到这个论坛时,它只是改变了它。@BenMogil如果你用和我一样的方式输入它,它应该可以工作。我在IDLE(Python3.9.1)中测试了它,它可以正常工作,这太奇怪了。。。我在空闲的3.8.3 Shell中,它不工作…没有分号。。。只是一个标准colon@BenMogil编辑您的答案,将代码放入代码块(三个倒勾,换行,您的代码,换行,三个倒勾),这样它将保持间距Hanks Luke,但正如我上面提到的,我输入的代码与您输入的代码的确切间距相同,我仍然收到错误。在我发表这篇文章时,出于某种原因,StackOverflow刚刚将它转换成了它。你是通过python shell运行它吗?如果没有,请在python文件中尝试。这将是文件>新的粘贴在代码中,然后运行>运行交互式shell。当您复制和pase时,很可能是缩进或其他问题shell@LukeBraithwaite您可以用分号将多个语句放在同一行上,但这被认为是不好的做法。@BenMogil这是什么错误?还是语法错误吗?哦,谢谢!就我个人所知,终端和.py文件有什么区别?@BenMogil没什么区别。1) 这种语法是不同的。2) 在.py文件中,写入
convert(10)
不会打印结果,必须写入
print(convert(10))
。您应该在.py文件中完成大部分工作。除了上述两个不同点,我想不出任何东西,尽管我很少在控制台中编写代码,因为这会使调试和重用代码更加困难。哦,你建议我不要使用IDLE进行学习?我现在真的在尝试让自己沉浸在Python中,尽可能多地学习,我认为IDLE是我做这件事的最佳环境,但我很想听听你的想法。
def convert (fahr):
    cels = fahr *1.8 + 32
    return cels
convert(10)
# runs without error