问题
I want know if there is a elegant method for looking if a value that continually changes in a while loop can be checked and stop the while loop if the value stops change and remains the same.
For example:
Value = 0
while True:
value changes everytime
(if value still the same break)
回答1:
How about this way? BTW: Fix your typo error while
is not While
in python.
value = 0
while True:
old_value, value = value, way_to_new_value
if value == old_value: break
回答2:
previous = None
current = object()
while previous != current:
previous = current
current = ...
回答3:
You can:
value_old = 0
value_new = 1
value = [value_old, value_new]
while True:
# change
# test
if value[0] == value[1]:
break
else:
value = [value[1], value[0]]
回答4:
A more portable solution would be to make this a class so that an instance holds on to the previous value. I also had a need for a fuzzy match so I included that in the below example.
class SamenessObserver:
"""An object for watching a series of values to see if they stay the same.
If a fuzy match is required maxDeviation may be set to some tolerance.
>>> myobserver = SamenessObserver(10)
>>> myobserver.check(9)
False
>>> myobserver.check(9)
True
>>> myobserver.check(9)
True
>>> myobserver.check(10)
False
>>> myobserver.check(10)
True
>>> myobserver.check(11)
False
>>> myobserver = SamenessObserver(10, 1)
>>> myobserver.check(11)
True
>>> myobserver.check(11)
True
>>> myobserver.check(10)
True
>>> myobserver.check(12)
False
>>> myobserver.check(11)
True
>>>
"""
def __init__(self, initialValue, maxDeviation=0):
self.current = 0
self.previous = initialValue
self.maxDeviation = maxDeviation
def check(self, value):
self.current = value
sameness = (self.previous - self.maxDeviation) <= self.current <= (self.previous + self.maxDeviation)
self.previous = self.current
return sameness
来源:https://stackoverflow.com/questions/33145872/check-if-a-value-still-remains-the-same-in-a-while-loop-python