繁体   English   中英

2个代码有效,第三个无效

[英]2 codes work, the third doesn't

初学者在这里。 :)

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

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

谁能解释为什么?

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

break语句跳出循环。

在这种情况下,如果用户输入字母,则循环将运行print语句,然后立即到达break并终止,而不是一遍又一遍地循环。 (当将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()
#...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM