在python中围绕字符串导航

在python中围绕字符串导航,python,Python,请原谅这个极其琐碎的问题,至少它应该很容易回答。我一直在研究coderbyte问题,并用python解决了一些简单的问题,但遇到了困难。问题是,如果字符串(例如d++=f+d++)的所有字母字符都被加号(+)包围,则返回True,否则返回false。我正在讨论有助于在这些字符串中导航的概念,我尝试使用循环和if语句,但它无法完全循环文本,并且总是返回false(从第一个问题开始): 同时编辑添加问题陈述:“使用Python语言,让函数SimpleSymbols(str)获取正在传递的str参数,

请原谅这个极其琐碎的问题,至少它应该很容易回答。我一直在研究coderbyte问题,并用python解决了一些简单的问题,但遇到了困难。问题是,如果字符串(例如d++=f+d++)的所有字母字符都被加号(+)包围,则返回True,否则返回false。我正在讨论有助于在这些字符串中导航的概念,我尝试使用循环和if语句,但它无法完全循环文本,并且总是返回false(从第一个问题开始):

同时编辑添加问题陈述:“使用Python语言,让函数SimpleSymbols(str)获取正在传递的str参数,并通过返回字符串true或false来确定它是否是可接受的序列。str参数将由+和=符号组成,它们之间有几个字母(即++d++=+c++==a)要使字符串为真,每个字母必须由+符号包围。因此,左侧的字符串将为假。字符串不会为空,并且至少有一个字母。”


如蒙协助,将不胜感激。谢谢大家!

下面是我如何做第一部分(如果我不使用regex):


我认为,如果您研究并理解了这段代码,您应该能够不费吹灰之力地获得第二部分。

与其说是答案,不如说是注释,但我想提到正则表达式作为一种解决方案,并不是因为它适合您的场景(这看起来很奇怪,所以我知道几乎肯定不允许您使用regex)但我想告诉您,在Python中,几乎所有问题都是通过
import foo
解决的

import re

def SimpleSymbols(target):
    return not (re.search(r"[^a-zA-Z+=]",target) and re.search(r"(?<!\+)\w|\w(?!\+)",target))
重新导入
def简单符号(目标):

返回not(重新搜索(r“[^a-zA-Z+=]”,目标)和重新搜索(r)(?在你的问题中寻找实际的问题陈述本身是非常困难的。你能把问题解释清楚吗?没有时间写一个正确的答案,但这听起来像是正则表达式的工作。有几件事,使用字符串模块来获取字符串列表。可以用string.ascii_小写替换原始字母因此,问题陈述是:“使用Python语言,让函数SimpleSymbols(str)获取所传递的str参数,并通过返回字符串true或false来确定它是否是可接受的序列。str参数将由+和=符号组成,它们之间有几个字母(即++d++=+c++==a)要使字符串为真,每个字母必须由+符号包围。因此左侧的字符串将为假。字符串不会为空,并且至少有一个字母。“如果需要更多说明,请告诉我。您可以实际使用
str.find
,在此处也可以获得非常好的效果。查找第一个
+
idx1=str.find(+',0)
然后查找下一个:
idx2=str.find(+',idx+1)
依此类推。继续查找直到
idx2-idx1==2
然后查看
idx1+1
字符等。添加一些检查以确保
idx
为-1(未找到)你可以走了。使用起来容易吗:
r“\+[a-z]\+”
?环顾四周的人对我来说似乎杀伤力太大了…@mgilson我该如何使用它来看看是否所有的
[a-z]
周围都有
+
,就像问题的第二部分一样?只有当有
[a-z]时,我的环顾四周的人才会返回匹配项
没有被
+
包围,我在回访中否定了它。毕竟,我们不是在检查是否有
\+[a-z]\+
,我们是在检查是否有
[a-z]
不是
\+[a-z]\+
import string

LOWERCASE = set(string.ascii_lowercase)

def plus_surrounds(s):
    """Return True if `+` surrounds a single ascii lowercase letter."""
    # initialize to 0 -- The first time through the loop is guaranteed not
    # to find anything, but it will initialize `idx1` and `idx2` for us.
    # We could actually make this more efficient by factoring out
    # the first 2 `find` operations (left as an exercise).
    idx2 = idx1 = 0

    # if the indices are negative, we hit the end of the string.
    while idx2 >= 0 and idx1 >= 0:
        # if they're 2 spaces apart, check the character between them
        # otherwise, keep going.   
        if (idx2 - idx1 == 2) and (s[idx1+1] in LOWERCASE):
            return True
        idx1 = s.find('+', idx2)
        idx2 = s.find('+', max(idx1+1, 0))
    return False

assert plus_surrounds('s+s+s')
assert plus_surrounds('+s+')
assert not plus_surrounds('+aa+')
import re

def SimpleSymbols(target):
    return not (re.search(r"[^a-zA-Z+=]",target) and re.search(r"(?<!\+)\w|\w(?!\+)",target))