Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.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 1行函数获取中间字母,语法错误_Python_Python 3.x - Fatal编程技术网

Python 1行函数获取中间字母,语法错误

Python 1行函数获取中间字母,语法错误,python,python-3.x,Python,Python 3.x,尝试编写一行函数,该函数将接受输入字符串,并根据字符串是均匀的还是不均匀的来获取中间字母。我得到一个错误代码,说在elseif之后的第一个镜头有语法错误。第三行代码应该在第二行继续 守则: 错误: typelens/2 is float不是奇偶长度的检查,正如您在下面看到的,对于您进行的检查,奇偶字符串长度的计算结果都为True,因为两个分段都是浮点值 4/2=2.0和5/2=2.5 为什么不通过检查偶数/奇数长度的2的可除性来保持简单呢。 检查数字长度是否为奇数或偶数,并相应地选择中间字符 d

尝试编写一行函数,该函数将接受输入字符串,并根据字符串是均匀的还是不均匀的来获取中间字母。我得到一个错误代码,说在elseif之后的第一个镜头有语法错误。第三行代码应该在第二行继续

守则:

错误:

typelens/2 is float不是奇偶长度的检查,正如您在下面看到的,对于您进行的检查,奇偶字符串长度的计算结果都为True,因为两个分段都是浮点值 4/2=2.0和5/2=2.5

为什么不通过检查偶数/奇数长度的2的可除性来保持简单呢。 检查数字长度是否为奇数或偶数,并相应地选择中间字符

def get_middle(s):

    #If even length, select 2 characters
    if len(s)%2 == 0:
        return s[int(len(s)/2)-1:int(len(s)/2)+1]
    #If odd length, select 1 character
    else:
        return s[int(len(s)/2)]

print(get_middle('a'))
print(get_middle('ab'))
print(get_middle('abc'))
print(get_middle('abcd'))
print(get_middle('abcde'))
输出将是

a
ab
b
bc
c
从这里,我们可以轻松地编写一行程序

def get_middle(s):

    return s[int(len(s)/2)-1:int(len(s)/2)+1] if len(s)%2 == 0 else s[int(len(s)/2)]
typelens/2 is float不是奇偶长度的检查,正如您在下面看到的,对于您进行的检查,奇偶字符串长度的计算结果都为True,因为两个分段都是浮点值 4/2=2.0和5/2=2.5

为什么不通过检查偶数/奇数长度的2的可除性来保持简单呢。 检查数字长度是否为奇数或偶数,并相应地选择中间字符

def get_middle(s):

    #If even length, select 2 characters
    if len(s)%2 == 0:
        return s[int(len(s)/2)-1:int(len(s)/2)+1]
    #If odd length, select 1 character
    else:
        return s[int(len(s)/2)]

print(get_middle('a'))
print(get_middle('ab'))
print(get_middle('abc'))
print(get_middle('abcd'))
print(get_middle('abcde'))
输出将是

a
ab
b
bc
c
从这里,我们可以轻松地编写一行程序

def get_middle(s):

    return s[int(len(s)/2)-1:int(len(s)/2)+1] if len(s)%2 == 0 else s[int(len(s)/2)]

代码出现语法错误,因为除非转义新行,否则if不能位于第二行,并且只有expr if cond else expr是有效的内联if语句:

foo() if condition \
     else bar()
还有一些你可能会喜欢的东西:

原始帖子的偶数/奇数检查还有另一个问题。要在一行中解决此问题,请执行以下操作:

def get_middle(s):
    return m = s[int(len(s/2))] if len(s)%2 != 0 else s[int(len(s)/2)-1:int(len(s)/2)]
此处使用%2获取余数

虽然有评论说intlens/2将失败,但也不能保证它是部门的一层,就我看来,它与lens//2相当:


代码出现语法错误,因为除非转义新行,否则if不能位于第二行,并且只有expr if cond else expr是有效的内联if语句:

foo() if condition \
     else bar()
还有一些你可能会喜欢的东西:

原始帖子的偶数/奇数检查还有另一个问题。要在一行中解决此问题,请执行以下操作:

def get_middle(s):
    return m = s[int(len(s/2))] if len(s)%2 != 0 else s[int(len(s)/2)-1:int(len(s)/2)]
此处使用%2获取余数

虽然有评论说intlens/2将失败,但也不能保证它是部门的一层,就我看来,它与lens//2相当:


评论和其他答案中的人已经回答了你的问题,但我想用一些生活方式的建议来扩展他们。是的,当前的问题是,如果在最后,正确的语法是foo if condition else bar,则不应该使用else。而且,字体镜头是浮动的,这是一种检查奇怪性的荒谬方式。希望你已经从评论中了解到了这一点

然而,我想说的是,在一行上写东西只是为了炫耀自己有多聪明是一种非常有害的做法。除非你能真正理解一行代码,否则像你那样写是没有意义的,而是宁愿写在多行代码上,让错误变得明显。与其说“哦,看看这有多酷”,不如说更愿意考虑其他人会阅读这段代码

现在,如果你真的坚持写简短的代码,那没关系,下面是你如何将它改写成一行有意义的代码:

from math import ceil

def get_middle(s):
    return s[ceil(len(s)/2 - 1): ceil(len(s)/2)]

我会让你自己弄明白为什么这样做有效。

评论和其他答案中的人已经回答了你的问题,但我想用一些生活方式的建议来扩展他们。是的,当前的问题是,如果在最后,正确的语法是foo if condition else bar,则不应该使用else。而且,字体镜头是浮动的,这是一种检查奇怪性的荒谬方式。希望你已经从评论中了解到了这一点

然而,我想说的是,在一行上写东西只是为了炫耀自己有多聪明是一种非常有害的做法。除非你能真正理解一行代码,否则像你那样写是没有意义的,而是宁愿写在多行代码上,让错误变得明显。与其说“哦,看看这有多酷”,不如说更愿意考虑其他人会阅读这段代码

现在,如果你真的坚持写简短的代码,那没关系,下面是你如何将它改写成一行有意义的代码:

from math import ceil

def get_middle(s):
    return s[ceil(len(s)/2 - 1): ceil(len(s)/2)]

我会让你自己弄明白为什么这样做有效。

你到底在写什么?先把它写成多行,否则就是问题所在。三元if运算符的正确语法是A if条件else B。你有一个额外的if where B应该是lse if是无效的syntax你到底在写什么?先把它写成多行,否则就是问题所在。三元if运算符的正确语法是A if条件else B。你有一个额外的if,其中B应该是lse if是无效的syntax哦,上帝,恐怖实现typelens/2是float,是对偶数/奇数长度的测试…哦,上帝,恐怖实现typelens/2是float,是对偶数/奇数长度的测试。。。
问题:第三行代码应该在第二行继续。@GPhilo这没有意义,如果是第三行,它怎么能在第二行继续?问题的标题是一行函数。你的辩论并不代表否决投票的理由。OP的意思是,返回语句都在一行:如果typelens/2是浮动的,则返回m=s[intlens/2],如果s[intlens/2-1:intlens/2]不,问题不在于此。OP拆分语句以使其适合页面而不滚动,在他的代码中,这一行只是他非常清楚的一行,说明他有一个OneLinerPrintLens/2->这将失败,因为问题是:第三行代码应该继续在第二行。@GPhilo这没有意义,如果是第三条线,怎么能在第二条线上继续?问题的标题是一行函数。你的辩论并不代表否决投票的理由。OP的意思是,返回语句都在一行:如果typelens/2是浮动的,则返回m=s[intlens/2],如果s[intlens/2-1:intlens/2]不,问题不在于此。OP拆分语句以使其适合页面而不滚动,在他的代码中,这行只是他非常清楚的一行,表示他有一个OneLinerPrintLens/2->这将失败。需要从数学中导入该语句。@knh190,足够公平,已修复。该语句需要从数学中导入。@knh190,足够公平,已修复。