你如何编写一个程序,要求输入一个整数并打印两个整数,root和pwr,使0 <pwr <6和=“”root =“”** =“”pwr =“input”in =“”python ?

时间:2018-02-21 17:11:26

标签: python function loops root

=“”

我正在从Guttag的书中学习python。这个问题来自这本书。我坚持了下来。我写了一个代码,但它没有给出正确的输出。 我编辑了我的问题。请Upvote它以及给我答案。 在此先感谢。

def fun():
    n = int(input("Enter a number: "))

    for pwr in range(5, 0, -1):
        root = 19
        while root**pwr <= n:
             if root**pwr == n:
                return (root, pwr)
             else:
                root += 1

    raise Exception("Cannot be solved.")

3 个答案:

答案 0 :(得分:1)

你的解释非常糟糕,但我希望我明白你的需要。看看:

def f(n, e=1.0e-7):
    for pwr in [2, 3, 4, 5]:
        root = n**(1/pwr)
        if abs(int(root) - root) < e:
            return (pwr, int(root))
    return False

while True:
    try:
        user_input = int(input("Enter a number: "))
    except ValueError:
        print('Value entered is not an Integer!')
        pass
    else:
        break

answer = f(user_input)
if answer:
    k, v = answer
    print(f'{answer} because {v}^{k} = {user_input}')
else:
    print('No solutions!')

示例:

Enter a number:  32
(5, 2.0) because 2.0^5 = 32

Enter a number:  22
No solutions!

注意

如果规则确实是0 < pwr < 6&amp; root**pwr = input然后所有输入的解决方案都是微不足道的root = input&amp; pwr = 1)。

所以,我稍微修改了一下(1 < pwr < 6)。

答案 1 :(得分:1)

我也在从零开始研究古塔格的书。我在同一问题上花了一些时间,最后采用以下解决方案,该解决方案似乎允许使用负数,零(我可以从原始问题中想到的唯一例外)和多个有效对。

x = int(input('Number? '))
root = 0

for pwr in range(1,6):
    if x > 0:
        while root <= x:
            root += 1

            if root**pwr == x:            
                print('root = ', root, ' and pwr = ', pwr)
        root = 0
    elif x < 0:
        while root >= x:
            root -= 1

            if root**pwr == x:            
                print('root = ', root, ' and pwr = ', pwr)
        root = 0
    elif x == 0:
        print('There is no such pair')
break

答案 2 :(得分:0)

您需要将第三个step参数包含在range中作为-1才能让它在您的范围内递减。您需要将root设置为初始默认猜测。

def f():
    n = int(input("Enter a number: "))

    for pwr in range(5, 0, -1):
        root = 1
        while root**pwr <= n:
            if root**pwr == n:
                return (root, pwr)
            else:
                root += 1

    raise Exception("Cannot be solved.")


print(f())