两个类似的python代码,一个不起作用

时间:2015-09-03 15:54:48

标签: python loops

我是python的新手并尝试进行手指练习,包括找到整数的根。我的第一次(经过多次试验和错误)尝试如下:

x = int(raw_input("Please pick a positive integer: "))
root = 2
pwr = 2
while pwr < 6:   #this is meant to change pwr from 2 to 3 to 4 to 5
    if root ** pwr < x and root ** pwr != x:
        pwr = pwr + 1
    elif root ** pwr == ax:
        break
    elif root ** pwr > x:  #increments root to cycle thru again
        root = root + 1
        pwr = 2
if root ** pwr == x:
     print root, '**', pwr, '=', x   
else:
    print x, "has no integer roots."

这适用于8&amp; 9,但挂了10。

我的第二次尝试适用于所有三个数字:

x = int(raw_input("Please pick an integer: "))
root = 2
for pwr in range(2,6):
    while root ** pwr < abs(x):
        root = root + 1
        if root ** pwr == abs(x):
            break
    if root ** pwr == abs(x):
        break
        root = root + 1
    root = 2
if root ** pwr == abs(x):
    print root, '**', pwr, '=', x    
else:
    print x, "has no integer roots."

为什么第一个挂断?我觉得我对while循环的工作方式有一个基本的误解。请帮忙。

2 个答案:

答案 0 :(得分:0)

你被困在

    elif root ** pwr > x:  #increments root to cycle thru again
        root = root + 1
        pwr = 2

如果root ** 2 > x在每次迭代中设置pwr = 2

如果root变大,你需要以某种方式打破循环。

答案 1 :(得分:0)

我认为在while循环中挂起是因为有几件事情。

首先,正如上面提到的@Baart,ax未被定义 - 你的意思是x吗?

其次,将10作为x,循环执行如下:

  1. root = 2,pwr = 2:2 ** 2 == 4,4&lt; 10,所以增加pwr
  2. root = 2,pwr = 3:2 ** 3 == 8,8&lt; 10,所以增加pwr(这是它打破x == 8的地方)
  3. root = 2,pwr = 4:2 ** 4 == 16,16&gt; 10,所以增加root和pwr = 2
  4. root = 3,pwr = 2:3 ** 2 == 9,9&lt; 10,所以增加pwr(这是它打破x == 9的地方)
  5. root = 3,pwr = 3:3 ** 3 == 27,27&gt; 10因此增加root和pwr = 2
  6. root = 4,pwr = 2:4 ** 2 == 16,16&gt; 10因此增加root和pwr = 2
  7. 从那里开始,它会将root增加到无穷大而不增加pwr,而root ** pwr将保持&gt; 10,因而永远不会满足你的休息条件。