在Python中对字符串进行排序并测试字符串中的第一个字母
此代码正在测试字符串的第一个字母-如果是“a”,则返回在Python中对字符串进行排序并测试字符串中的第一个字母,python,Python,此代码正在测试字符串的第一个字母-如果是“a”,则返回alpha,否则返回zebra。有没有更好的方法可以做到这一点?明确无误。也许您应该像在注释中指出的那样防止空字符串。例如,您可以使用内置的方法来检查前缀。还有更短的路吗当然可以: def a_letter(string): s = string.lower() if s[0] == 'a': return 'alpha' else: return 'zebra' 或者,使用三元运算符可能更可读: return
alpha
,否则返回zebra
。有没有更好的方法可以做到这一点?明确无误。也许您应该像在注释中指出的那样防止空字符串。例如,您可以使用内置的方法来检查前缀。还有更短的路吗当然可以:
def a_letter(string):
s = string.lower()
if s[0] == 'a':
return 'alpha'
else:
return 'zebra'
或者,使用三元运算符可能更可读:
return ('zebra', 'alpha')[s.startswith(('a', 'A'))]
如果你只有两个条件,你可以尝试穷人的东西 它是如何工作的
print(['zebra','alpha'][string[0].lower() =='a'])
因为布尔是int的一个子类,所以
[string.lower()[0]='a']
生成一个整数值,但['false','true']
将其作为索引值。我认为这样做的一个好方法是:
True == 1, False == 0
因为它清晰且足够简洁。要做一个更全面的解决方案,请为每个字母返回一些内容 voc=将北约字母表名称列表转换为字母到名称的dict映射 def语音检查输入是否在dict中,然后返回值,或者?如果它是混乱的
def a_letter(s):
return 'alpha' if s and s[0].lower() == 'a' else 'zebra'
您没有打印
'alpha'
,而是返回'alpha'
。您的方式有什么问题?看起来很经典。如果字符串为空怎么办?>有没有更好的方法来实现这一点“更好”对您意味着什么?一个更快、代码更少、可读性更好的解决方案?如果你真的愿意,你可以去掉else
。它很可爱,但在现实世界中我更喜欢OP的代码。使用slice可以避免索引错误,所以你不能检查字符串是否为空:如果字符串[0:1]返回'alpha'。lower=='a'else'zebra'
@splash58更好的字符串[:1]
def a_letter(s):
return 'alpha' if s and s[0].lower() == 'a' else 'zebra'
voc=dict([[string.lower(x[0]), x] for x in
['ALFA',
'BRAVO',
'CHARLIE',
'DELTA',
'ECHO',
'FOXTROT',
'GOLF',
'HOTEL',
'INDIA',
'JULIETT',
'KILO',
'LIMA',
'MIKE',
'NOVEMBER',
'OSCAR',
'PAPA',
'QUEBEC',
'ROMEO',
'SIERRA',
'TANGO',
'UNIFORM',
'VICTOR',
'WHISKEY',
'XRAY',
'YANKEE',
'ZULU']])
def phonetic(letter):
if letter in voc:
return voc[letter]
else:
return "?"