2012-09-10 110 views
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]

+0

的代码来了“出怪招”,因为你使用制表符而不是空格... – Ben

+0

'[1:3]'是一个切片操作,也许这会帮助你的谷歌搜索。 –

+1

525是不是一个完美的广场...你保留这个吗? 769?等等,有无限多的... – Ben

回答

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)

+0

为什么'input()'而不是'raw_input()'? –

+0

在这里我可以使用 – arshajii

+1

这里你不需要评估任何表达式,所以'input()'最好是过大的(最坏的情况是安全风险)。 –

2

首先,将您的输入读入字符串。然后,用s.endswith('test')方法测试您的字符串的某些结尾。如果成功,则将输入转换为整数,但期望发生ValueError(使用try/except 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

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