Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python我想要一种不同的while循环方式_Python_Loops_While Loop_Try Catch - Fatal编程技术网

Python我想要一种不同的while循环方式

Python我想要一种不同的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子句中,将其转换为浮点值。如果转换成功,请将其添加

我为同一个程序编写了这段代码,但我希望它以相同的方式工作,而不使用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:
    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??以一种相对简单的方式获得预期的结果,是的。