首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中"for I in range(XX)“的变量范围界定

Python中"for I in range(XX)“的变量范围界定
EN

Stack Overflow用户
提问于 2012-08-10 02:58:33
回答 3查看 422关注 0票数 0

这是Python的一个练习,我对Python中的变量作用域感到困惑。

“如果给定的字符串包含" xyz”的外观,而xyz没有被句点(.)直接执行,则返回True。因此"xxyz“计数,但"x.xyz”不计算。 xyz_there('abcxyz')→真 xyz_there('abc.xyz')→False xyz_there('xyz.abc')→True

这是我的回答:

代码语言:javascript
复制
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并不意味着什么。为什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-10 03:04:56

这并不是说您不能更改i的值。你可以的。这里的诀窍是,您正在迭代range返回值的内容。每次循环重置您从可迭代中获得的下一个值时,它都不会增加i的值来推进循环。

票数 4
EN

Stack Overflow用户

发布于 2012-08-10 04:10:47

是否需要使用for循环?对于正则表达式来说,这是一个很好的地方。我已经修改了下面的例子,我不只是给你答案.我不是在找"xyz",而是在找"hello“。我也尽量避免看到"?“在“你好”之前。

代码语言:javascript
复制
import re
def hello_there(str):
    if re.match("(.*[^\?])?hello.*", str):
        return True
    return False

regex模式包括:

  • .* -字符串开头的任意数量的非换行符;
  • [^\?] -拒绝^ a(n转义)问号\?
  • hello --确保hello会出现;
  • .* -并以任意数量的其他字符结尾。

re.match将返回一个解析为True布尔值的MatchObject,因此它可以用作if语句中的条件。

代码语言:javascript
复制
>>> hello_there("foohellobar")
True
>>> hello_there("foo?hellobar")
False
>>> hello_there("foohello?bar")
True
票数 1
EN

Stack Overflow用户

发布于 2021-01-14 04:05:44

最简单的答案是:

代码语言:javascript
复制
def xyz_there(str):
    for i in range(len(str)-2):
        if str[i:i+3] == "xyz" and str[i-1] != ".":
            return True
    return False 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11894874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档