2014-03-26 38 views
0

初学者在这里。 :)2代码工作,第三个不

所以我想实现的是这样的:

用户输入一个数字。它吐出了数字的^ 3。如果用户输入一个字母,它会打印出错误信息。

代码#1的伟大工程:

def thirdpower(): 
try: 
    number = int(raw_input("Enter a number : ")) 
    n=number**3 
    print "%d to the 3rd power is %d" % (number,n) 
except ValueError: 
    print "You must enter an integer, please try again." 
    thirdpower() 

thirdpower() 

但我想尝试用while语句做同样的事情,因为我想用它来练习。我知道这样更详细些,但我认为这是一个很好的做法。

number=raw_input("Please Enter an integer") 
while number.isalpha(): 
    print "You have entered letter. Please try again" 
    number=raw_input("Please Enter an integer") 

n=int(number)**3 
print "%d to the 3rd power is %d" %(int(number), n) 

我的问题是这样的。如果我删除while声明中的number=raw_input("Please Enter an integer")并将其替换为break,则代码不起作用。

这里是我的意思是:

number=raw_input("Please Enter an integer") 
while number.isalpha(): 
    print "You have entered letter. Please try again" 
    break #This break here ruins everything :(

n=int(number)**3 
print "%d to the 3rd power is %d" %(int(number), n) 

任何人都可以解释,为什么?

回答

2

A break语句跳出一个循环。

在这种情况下,如果用户键入一个字母,循环运行print语句,然后立即到达break并终止而不是一遍又一遍循环。 (当你把它的if语句,该方案并不总是达不到里面break是比较有用的。)

但使用break不会停止投放计划的其余部分,所以Python仍然试图运行线6由于number变量包含一个字母,程序在尝试将其转换为数字时会崩溃。

如果用户输入一个字母,你可能试图结束程序。在这种情况下,你可以使用内置的sys模块做这样的事情:

import sys 

number=raw_input("Please Enter an integer") 
if number.isalpha(): 
    print "You have entered letter. Please try again" 
    sys.exit() 
#... 
+0

如果是这样的话,应该不是至少打印出'您输入字母。请再试一次'然后终止? – dyao

+0

@ user3386440你说得对,'print'语句在循环中断之前运行一次。我编辑了答案来澄清这一点。 –

4

break退出了while循环的,在这一点number仍然是什么信进入让你得到试图使它的int错误。