2013-10-27 147 views
1

这是从使用Python进行计算和编程的简介中的手指练习3.1开始的。Python 2中的嵌套while循环

编写一个程序,要求用户输入的整数,并打印两个整数,rootpwr,使得0 < pwr < 6root**pwr等于由所输入的输入的整数。如果不存在这样的整数对,它应该打印一条消息来达到这个效果。

我该死的关闭,部分原因是Stack Overflow中的一些建议。但是没有人能够一路走到那里,部分原因是练习的重点是使用嵌套的While循环,而不是For循环或其他任何比这更复杂的东西。这是一个详尽的枚举。

我真的很亲密。这是我到目前为止有:

num = int(raw_input('Enter a positive integer: ')) 
power = 0 
root = 0 
while power < 6: 
    if root ** power == num: 
     break 
    power += 1 
    root= 0 
    while root ** power < num:  
     root += 1 

if root**power == num: 
    print('Root = ' + str(root) + ' and power = ' + str(power)) 
else: 
    print('No pair of integers exist such that one has an exponent that is between 1 and 6') 

这里有只是两个问题:我要运行检查,看是否根和电源等于用户输入的那种感觉不必要的。想知道如何使这种清洁剂。

此外,当用户输入1进行输入时,程序输出Root 0 and Power 0,这是练习参数的外部。

+0

回答

1

想知道如何使清洁。

简单。您可以折叠它到一个直线,转弯

while power < 6: 
    if root ** power == num: 
     break 

while (power < 6) and (root ** power != num): 

(括号中是不必要的,但我觉得它有助于可读性。)

+0

你为什么用'(root ** power!= num)'来改变逻辑' – Leonardo

+1

没有任何逻辑上的改变;这两个是等价的。“当在循环开始时'(root ** power == num)'时中断”与仅在'(root ** power!= num)'“时继续。 –

+0

你是对的,它不会改变逻辑。 – Leonardo

0

目前已设置:

power = 0 
root = 0 

如果然后用户输入1 0**0 = 1所以你跳出while循环和第一打印条件通过。有几种方法可以解决这个问题,一种方法是在打印之前检查num的值是否为1时添加一个额外的条件。

if (root**power == num) and (not num == 1): 
    print('Root = ' + str(root) + ' and power = ' + str(power)) 

的另一种方法来解决,这将是更新功率的初始值设定为1。在问题说明书0<power<6所以对于功率的下限为1和上是5

power = 1 
root = 0 

为了使代码更清晰,您可以将while语句合并到while循环中作为while循环的检查条件。你可以这样做的主要原因是因为你从这个if语句无论如何你break

while (power < 6)and not (root**power == num): 
    power+=1 
    while root ** power < num: 
     root+=1 
+0

确实在1开始电源是最好的解决方案。 – Leonardo

0

您需要反转的循环。你需要增加外部循环的根,然后迭代内部循环的权力。否则,你将永远匹配“power == 1”,因为root会增加到目标数字,就是这样。

你拥有它的方式,如果你有num = 42,power会被设置为1,那么root会被重复迭代到42.如果你在内部循环中增加了功率,那么你将拥有:

root == 1, power == 1, root**power == 1 
root == 1, power == 2, root**power == 1 
root == 1, power == 3, root**power == 1 
root == 1, power == 4, root**power == 1 
root == 1, power == 5, root**power == 1 
root == 2, power == 1, root**power == 2 
root == 2, power == 2, root**power == 4 
root == 2, power == 3, root**power == 16 
root == 2, power == 4, root**power == 64 
root == 3, power == 1, root**power == 3 
root == 3, power == 2, root**power == 9 
... and so forth ... 

这不是你要找的行为吗?

0
x = int(raw_input('Enter an integer:')) 
num = 2 
for pwr in range(2,7): 
    while num ** pwr < x: 
     num += 1 
     if num ** pwr == x: 
      False 

    if num ** pwr == x: 
     break 
    num = 2 
if num ** pwr != x: 
    print 'no root' 
else: 
    print num,pwr 
1

这是我的解决方案,如果有人仍然感兴趣。 (随着每次迭代加入打印)

x = int(raw_input('Enter an integer: ')) 


pwr = 1 
root = 0 
while root**pwr < abs(x)+1: 
    #print "Root ->" , root 
    #print "x - >", x 
    #print "Current root**pwr", root**pwr 
    while pwr < 6: 
     if root**pwr == abs(x): 
       print "Root and Power: " , root, pwr 
     #print " pwr, root**pwr->", pwr, root**pwr 
     pwr = pwr + 1 


    pwr = 1 
    root = root+1