1

タイトルが悪くてすみません。これが私のコードです:

import math
# Finds the square root of a number
def square_root():
    square_root = math.sqrt(int(raw_input('What number do you want the Square Root for')))
    print "The square root of is: %d " % (square_root)

基本的に、ユーザーが 0、1、4、6、9、または 25 で終わらない数字を入力できないようにしたいので、完全な正方形しか出力できません。何をすべきかはある程度わかっていますが、まともなGoogle検索を行うための用語を思い出せないので、ここに来ました。

私はそれが何らかの形でifこのようなものを含むことを知ってい[1:3]ます.

4

3 に答える 3

4

入力が完全な正方形であることを確認したい場合は、次のようにしてみてください。

def square_root():
    sqrt = int(raw_input("What number do you want the square root for? ")) ** 0.5
    if sqrt == int(sqrt):  # i.e. 'sqrt' is an integer
        print "Result is", int(sqrt)
    else:
        print "That is not a perfect square!"

入力があなたが言及した数字で終わっているかどうかを確認するだけでは十分ではありません(言及されたコメントの1つとして)。もちろん、それでも確認したい場合は、str(input).endswith(SOME_VAL).

于 2012-09-10T19:52:03.897 に答える
2

まず、入力を文字列に読み取ります。次に、メソッドを使用して文字列の特定の末尾をテストしますs.endswith('test')。成功した場合は、 が発生することを期待しながら入力を整数に変換します(これを/ステートメントValueErrorでキャッチします)。すべてがうまくいった場合は、平方根を計算して出力します。tryexcept ValueError:

特定のエンディングでのテストは、数学的に意味がありません。しかし、それは別のトピックです。あなたの要求をプログラミングの演習として使用しましょう :) このコード (テストされていません) は、うまくいけばあなたが望むことをします:

import sys
import math

tests = ['0', '1', '4', '6', '9', '25']
input = raw_input('What number do you want the square root for? ')
result = (input.endswith(t) for t in tests)
if any(result):
    try:
        print math.sqrt(int(input))
    except ValueError:
        print "Not a number."

(input.endswith(t) for t in tests)ジェネレータ式です。リストを返すのではなく、イテレータとも呼ばれる反復可能なオブジェクトを返します。これがなんresultです。の要素はresult、要求されたときにのみ計算されます。any(result)はこのシーケンスをたどり、 と評価される最初の結果が見つかるまで、次々とテスト結果を要求しTrueます。その後、自分自身を返しTrueます。resultシーケンス内のすべての値が である場合False、 も をany()返しますFalse

于 2012-09-10T19:47:17.880 に答える
1
>>> a=map(int,str(123456))

>>> a
[1, 2, 3, 4, 5, 6]

>>> a[-1]
6

>>> a[-1] in [0, 1, 4, 6, 9, 25]
True
于 2012-09-10T20:07:37.127 に答える