我想检查字符串是否是初学者(按字母顺序排列)。
def is_abecdarian(s):
index = 0
while index < len(s)-1:
if s[index + 1] > s[index]:
return True
index += 1
return False
print(is_abecdarian('babcd'))
如果我将我的False和True切换到周围并切换大于小于它的工作。我不明白的是'a'不大于'b',但是当我运行上面的代码时,它返回True。
答案 0 :(得分:5)
var previous=[];
var selectelements = $('select');
$('select').focus(function(e){
previous[$('select').index(this)] = $(this).val();
});
$('select').change(function(e){
alert("previous value = " + previous[$('select').index(this)] + ", current value = " + $(this).val());
previous[$('select').index(this)] = $(this).val();
});
退出该函数,所以现在它一直运行,直到有两个字母顺序正确然后退出。
答案 1 :(得分:1)
编写循环的方式,如果订购了任何一对字符,它将返回True。如果所有对都失败,它只返回False。第一对ba
未通过if检查,但第二对ab
通过,函数返回True。
这是不对的,因为如果您考虑一下,在您检查所有字符之前,您无法知道字符串是初学者。当你完成循环时,你应该只返回True。相反,只要您发现一对不正常的字符,就可以安全地返回False。
这就是为什么翻转布尔值和<
操作的原因。
答案 2 :(得分:0)
只有当下一个字符是<
而不是当前字符时,才需要返回False。
如果在所有循环期间没有发生这种情况,则返回True。
这是正确的功能:
def is_abecdarian(s):
index = 0
while index < len(s)-1:
if s[index + 1] < s[index]:
return False
index += 1
return True
print(is_abecdarian('babcd'))
print(is_abecdarian('abcz'))
答案 3 :(得分:0)
为什么它不起作用已经被解释过了,所以,只是添加到已解释的内容:
def is_abecdarian(s):
return all(s[i] < s[i+1] for i in range(len(s)-1))
print(is_abecdarian('babcd'))
print(is_abecdarian('ejmpq'))
哪里
all(argument)
才会返回True
;
s[i] < s[i+1]
是s
的第i个元素与下一个元素之间的比较。
s[i] < s[i+1] for i in range(len(s)-1)
对s
的所有连续元素对进行比较。