我正在尝试制作一个程序,在某些用户输入上执行某些任务,例如递增或递减整数,将字符串添加到字符串等。
用户可以在同一行中提供多个命令。
当我使用raw_input
时,我不能(也不想)采用多行输入。
是否可以缩短if-elif-else
条件,并将其保持为可读形式?
for i in test_str:
if i == '[':
a += 1
elif i == '(':
b += 1
elif i == ']' and c > 0:
c -= 1
elif i == ')'and d > 0:
d -= 1
elif c == 0 and d == 0:
ret += i
... # more elifs
还有elif
之类的可能性:
elif i == 'o':
if test_str[test_str.index(i)+1] == i: # next char is same
# handle
else:
# handle
我正在使用它进行解析。
答案 0 :(得分:0)
如果您想减少代码使用的行数,您只需在一行上执行if - elif - else
语句。
if i == '[':
a += 1
elif i == '(':
b += 1
elif i == ']' and c > 0:
c -= 1
elif i == ')'and d > 0:
d -= 1
elif c == 0 and d == 0:
ret += i
变为:
if i == '[': a += 1
elif i == '(': b += 1
elif i == ']' and c > 0: c -= 1
elif i == ')'and d > 0: d -= 1
elif c == 0 and d == 0: ret += i
但是,不应该这样做,你应该改变你正在使用的逻辑。
首先,你应该使用一个函数,我也建议使用某种映射。
示例:
d = {
'[' : ('add', a, 1),
'(' : ('add', b, 1),
']' : ('method', my_method, ['sample_arg1', 'sample_arg2'], {'sample_kwarg' : 'sample value'})}
def check_char(char, mapping):
mapper = d.get(char, None)
if mapper:
if mapper[0] == 'add':
mapper[1] += mapper[2]
if mapper[0] == 'subtract':
mapper[1] -= mapper[2]
if mapper[0] == 'method':
mapper[1](char, mapper[2], mapper[3])
# you get the idea....
def my_method(char, *args, **kwargs):
# deal with char....