Python代码运行触发NameError错误,请求协助排查问题
问题排查与修复
直接触发NameError的原因
你的status变量存在未定义就被引用的情况:
- 当输入字符串包含'h',但不满足后续'e'、'll'、'o'的检查条件时,内层的
status = True不会执行,同时外层if 'h' in string的else分支也不会触发,导致status从头到尾没被赋值,执行到if status时就会抛出NameError。 - 另外,代码里的
for循环完全多余——循环内每次都是对整个字符串做重复检查,遍历每个字符没有任何实际作用,反而徒增逻辑混乱。
核心逻辑错误
你本来是想判断字符串是否包含顺序正确的"hello"序列,但当前写法完全偏离目标:
'e' in string+'h'这种操作毫无意义,和直接检查'e' in string没区别,给字符串末尾加'h'不会改变原字符串里'e'的存在性。- 现有逻辑只是单独验证每个字符/子串是否存在,没有保证它们的出现顺序,比如输入"hlelo"会被误判为符合条件,但实际上"hello"的顺序不对。
修复方案
需求1:检查是否包含连续的"hello"
直接用Python的子串检查即可,简单高效:
string = input() print('YES' if 'hello' in string else 'NO')
需求2:检查是否按顺序出现h→e→ll→o(无需连续)
比如输入"hxxezzlloo"也符合要求,可以用这种写法:
string = input() target = 'hello' pos = 0 for c in string: if pos < len(target) and c == target[pos]: pos += 1 print('YES' if pos == len(target) else 'NO')
内容的提问来源于stack exchange,提问作者Nima Abdollahzadeh
相关产品推荐
相关产品推荐

