的Python我想这样做,而循环
我写了这个代码同一程序的不同的方式,但我想它的工作与出使用try和ValueError异常的Python我想这样做,而循环
total = 0.0
while True:
try:
total =+ float(raw_input("enter a number or quit to finish"))
except ValueError:
break
print total
感谢所有相同的方式。
如果只想处理"quit"
或浮动,这很简单:
total = 0.0
while True:
value = raw_input("enter a number or quit to finish"))
if value == "quit":
break
total += float(value)
print total
但是,如果用户类型,比如说,qiut
或2..137
,程序将挽救一个ValueError
。如果没有try
,你如何防范?
或者,如果你想防止用户进入,比如,inf
或-inf
或nan
,或东西,将(至少在某些平台上)溢出那些之一(例如,尝试1e309
在大多数系统上) ?
那么,你需要一些方法来验证float
电话会提前工作。
首先,你必须解析Python 2.7's floating point literal syntax。至少你没有处理Python 3.x,其中,例如,float('١٠٣')
是完全有效的,并且意味着103.0
。该语言很容易翻译成普通语言,这意味着re
或纯字符串方法应该足够了,或者您可以用类似PyParsing
或手动滚动递归下降解析器来实现语法,而不是翻译。
接下来,您需要评估该值,以确保在评估为浮点时不会给出错误。 sys.float_info
应该有你需要的所有信息...除了Python 2.7实际上并没有定义什么是和不是错误。一般情况下,溢出会自动变为inf
或-inf
,并下溢到0
,但是您可能需要一些试验和错误来查看它对所有边界情况的作用(或者查看解释器的源代码)。
你或许可以优化这个部分,首先判断一切明显非法/安全的东西(例如,如果没有指数并且长度足够短,它不可能溢出),但是会有一些范围你将不得不详细检查。
或者,在您评估号码时,您不妨跳过float
,只使用您评估的号码。如果你愿意,甚至可以使用不同的规则。,处理波斯数字或1.2x10^3
而不是1.2e3
,或允许数千个分隔符或...)。
我不会为你编写代码,因为这将是一件疯狂的事情。这需要花费大量的设计,编码,测试和调试,最终它会比为您提供Python try
float
慢几个数量级。
您必须将输入存储在变量中,然后在try
子句中将其转换为float
。如果转换成功,将它添加到total
,如果没有,检查其是否` '退出' 退出程序:
total = 0.0
while True:
a = raw_input("Enter a number or quit to finish: ")
try:
total += float(a)
except ValueError:
if a == 'quit':
break
print total
测试:
Enter a number or quit to finish: 2
Enter a number or quit to finish: 3
Enter a number or quit to finish: StackOverflow
Enter a number or quit to finish:
Enter a number or quit to finish: 4
Enter a number or quit to finish: quit
9.0
注:此代码将处理用户输入的字符串与'quit'
不同的情况。
OP希望不用'try-except'。 :/ –
所以为了做这样的事情,你必须每次尝试一次try-ValueError? – user3015794
为了获得预期的结果,*以相对简单的方式*,是的。 – Christian
你真的想要那个'= +'吗? '+ ='你在找什么?另外,'try-except'有什么问题? –
没有理由不在这里使用'try-except'。 –