【问题标题】:If condition is not checked multiple times inside a while loop如果在while循环中没有多次检查条件
【发布时间】:2019-05-26 14:39:03
【问题描述】:

我试图找出一个数字从其原始序列移动的次数。我按升序交换数字并计算交换次数;如果计数大于 3,我将退出循环。

但到目前为止,当我检查数字时,第一次迭代只执行 if 条件,之后它不检查条件。我试图理解为什么 if 条件没有执行。

 def minimumBribes(q):
       x=q.copy()
       lis=[]
       i=0
       j=0
       count=0
       flag=0
       while i< len(q):
           k=j+1
           a=q[j]
           b=q[k]
           print(a,b)
           if a>b:
             print(a>b)
             x.pop(x.index(a))
             x.insert(x.index(b),a)

             print(x)
             flag+=1
             if flag>3:
                print('Too chaotic')
                break
             else:
                j+=1
           i+=1
       print(count)


if __name__ == '__main__':
    t = int(input())

    for t_itr in range(t):
        n = int(input())

        q = list(map(int, input().rstrip().split()))

        minimumBribes(q)

【问题讨论】:

  • 如果我的代码没有缩进我很抱歉我是新的堆栈溢出仍然试图弄清楚它是如何工作的
  • 这是一个hackerrank问题iirc:hackerrank.com/challenges/new-year-chaos/problem - 您是否咨询了与您尝试解决的问题相关的hackerrank提示/提示页面?
  • 你能缩进你的代码吗?无法理解 if 中的内容。
  • 圆顶我已经编辑过了

标签: python python-3.x if-statement while-loop


【解决方案1】:

我使用调试器浏览了您的代码,如果列表中的第一项大于第二项,则永远不会输入 if 语句。

假设您的列表如下所示:

q = [1, 2, 4, 3, 8, 7, 6, 0, 10]

那么 while 循环的第一次迭代将如下所示:

k = j + 1 # k = 1
a = q[j] # a = 1
b = q[k] # b = 2
print(a, b) # 1, 2
if a > b: # false
    ...

由于您的 j 仅在 if 语句内增加,因此 a 和 b 的值永远不会改变。
另外:我不明白为什么需要变量 t、n 和 lis。它们是否在您的代码的另一部分中使用?如果是这样,请将它们从您的问题中删除,因为它们令人困惑。

还有另一个编写问题的提示:虽然您的代码可以自行执行(一大优点),但最初输入对我来说并不明显。提供具体的输入(在您的情况下为列表 q)有助于识别问题。

希望我能有所帮助。

【讨论】:

    猜你喜欢
    • 2017-04-03
    • 2019-11-23
    • 2014-01-14
    • 2012-10-20
    • 2012-11-05
    • 2012-09-14
    • 2011-03-31
    • 2011-09-09
    • 2022-01-18
    相关资源
    最近更新 更多