0

我做了一个简单的脚本来找到一个数字的平方根。用户输入一个数字,它会找到平方根并显示结果。我希望它检查输入是否为数字。如果它是一个数字,它将继续,否则它将显示一条消息并重置。

我尝试使用:

while num != int(x):
    print "That is not a valid number"
    return self.page()

但这只会显示一个错误。有人可以帮我解决这个问题吗?

这是代码:

import math
import sys

class SqRoot(object):
    def __init__(self):
        super(SqRoot, self).__init__()

        self.page()

    def page(self):
        z = 'Enter a number to find its square root: '
        num = int(raw_input(z))
        sqroot = math.sqrt(num)
        print 'The square root of \'%s\' is \'%s\'' % (num, sqroot)
        choose = raw_input('To use again press Y, to quit Press N: ')
        if choose == 'Y' or choose == 'y':
            return self.page()
        elif choose == 'N' or choose == 'n':
            sys.exit(0)

print "SqRoot Finder v1.0"
print "Copyright(c) 2013 - Ahnaf Tahmid"
print "For non-commercial uses only."
print "--------------------------------"

def main():
    app = SqRoot()
    app()

if __name__ == '__main__':
    main()
4

2 回答 2

8

python 原则之一是EAFP

请求宽恕比请求许可更容易。这种常见的 Python 编码风格假设存在有效的键或属性,如果假设被证明是错误的,则捕获异常。

x = raw_input('Number?')
try:
    x = float(x)
except ValueError:
    print "This doesn't look like a number!"
于 2013-01-10T20:51:00.720 回答
0

如果您不想使用请求宽恕方法,这里有一个简单的函数,它应该适用于任何有效的浮点数。

def isnumber(s):
    numberchars = ['0','1','2','3','4','5','6','7','8','9']
    dotcount=0
    for i in range(len(s)):
        if (i==0 and s[i]=='-'):
            pass
        elif s[i]=='.' and dotcount==0:
            dotcount+=1
        elif s[i] not in numberchars:
            return False
    return True

注意:您可以通过将 numberchars 更改为:

numberchars = ['0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']
于 2013-01-10T22:30:30.387 回答