如何解决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 举报,一经查实,本站将立刻删除。