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 の原則の 1 つは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 を次のように変更すると、基数 16 を簡単に追加できます。

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