所以我目前正在尝试定义一个查看两个字符串的函数,并告诉用户一个字符串是否位于另一个字符串中,它看起来像这样:
def isIn(x, y):
for x in y:
if x == y:
print "True"
print "x in y"
else:
print "False"
for y in x:
if x == y:
print "True"
print "y in x"
else:
print "False"
isIn('5', '1')
我认为它与for(x)in(y)函数有关,但我可能错了。代码不断提出:
True
x in y
True
y in x
有关我如何解决这个问题的任何建议吗?
答案 0 :(得分:3)
更简单的事情怎么样?
def isIn(x, y):
return x in y or y in x
如果我们正在处理整个字符串并且我们有兴趣知道一个字符串是否是另一个字符串的一部分,则不需要遍历它们的每个字符 - 这只会告诉您字符串是否在两个字符串中。
现在如果你真的需要知道某些 char 是否在两个字符串中,这样做会很好:
def isIn(x, y):
return any(c in y for c in x)
答案 1 :(得分:3)
我认为你让for ... in
混淆了in
;
def isIn(x,y):
if x in y:
print "True"
print "x in y"
else:
print "False"
if y in x:
print "True"
print "y in x"
else:
print "False"
isIn('5','1')
答案 2 :(得分:2)
for x in y:
x
这里不是传递给函数的x
。同样的:
if x == y:
x
循环中的 for
将遍历y
,并且将为1
。然后将其与y
进行比较,1
也是True
x in y
。所以,你得到了一个预期的输出:
{{1}}
第二个循环
相同答案 3 :(得分:1)
这里有一些循环问题:
for x in y:
# at this point, x is the first element of '1', so both x and y are '1'
# thus, x == y, which explains the behavior that you see
同样适用于第二个循环
答案 4 :(得分:0)
您的问题几乎可以肯定,您的代码并没有按照您的想法行事:
def isIn(x, y):
for x in y:
pass # abbreviated for brevity. Makes no difference here
for y in x:
pass #ditto
您的第一个for x in y
会按顺序分配给x
y
中的每个元素。最后,x
留下y
中的最后一个值。然后,您的下一个循环重用变量名y
,并将其顺序绑定到上一循环中x
的最后一个值中的每个元素。
这不会导致示例中出现错误,因为字符串的每个元素都是长度为1的字符串,因此可以迭代(但只能生成一个值等于其自身的单个对象)。