微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python If / else混乱

如何解决Python If / else混乱

所以我的游戏有问题,我在此处复制粘贴了一部分。如您所见,仅当列表位置的前x个元素小于7并且所有其余元素都大于7并且最后一个元素为0时,此代码显示Yes。但是,如您在示例中所看到的, 0不是列表中的最后一个元素,但可以打印。为什么?谢谢!

position=[3,6,4,2,5,10,12,7,8]
where=1
a=1
for i in range(6-where):
    if position[i]<7 and position[i]!=0:
        pass
    else:
        a=0
print(a)
for i in range(6-where,-1):
    if position[i]>6 and position[-1]==0:
        pass
    else:
        a=0
print(a)
print(position[-1])
if a==1:
    print("Yeah")

解决方法

在您的第一个if语句中,您的位置是[i],而不是位置[-1]。

还有一些改进的,更简单的代码:

position=[3,6,4,2,5,10,12,7,8]
x = 5
valid_list = True
for i in range(x):
    if position[i] >= 7 or position[i] == 0:
        valid_list = False

for i in range(len(position) - x - 1):
    if position[x + i] < 7 or position[i] == 0:
        valid_list = False
        
if valid_list and position[-1] == 0:
    print('Yeah')
,

您的代码看起来有些纠结。首先,为a使用布尔值和专有名称。例如listValid = True。但是没有它也是可能的。

position=[3,8]
splitIndex = 6 - 1
if all([value < 7 for value in position[:splitIndex]]):
     if all([value > 6 for value in position[splitIndex:-1]]):
          if position[-1] == 0:
               print("Yeah")
,

您的代码中可能存在两个错误:
首先由https://stackoverflow.com/users/10788239/arkleseisure指出
第一个 if 语句中的行必须为 if position[i]<7 and position[-1]!=0:,但您已经写了
... and position[i]!=0
其次,第二个for循环不会执行,因为它的迭代器是range(6-where,-1),默认情况下range函数会给出一个升序的迭代器,因此在您的情况下,该迭代器为空。对于降序列​​表,请在 range 函数中添加一个 step 参数,并使用range(6-where,-1,-1)
这里最后一个 -1 range 函数

的步长 ,

您可以选择将其放入函数中吗?如果是这样,那么早退是您的朋友:

def is_winner(nums,middle):
    # The last number must be a zero
    if nums[-1] != 0:
        return False

    # All of the starting numbers must be less than 7
    if not all(num < 7 for num in nums[:middle]):
        return False

    # All of the ending numbers must be at least 7
    if not all(num >= 7 for num in nums[middle:-1]):
        return False

    # If all of those are OK,then we've succeeded
    return True


# This will print False because it doesn't end in 0.
position = [3,8]
print(is_winner(position,6))

# This will print True because it meets the requirements.
position = [3,8,0]
print(is_winner(position,6))

# This will print False because a number in the first part is greater than 7
position = [3,7))

# This will print False because a number in the second part is not at least 7
position = [3,5))

看看该函数如何变得非常简单易读?在每个步骤中,如果不满足要求,您都将停止。您不必跟踪状态或任何内容;您只返回False。如果您到达该函数的末尾并且没有通过任何测试,那么ta-da!您成功了,可以返回True。

顺便说一句,根据您的示例,第二个要求应该是x >= 7,而不是x > 7。如果不正确,请更新代码和示例以使其匹配。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。