南巷君君 发表于 2022-5-22 11:07:24

python作业最后一题求助

    def move(self):
      
      new_x = self.x + m.choice()
      new_y = self.y + m.choice()
      
      if new_x < legal_x:
            self.x = legal_x - (new_x - legal_x)
            
      elif new_x > legal_x:
            self.x = legal_x - (new_x - legal_x)

      else:
            self.x = new_x

这是正确的边界判定,当我把elif改成if的时候就超出边界了,我认为在这用elif 和if因该都行,问题出在哪了呢


      new_x = self.x + m.choice()
      new_y = self.y + m.choice()
      
      if new_x < legal_x:
            self.x = legal_x - (new_x - legal_x)
            
      if new_x > legal_x:
            self.x = legal_x - (new_x - legal_x)

      else:
            self.x = new_x

Twilight6 发表于 2022-5-22 11:18:47


if-elif-else 结构的语句,只要有一个符合条件执行 if 或 elif 下的代码块就不会再判断后续的 elif ,也不会执行 else 了

但是你将 if-elif 改成 if ,那么后者的 if和 前者的 if 没有直接关系了,不管前者条件是否成立,后者都需要重新判断

而这里主要原因是因为:

第一个代码 if-elif-else 是一个完整的结构,所以前面只要 if 或 elif 执行 就不会执行 else

但是你后者的代码实际上结构是 if ,if-else , 第一个 if 单独一个 if 结构

后面的 if-else 一个结构,导致前者 if 判断完后,进行判断第二个 if 时,必定会执行后续的 if 或 else 其中一个代码块


南巷君君 发表于 2022-5-22 11:42:46

Twilight6 发表于 2022-5-22 11:18
if-elif-else 结构的语句,只要有一个符合条件执行 if 或 elif 下的代码块就不会再判断后续的 elif ,也 ...

谢谢!这下明白了
页: [1]
查看完整版本: python作业最后一题求助