Python我想要一种不同的while循环方式
我为同一个程序编写了这段代码,但我希望它以相同的方式工作,而不使用try和ValueErrorPython我想要一种不同的while循环方式,python,loops,while-loop,try-catch,Python,Loops,While Loop,Try Catch,我为同一个程序编写了这段代码,但我希望它以相同的方式工作,而不使用try和ValueError total = 0.0 while True: try: total =+ float(raw_input("enter a number or quit to finish")) except ValueError: break print total 谢谢大家。您必须将输入存储在变量中,然后在try子句中,将其转换为浮点值。如果转换成功,请将其添加
total = 0.0
while True:
try:
total =+ float(raw_input("enter a number or quit to finish"))
except ValueError:
break
print total
谢谢大家。您必须将输入存储在变量中,然后在
try
子句中,将其转换为浮点值。如果转换成功,请将其添加到总计
,如果未成功,请检查是否为“退出”以退出程序:
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'
不同的字符串时,如果只想处理“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
。如果没有试一试
,您如何防范这种情况
或者,如果您想阻止用户输入,例如,inf
或-inf
或nan
,或者(至少在某些平台上)将溢出到其中一个的内容(例如,在大多数系统上尝试1e309
),该怎么办
嗯,您需要某种方法来验证float
调用是否能够提前工作
首先,您必须解析。至少你不是在处理Python3.x,例如,float('1633')
是完全有效的,意味着103.0
。该语言很容易翻译成常规语言,这意味着re
或纯字符串方法应该足够了,或者您可以使用类似的方法或手动递归下降解析器来实现语法,而不是翻译
接下来,您需要评估该值,以确保在评估为浮点值时不会出现错误。应该有您需要的所有信息…除了Python 2.7没有定义什么是错误,什么不是错误。通常,溢出会自动转换为inf
或-inf
,下溢为0
,但您可能需要一点尝试和错误,以了解它对所有边缘情况的作用(或者,查看解释器的源代码)
您可能可以通过首先排除所有明显非法/安全的内容来优化此部分(例如,如果没有指数且长度足够短,则不可能溢出),但您必须详细检查某些范围
或者,在计算数字时,您也可以跳过浮点数
,只使用您计算的数字。这甚至允许您根据需要使用Python 2.7中的不同规则(例如,处理波斯数字或类似1.2x10^3
的形式,而不仅仅是1.2e3
,或允许使用数千个分隔符,或……)
我不会为你写代码,因为这是一件疯狂的事情。这将需要大量的设计、编码、测试和调试,最终它的运行速度将比让Python为您尝试浮点值要慢几个数量级。您真的希望=+
吗?你在找什么?另外,try-except
有什么问题吗?没有充分的理由不在这里使用try-except
。OP希望在没有try-except
的情况下执行此操作:/所以,为了做这样的事情,你必须每次都做一个try-ValueError??以一种相对简单的方式获得预期的结果,是的。