在CheckIO
上进行练习,我想知道为什么这不会奏效。给定一组字符串,如果任何字符串是集合中任何其他字符串的后缀,我试图返回True。否则就错了。使用itertools我首先在元组中生成必要的排列。然后对于每个元组(每个i),如果第二个元组在第一个元组(option1)的末尾,我想看到困难的方法。另一方面是使用.endwith函数(option2),但两者都不适用于我。为什么这两个选项存在缺陷?
import itertools
def checkio(words_set):
for i in itertools.permutations(words_set, 2):
#option1 ---- if i[1] in i[0][-len(i[1]):]:
#option2 ---- if i[0].endswith(i[1]):
return True
else:
return False
的示例:
checkio({"hello", "lo", "he"}) == True
checkio({"hello", "la", "hellow", "cow"}) == False
我知道这可以作为答案。但只是想知道为什么我的原始方法不会采取。
def checkio(words_set):
for w1 in words_set:
for w2 in words_set:
if w1.endswith(w2) and w1 != w2:
return True
return False
答案 0 :(得分:1)
您的return False
应该在for循环的末尾,否则该函数将在每次第一次比较时返回True / False,并忽略所有后续比较:
import itertools
def checkio(words_set):
for i in itertools.permutations(words_set, 2):
if i[0].endswith(i[1]):
return True
return False
答案 1 :(得分:0)
这是因为您在第一次检查后立即angular.module('mtApp').factory('getKey', function($http, $q) {
var getData= function(data) {
var key='';
var url = '../php/key_gen.php';
var returned = $http.post(url, data);
return $q.all(returned);
};
var getKey = {
getData: getData
};
return getKey;
});
$scope.key = 'ok';
getKey.getData(someData).then(function (response, status, headers, config) {
console.log(response.data.GeneratedKey);
});
。如果失败,它将返回return False
您需要将其从False
循环中删除!
但是作为一种更加pythonic的方式,您可以在for
函数中使用combinations
和生成器表达式:
any
答案 2 :(得分:0)
由于这是一个练习,我不会给你完整的答案,但你确定你真的想在if(pingServer("http://yousite.com")){echo "I'm up";}else{echo "I'm down";}
条款中return False
吗?