2017-10-06 29 views
1

我从来没有找到一种简洁方法做的事情是将字符串与多个集合进行比较,或者可以使用一个长的字符串来提供一些有意义的输出。这是我目前的代码:Python简洁性:将字符串与具有返回值的多个集合进行比较

def input(): 
    text = input("Choose a number: ").lower() 
    if "1" in text or "one" in text: return 1 
    elif "2" in text or "two" in text: return 2 
    ... and so on... 
    elif "9" in text or "nine" in text: return 9 
    else: return 0 

我的目标是让它更简洁一点,考虑它现在有多丑。

此外,在问题标签的一点点:这是更快地做到这一点,或:

if any(x in text for x in (["1", "one"])): return 1 

哪一个被认为是更主流?

对不起;我的Python确实是入门级的。

---编辑---

道歉的混乱;我其实是一些更普遍意义,比如这个:

def input(): 
     text = input("Give an input: ").lower() 
     if any(x in text for x in (["eggplant", "emoji", "purple"])): return 1 
     elif any(x in text for x in (["tomato", "red", "tomatina"])): return 2 
     ... and so on... 
     elif any(x in text for x in (["lettuce", "green", "avatar"])): return 9 
     else: return 0 
+1

也许是正则表达式? 此外,输入可能只是一个数字或一个数字(不是“短语”)?你能做出这些假设吗? – Aviad

+0

对不起,这不是我原来的代码;我只是用一种表达我的意思的格式。输入将是一个字符串。我对我缺乏Python专业知识表示歉意,但我真的不知道如何使用正则表达式;你能给我一个小例子吗? – XymphosCraK

回答

1

根据的规律性你查询,您可以使用某种循环:

for i, s in enumerate('one two three four ... nine'.split(), 1): 
    if str(i) in text or s in text: 
    return i 
return 0 
+0

不错,但是,你应该检查'str(i)在文本中'而不是'我在文本中'。 –

+0

@MosesKoledoye完成了,在我的第一个版本:) – schwobaseggl

0

我将建立一个标准化的功能为:

_NORMALIZE_DICT = { 
    "one": "1", 
    "two": "2", 
    ... 
} 

def normalize(test): 
    return _NORMALIZE_DICT.get(test.lower(), test) 

然后

def input(): 
    text = normalize(input("Choose a number: ")) 
    try: 
     return int(text) 
    except ValueError: 
     return 0 
+1

这不完全是他们想要的。他们用'in'测试而不是'=='。例如,如果“text”是“东西1”,OP的代码将返回“1”。 –

+0

我会去澄清我原来的帖子;对困惑感到抱歉。谢谢@MosesKoledoye – XymphosCraK

相关问题