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 结尾的数字,所以我只能输出完美的正方形。我有点知道该怎么做,但我一生都记不起这些术语来获得一个像样的谷歌搜索,所以我来到了这里。

我知道这将涉及某种形式的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!"

仅检查输入是否以您提到的数字结尾是不够的(正如提到的评论之一)。当然,如果您仍然想检查是否可以使用str(input).endswith(SOME_VAL).

于 2012-09-10T19:52:03.897 回答
2

首先,将您的输入读入一个字符串。然后,使用该方法测试您的字符串的某些结尾s.endswith('test')。如果成功,则将输入转换为整数,同时期望 a发生(用/语句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 回答