我刚刚学习使用python编写代码。我正在尝试编写一个程序,其中给定的整数将给出具有根和功率的输出(范围例如设置为5)。这是代码:
user_input = int (raw_input ('Enter your number: '))
root = 1
pwr = 1
def noint ():
return 'no intergers were found'
def output ():
return root, '^', pwr
if user_input < 1:
print noint ()
elif user_input == 1:
print output ()
else:
while root < user_input:
root = root + 1
if root == user_input:
print output()
else:
for power in range(5):
if root ** power == user_input:
pwr = power
print output()
现在,如果我尝试25作为输入,输出是: (5,'^',2) (25,'^',2)
但如果我尝试任何素数如7,则输出为:
(7,'^',1)
编码中有什么问题给了我额外的输出(25,'^',2)?
答案 0 :(得分:2)
你这样做:
while root < user_input:
root = root + 1
if root == user_input:
print output()
也就是说,对于root == 24
,您仍然会进入循环,将其增加到25
,然后根据root == user_input
进行打印。
答案 1 :(得分:1)
如果您只想要具有最小根值的(根,幂)对,那么:
try:
while root < user_input:
root = root + 1
pwr = 1
for power in range(5):
if root ** power == user_input:
pwr = power
raise Found
except Found:
print output()
如果你想要所有(根,电)对,那么:
while root < user_input:
root = root + 1
pwr = 1
for power in range(5):
if root ** power == user_input:
pwr = power
print output()
答案 2 :(得分:1)
问题在于:
if root == user_input:
print output()
当root == 25
时,您打印output()
,但此时pwr
从2
root
起仍为5
,所以它打印25 ^ 2
。打印pwr
后,您必须重置output
,甚至更好,使用参数而不是全局变量。
你可以试试这个(实际上,不需要root == user_input
基础):
def output(root, pwr):
return root, '^', pwr
if user_input < 1:
print noint ()
else:
for root in range(1, user_input + 1):
for power in range(5):
if root ** power == user_input:
print output(root, power)
答案 3 :(得分:0)
问题出在这一行:
if root == user_input:
print output()
当root
达到25时,您正在打印root
和pwr
,但pwr
与之前的匹配相比为2,您有两个选项,将pwr
更新为1或在第一场比赛后打破循环(如@Synergist回答)。