You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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')

关键改动说明

  1. 移除了循环内部的else分支,避免每遇到不匹配的元素对就错误输出NONE
  2. 将打印NONE的逻辑移到循环结束后,确保只有当所有元素对都无匹配时才输出
  3. 用列表推导式简化了字符串转整数列表的代码,让代码更简洁易读

这样修改后,不管有没有匹配的元素对,程序都会输出符合要求的结果啦!

内容的提问来源于stack exchange,提问作者Emilia Delizia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 19:47:32