我正在从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.")
答案 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())