gpt4 book ai didi

python - 间隔符号?

转载 作者:太空宇宙 更新时间:2023-11-03 14:09:46 24 4
gpt4 key购买 nike

我想为实数区间创建一个 Python 类。与数学符号最密切相关的语法是 Interval([a, b))或者,更好的是,Interval[a, b)构造所有实数的区间x满意a <= x < b .

是否可以构造一个类来处理这种语法?

最佳答案

不可能通过创建自定义类来“修复”语法无效的 python。

我认为在 python 中最接近数学区间符号的是

Interval('[a, b)')

如果您将区间作为参数传递给函数并且函数在使用它们之前将其参数转换为适当的类型,则这种方式会变得更加轻量级。示例:

def do_foo(interval, bar, baz):
interval = Interval(interval)
# do stuff

do_foo('[3,4)', 42, true)

Possible implementation :

import re

class Interval:
def __init__(self, interval):
"""Initialize an Interval object from a string representation of an interval
e.g: Interval('(3,4]')"""
if isinstance(interval, Interval):
self.begin, self.end = interval.begin, interval.end
self.begin_included = interval.begin_included
self.end_included = interval.end_included
return
number_re = '-?[0-9]+(?:.[0-9]+)?'
interval_re = ('^\s*'
+'(\[|\()' # opeing brecket
+ '\s*'
+ '(' + number_re + ')' # beginning of the interval
+ '\s*,\s*'
+ '(' + number_re + ')' # end of the interval
+ '\s*'
+ '(\]|\))' # closing brecket
+ '\s*$'
)
match = re.search(interval_re, interval)
if match is None:
raise ValueError('Got an incorrect string representation of an interval: {!r}'. format(interval))
opening_brecket, begin, end, closing_brecket = match.groups()
self.begin, self.end = float(begin), float(end)
if self.begin >= self.end:
raise ValueError("Interval's begin shoud be smaller than it's end")
self.begin_included = opening_brecket == '['
self.end_included = closing_brecket == ']'
# It might have been batter to use number_re = '.*' and catch exeptions float() raises instead

def __repr__(self):
return 'Interval({!r})'.format(str(self))

def __str__(self):
opening_breacket = '[' if self.begin_included else '('
closing_breacket = ']' if self.end_included else ')'
return '{}{}, {}{}'.format(opening_breacket, self.begin, self.end, closing_breacket)

def __contains__(self, number):
if self.begin < number < self.end:
return True
if number == self.begin:
return self.begin_included
if number == self.end:
return self.end_included

关于python - 间隔符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39644748/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com