我需要创建一个程序,在给定指数小于7且大于1的情况下,找到单个数字的基数和指数。我使用的是python2.7。在
我的代码如下:
def determineRootAndPower(inputInteger):
pwr = 1
num = inputInteger
while (num) > 0 and (0 < pwr < 7):
inputInteger = inputInteger - 1
pwr = pwr + 1
num = num - 1
if int(num)**int(pwr) == inputInteger:
print(str(num) + (" to the power of ") + str(pwr) + (" equals ") + str(inputInteger) + ("!"))
else:
print("No base and root combination fit the parameters of this test")
有人能就这个问题给我一些一般性的建议吗?现在我总是收到不正确的“else”语句。在
首先,您总是点击
else
的原因是在循环结束后执行if
检查。所以,不是检查每个值,而是检查最后一个值。在如果任何值匹配,则需要打印“Yes”答案,只有all值失败时才会打印“No”。为此,您需要将
if
放入循环中,一旦找到第一个成功的break
(除非您想打印所有的匹配项,而不是只打印第一个匹配项),然后,else
就变成了只有在找不到任何匹配项时才会执行的操作。在您可以将},并且只要完成循环就总是打印失败消息。在
else:
与while:
一起使用,只有当您没有break
时,它才会运行。但是许多人发现这很令人困惑,所以在成功时只使用return
而不是{同时,我认为您希望做的是处理从}的所有{}值,并且,对于每个值,处理从1到7的所有{}值。为此,需要一个嵌套循环。在
inputNumber
到{在这里,使用}循环简单得多。在
for
循环要比每次初始化一个变量并使用+1
或{把所有这些放在一起:
你可以进一步简化。在
您真正想要的是范围内任何} 正是这样做的。所以:
^{pr2}$num
和范围内任何pwr
的所有组合。你不在乎嵌套是如何工作的,你只需要所有的组合。在数学术语中,要循环两个范围的笛卡尔积。函数^{顺便说一句,有两件事让这段代码很难阅读,这是毫无道理的。在
首先,如果您想打印出一个表达式,那么使用
format
(或%
)比手动将内容转换为字符串并将它们连接在一起要容易得多。格式化可以让你看到输出的样子,而不必去弄清楚,它会自动处理字符串化和相关的事情。在其次,在不需要的地方加上括号会使代码更难阅读。你的
print
表达式的括号使你的代码看起来像Python3,但实际上它是Python2。而且表达式中每个字符串周围的圆括号乍一看就更糟了,看起来它们应该在引号内。即使是测试表达式中的括号,(num) > 0 and (0 < pwr < 7)
,也会迫使读取器正常暂停,这样的圆括号被用来覆盖运算符组合在一起的正常方式,因此您必须考虑正常的num > 0 and 0 < pwr < 7
会有什么问题,以及圆括号如何使其不同,最终发现其实是一样的。在不管怎样,比较一下这两个,看看哪一个更容易理解:
相关问题 更多 >
编程相关推荐