gpt4 book ai didi

python - 如何检查存储为字符串的条件?我需要解析器吗?

转载 作者:行者123 更新时间:2023-11-28 20:47:57 24 4
gpt4 key购买 nike

我将一些条件/比较存储为字符串。我如何检查这些条件?下面给出了一个非常简单的例子。我希望条件作为字符串,因为我想在它们失败时打印它们。

我想我需要为此制作一个解析器,但是为一个小东西制作一个完整的 Python 解析器是一个非常愚蠢的想法。有什么想法可以做什么?

def rev_num(num):
if num < 0:
return -int(str(-num)[::-1])
else:
return int(str(num)[::-1])

conditions = ['rev_num(-34) != -43', 'rev_num(34) != 43']

for i in conditions:
if something-needs-to-come-here(i):
print(i)

我知道这是一个奇怪的想法,但如果可以的话请跟上。


我给 user2357112 造成了一些困惑。他指出我正在尝试做的事情叫做 unit-testing。感谢那。

为了避免任何进一步的混淆,我将添加我试图改进的代码。我想做的更改是在函数 correctness 中打印条件,使其返回 False

def rev_num(num):
if num < 0:
return -int(str(-num)[::-1])
else:
return int(str(num)[::-1])

if __name__ == "__main__":
from timeit import Timer
import random

def correctness(f):
print("Correctness Test")
if f(-34) != -43 or f(34) != 43:
return False
print('Correct')
print('-----------')
return True

def timing(f, times):
def test1(f):
f(random.randint(1, 1000))
def test2(f):
f(random.randint(100000, 1000000))

print("Timing Test")
print(Timer(lambda: test1(f)).timeit(number = times))
print(Timer(lambda: test2(f)).timeit(number = times))
print('-----------')

def tests(f,times):
print(f.__name__)
print('-----------')
if correctness(f) is True:
timing(f, times)

repeat = 100000
tests(rev_num, repeat)

最佳答案

你可以使用 eval ,但我不建议这样做。如果您已经知道要多次调用 rev_num(x) != y,只需创建一个辅助函数并使用元组列表来存储参数:

def check_condition(x, y):
return rev_num(x) != y

conditions = [(-34, -43), (34, 43)]

for i in conditions:
if check_condition(*i):
print('rev_num({}) != {}'.format(*i))

关于python - 如何检查存储为字符串的条件?我需要解析器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752163/

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