Python同符号相邻元素查找练习题求助
问题分析与修复方案
我一眼就看出问题出在哪啦!你的代码里else分支的位置不对——你把它放在了循环的每一次判断里,这意味着只要当前相邻的一对元素符号不同,程序就会立刻打印NONE,而不是等所有元素对都检查完再判断有没有匹配项。比如示例输入中,第一对-1和2符号不同,程序会先输出一次NONE,之后找到-3和-4时又输出这对,最终结果完全不符合要求。
修正后的代码方案
我们需要调整逻辑:先遍历所有相邻元素对,找到第一对符号相同的就打印并终止循环;如果遍历完所有对都没找到匹配的,再打印NONE。这里有两种简洁的实现方式:
方式1:用标志变量跟踪匹配状态
s = input() my_list_str = s.split() my_list = [int(beta) for beta in my_list_str] # 用列表推导式简化类型转换 found_match = False for i in range(len(my_list)-1): current = my_list[i] next_num = my_list[i+1] # 判断两个数是否同号(同时正或同时负) if (current > 0 and next_num > 0) or (current < 0 and next_num < 0): print(current, next_num) found_match = True break # 循环结束后再判断是否要输出NONE if not found_match: print('NONE')
方式2:利用Python的for-else特性
Python里for循环的else分支很特殊——它只会在循环**正常结束(没有被break打断)**时执行,刚好适配我们的场景:
s = input() my_list = [int(num) for num in s.split()] for i in range(len(my_list)-1): a, b = my_list[i], my_list[i+1] if (a > 0 and b > 0) or (a < 0 and b < 0): print(a, b) break else: # 只有当所有元素对都检查完且无匹配时,才会走到这里 print('NONE')
关键改动说明
- 移除了循环内部的
else分支,避免每遇到不匹配的元素对就错误输出NONE - 将打印
NONE的逻辑移到循环结束后,确保只有当所有元素对都无匹配时才输出 - 用列表推导式简化了字符串转整数列表的代码,让代码更简洁易读
这样修改后,不管有没有匹配的元素对,程序都会输出符合要求的结果啦!
内容的提问来源于stack exchange,提问作者Emilia Delizia
相关产品推荐
相关产品推荐

