我对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模块对其进行编码,为项目构建键盘接口。 非常感谢
答案 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"