这是Python的练习,我对Python中的变量作用域感到困惑。
“如果给定的字符串包含”xyz“的外观,则返回True xyz不是直接在句点(。)之前。所以“xxyz”很重要 但“x.xyz”没有。
xyz_there('abcxyz')→真实 xyz_there('abc.xyz')→错误 xyz_there('xyz.abc')→真“
这是我的答案:
def xyz_there(str):
for i in range(len(str)-2):
if str[i]=='.':
i+=1
continue
elif str[i:i+3]=='xyz':
return True
return False
这是错的。 xyz_there('abc.xyz') → False
将始终返回True
。因为变量i
将始终为0,1,2 ......并且i+=1
并不意味着什么。
为什么???
答案 0 :(得分:4)
并非您无法更改i
的值。您可以。这里的诀窍是你正在迭代range
的返回值的内容。每次循环重置时,您都会从该迭代中获取下一个值,它不会增加i
的值来进行循环。
答案 1 :(得分:1)
您是否需要使用for循环?这将是正则表达的好地方。我修改了下面的例子,所以我不只是给你答案......而不是寻找“xyz”,我正在寻找“你好”。我也试图避免看到“?”在那之前“你好”。
import re
def hello_there(str):
if re.match("(.*[^\?])?hello.*", str):
return True
return False
正则表达式模式包括:
.*
- 字符串开头的任意数量的非换行符; [^\?]
- 在随后的所有内容之前禁止^
a(n转义)问号\?
; hello
- 确保hello
能够出现; .*
- 并以任意数量的其他字符结尾。re.match将返回一个解析为布尔值True的MatchObject,因此它可以用作if语句中的条件。
>>> hello_there("foohellobar")
True
>>> hello_there("foo?hellobar")
False
>>> hello_there("foohello?bar")
True
答案 2 :(得分:0)
最简单的答案是:
unauthorized