2个代码工作,第三个没有

时间:2014-03-26 01:05:10

标签: python

初学者。 :)

所以我想实现的是:

用户输入一个号码。它吐出了数字的^ 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)

我的问题是这个。如果我删除number=raw_input("Please Enter an integer")声明下的while并将其替换为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 个答案:

答案 0 :(得分:4)

break退出while循环,此时number仍然是输入的任何字母,因此您尝试将其设为int时出错。

答案 1 :(得分:2)

break语句跳出循环。

在这种情况下,如果用户输入一个字母,循环会运行print语句,然后立即到达break并终止而不是反复循环。 (break当你把它放在一个程序并不总是到达的if语句中时更有用。)

但是使用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()
#...