【问题标题】:Python : How to set a condition to 'ignore' some code if this condition is met?Python:如果满足此条件,如何设置条件以“忽略”某些代码?
【发布时间】:2014-06-22 17:10:02
【问题描述】:

我正在使用 Python(我认为是 2.7 版)

我在这里有一段代码,它是一个函数的一部分,该函数将 x_1、x_2 和 x_f(与 y 相同)作为图像中相应像素的输入和颜色(x_f 和 y_f 表示图像中的最终像素,因此它只在图像边界内绘制。

while x_1+k*x_2<=x_f and y_1+k*y_2<=y_f:
    pixels[x_1+k*x_2,y_2+k*y_2]=colour
    k+=1

我的问题是,我需要这个代码来输入x_f (or y_f) = Empty

如果是x_f=Empty,上面的代码应该忽略第一行中的整个 x 部分,并仅根据 y 值生成输出,如下所示:

while y_1+k*y_2<=y_f:
    pixels[x_1+k*x_2,y_2+k*y_2]=colour
    k+=1

反之亦然。不幸的是,我无法弄清楚如何让它做到这一点。

我的尝试包括:

if x_f is not Empty and y_f is not Empty: 
    while x_1+k*x_2<=x_f and y_1+k*y_2<=y_f:
        pixels[x_1+k*x_2,y_2+k*y_2]=colour
        k+=1
else:
    if x_f==Empty:
        while y_1+k*y_2<=y_f:
           pixels[x_1+k*x_2,y_2+k*y_2]=colour
           k+=1
    else:
        while x_1+k*x_2<=x_f:
           pixels[x_1+k*x_2,y_2+k*y_2]=colour
           k+=1  

问题不在于它引发错误,而是我必须运行我的代码的程序不允许我运行它 - 它崩溃并给我一个 CPU 错误。有人有什么想法吗?

谢谢。

编辑~ 我正在使用函数 colour_pixels(x_1,x_2...y_f) 来获取我的输入。

我的错误是:“IVLE 控制台重新启动:通信丢失”

当输入值 y_f 输入为“空”时

我必须能够处理 x_f 或 y_f 可能为“空”的情况 - 抱歉,我没有很好地解释这一点

谢谢 - 我现在要把 '!=' 改成 'is not'!

【问题讨论】:

  • 你是如何输入的,是 raw_input() 吗?
  • 你的cpu错误是什么? x_f 为空是什么意思?您是否将x_fy_f 初始化为None
  • 您的if x_f!=None: 块。这意味着x_f 不是None。因此你应该做涉及x_f的操作,而不是y_f
  • 提示:使用if x is not None 而不是x != None
  • 谢谢大家 - 我在问题的底部添加了一个编辑以回应您的 cmets(直到现在我才意识到我可以回复)

标签: python function loops input conditional-statements


【解决方案1】:

当我阅读本文时,您分配颜色的部分始终相同,您只需要处理 x_f 或 y_f(但不是两者)为空,如果您不介意,可以在一个条件表达式中执行此操作有点啰嗦:

# For safety I would add an assert that at least one is not Empty
assert x_f is not Empty or y_f is not Empty
while (x_f is Empty or (x_1+k*x_2<=x_f)) and (y_f is Empty or (y_1+k*y_2<=y_f)):
    pixels[x_1+k*x_2,y_2+k*y_2]=colour
    k+=1

【讨论】:

  • 谢谢!这是简化我想要的东西的惊人方式 - 我不知道你可以添加这样的括号部分! IVLE 仍然拒绝运行它 - 你知道为什么吗?
  • 不知道,抱歉。这里有一些关于这种错误消息的信息,但它看起来并不乐观:ivle.googlecode.com/svn/doc/sphinx/man/… 我会尝试通过删除部分来准确隔离代码的哪一部分导致该错误,例如它可能是 colour_pixels()您提到的功能是问题所在。
  • 非常感谢 - 在与几个人交谈并明确运行我的代码并更改一些东西(例如,函数正在使用的输入值,作为一个特定的输入创建了一个无限循环,导致了主要问题)。我完全错过了它,但非常感谢您的帮助!!!!
【解决方案2】:

首先,您应该将x_fy_f 初始化为None

有四种情况:(x_f 是否为None)x(y_f 是否为None),并且您的代码缺少x_fy_f 均为@ 的情况987654330@。此外,您的if x_f!=None: 语句意味着x_f 不是None。因此你应该有涉及x_f的操作,而不是这个块中的y_f

我认为如果您创建如下 if-else 语句,您的代码将更具可读性:

if x_f==None:
    if y_f==None:
        ....
    else:
        ....
else:
    if y_f==None:
        ....
    else:
        ....

【讨论】:

  • 对不起!我应该添加 - 不可能出现 x_f 和 y_f 都为 None 的情况
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 2016-04-22
  • 2017-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多