Python:循环遍历if语句的elif部分

时间:2018-05-13 21:29:40

标签: python loops for-loop if-statement

我对python来说比较新,所以我甚至不确定我是否以正确的方式接近它。但我在任何地方都没有找到一个好的解决方案。

为了避免非常丑陋和重复的代码,我想循环if语句的elif部分。

这是我想修复的丑陋代码:

def codeToChar(code):
chars = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm"

if code == ord(chars[0]):   ##### SUPER UGLY
    return chars[0]
elif code == ord(chars[1]):
    return chars[1]
elif code == ord(chars[2]):
    return chars[2]
elif code == ord(chars[3]):
    return chars[3]
elif code == ord(chars[4]):
    return chars[4]
elif code == ord(chars[5]):
    return chars[5]
..... etc .....
else:
    return "wat"

正如您所看到的,索引递增1,所以我认为循环非常简单。但是,当我尝试以下操作时,它没有工作,因为这必须被表述为if,elif,elif,else语句,而且if语句不多。

我失败的尝试:

for x in xrange(0,len(chars)-1):
    if code == ord(chars[x]):
        return chars[x]
    else:
        return "wat"

我如何循环这个? 注意:如果它有任何相关性,我使用curses模块对其进行编码,为项目构建键盘接口。 非常感谢

4 个答案:

答案 0 :(得分:2)

for c in chars:
    if code == ord(c):
        return c
return "wat"

仅当先前未执行过return之前(即没有匹配的字符)时,才会执行第二个return

答案 1 :(得分:1)

看起来您只是在检查代码是否是其中一个字符。一个干净的解决方案是:

h1

答案 2 :(得分:1)

使用dict:

import io

// import stuff and set up s3_client

body = s3_client.get_object(Bucket=bucket, Key=key)['Body']
stream = io.BufferedReader(body._raw_stream)
stream.readlines()

答案 3 :(得分:-1)

您不希望在循环内返回“wat”,因为只要if语句失败一次,它就会触发。如果所有迭代失败,您只想返回错误。取消else阻止这样做。

for x in xrange(0,len(chars)-1):
    if code == ord(chars[x]):
        return chars[x]
else:
    return "wat"

else块是可选的。你也可以写:

for x in xrange(0,len(chars)-1):
    if code == ord(chars[x]):
        return chars[x]
return "wat"