Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
“的变量范围”;对于范围(XX)内的i“;用Python_Python_Variables_Scoping - Fatal编程技术网

“的变量范围”;对于范围(XX)内的i“;用Python

“的变量范围”;对于范围(XX)内的i“;用Python,python,variables,scoping,Python,Variables,Scoping,这是Python的一个练习,我对Python中的变量作用域感到困惑 如果给定字符串包含“xyz”的外观,则返回True,其中 xyz不直接在周期(.)之前。因此“xxyz”计数 但是“x.xyz”没有 xyz_那里('abcxyz')→ 正确 xyz_那里('abc.xyz')→ 假的 xyz_那里('xyz.abc'))→ 真的” 我的答案是: def xyz_there(str): for i in range(len(str)-2): if str[i]=='.':

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

如果给定字符串包含“xyz”的外观,则返回True,其中 xyz不直接在周期(.)之前。因此“xxyz”计数 但是“x.xyz”没有

xyz_那里('abcxyz')→ 正确
xyz_那里('abc.xyz')→ 假的 xyz_那里('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_(abc.xyz)→ False将始终返回
True
。因为变量
i
将始终为0,1,2。。。。而且
i+=1
没有任何意义。
为什么???

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

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

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

正则表达式模式包括:

  • *
    -字符串开头的任意数量的非换行字符
  • [^\?]
    -禁止在后面的所有内容之前使用(n转义)问号
    \?
  • 你好
    -确保
    你好
    会出现
  • *
    -并以任意数量的其他字符结尾
re.match将返回解析为布尔值True的MatchObject,因此它可以用作if语句中的条件

>>> hello_there("foohellobar")
True
>>> hello_there("foo?hellobar")
False
>>> hello_there("foohello?bar")
True

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

正则表达式模式包括:

  • *
    -字符串开头的任意数量的非换行字符
  • [^\?]
    -禁止在后面的所有内容之前使用(n转义)问号
    \?
  • 你好
    -确保
    你好
    会出现
  • *
    -并以任意数量的其他字符结尾
re.match将返回解析为布尔值True的MatchObject,因此它可以用作if语句中的条件

>>> hello_there("foohellobar")
True
>>> hello_there("foo?hellobar")
False
>>> hello_there("foohello?bar")
True
最简单的答案是:

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 
最简单的答案是:

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 

虽然这是有道理的,但对于这个问题来说,这是矫枉过正的。它实际上也没有回答这个问题,即“为什么我不能在我的
for
循环中修改
I
的值?”。哦。。。对不起,我不是想给出一个过分的回答。你已经解释了为什么我没有像他期望的那样工作。只是想证明在那里可能有一种更干净的实现xyz_的方法。没问题。我没有否决投票,只是发表了评论。我还猜测(尽管我不能保证)这个练习是在codingbat.com这样的网站上进行的,在那里你不能为你的解决方案导入模块。一切都好。:)哇,谢谢。我只是一个初学者。谢谢dbustad提供了另一种解决这个问题的方法。但是g.d.d.c的回答真的澄清了我的困惑……虽然这是正确的,但对于这个问题来说,这太过分了。它实际上也没有回答这个问题,即“为什么我不能在我的
for
循环中修改
I
的值?”。哦。。。对不起,我不是想给出一个过分的回答。你已经解释了为什么我没有像他期望的那样工作。只是想证明在那里可能有一种更干净的实现xyz_的方法。没问题。我没有否决投票,只是发表了评论。我还猜测(尽管我不能保证)这个练习是在codingbat.com这样的网站上进行的,在那里你不能为你的解决方案导入模块。一切都好。:)哇,谢谢。我只是一个初学者。谢谢dbustad提供了另一种解决这个问题的方法。但是g.d.d.c的回答确实澄清了我的困惑。。。。