“的变量范围”;对于范围(XX)内的i“;用Python
这是Python的一个练习,我对Python中的变量作用域感到困惑 如果给定字符串包含“xyz”的外观,则返回True,其中 xyz不直接在周期(.)之前。因此“xxyz”计数 但是“x.xyz”没有 xyz_那里('abcxyz')→ 正确“的变量范围”;对于范围(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]=='.':
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转义)问号[^\?]
李>\?
-确保你好
会出现李>你好
-并以任意数量的其他字符结尾*
>>> hello_there("foohellobar")
True
>>> hello_there("foo?hellobar")
False
>>> hello_there("foohello?bar")
True
是否需要使用for循环?这将是一个正则表达式的好地方。我已经修改了下面的例子,所以我不只是给你答案。。。我找的不是“xyz”,而是“你好”。我也尽量避免在“你好”之前看到“?” 正则表达式模式包括:
-字符串开头的任意数量的非换行字符李>*
-禁止在后面的所有内容之前使用(n转义)问号[^\?]
李>\?
-确保你好
会出现李>你好
-并以任意数量的其他字符结尾*
>>> 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的回答确实澄清了我的困惑。。。。