允许的唯一数字是可被2或3整除的数字

时间:2017-10-01 04:03:36

标签: python

我正在尝试编写一个代码来检查允许的唯一数字是否可以使用while循环被2或3整除,这是我写的代码:

$(function() {
    $.ajax({
        type: "GET",
        url: "/data",
        success: function (res) {
            console.log(res);
        }
    });
});

但是我意识到这段代码只能测试字符串中的第一个数字而不是全部,所以当我测试字符串'asdf @ 25'时,它返回True。所以我想知道如何解决它,我的代码中还有其他问题吗?谢谢!

3 个答案:

答案 0 :(得分:2)

您的代码存在许多问题。

div您没有调用if x[countdigit].isdigit == True:方法。这样称呼:isdigit

isdigit()然后y = x[countdigit]在这里,您要检查字符串是否可被3或2整除。首先将字符串转换为整数:if y%2 == 0 or y%3 == 0:

y = int(x[countdigit])当您看到一个可被3或2整除的数字时,您将从函数返回。您将返回而不检查其余数字。而不是立即返回,什么都不做。 if y%2 == 0 or y%3 == 0: return True

以下是完整代码:

if y%2 == 0 or y%3 == 0: pass

答案 1 :(得分:0)

这是因为当你点击第一个实例时return True - 这基本上打破了那一点的while循环,即2行中的25

你基本上应该做以下

is_allowed &= (y%2 == 0 or y%3 == 0)

开头有is_allowed = True

如果每个数字都可以被23整除,那么这将保持为真。

Sidenote,您可以创建更多测试用例以从头开始构建模型。尝试简单的案例,例如"2""3""5""23"等,然后再尝试更难的事情。

答案 2 :(得分:0)

您的主要问题是您过早return True return False。您的当前代码会在看到第一个有效数字后立即返回,但由于以后可能存在无效数字,因此过早。相反,您应该只保留if / else组合的return True部分。虽然您对代码的最直接翻译是将pass替换为if(不执行任何操作),但更好的方法是将条件转换为else,而不使用if not (y%2 == 0 or y%3 == 0): # or distribute the negation: if y%2 != 0 or y%3 != 0 return False # no else for this if! {1}}:

isdigit

我认为您现在的代码还有其他一些问题。最大的问题是,您是否正在迭代数字列表或字符串的字符,这一点尚不清楚。我认为你的意图是迭代一个字符串并忽略非数字字符,但你有一些问题。您需要修复的第一件事是使用True。这是一种方法,但你根本就没有调用它。您反而将方法本身与if x[countdigit].isdigit():进行比较(这将永远不会成功)。

我认为你想要if而不是你现在拥有的。这会调用该方法,并且不会进行不必要的布尔比较(y已经检查了" truthy"值。)

下一个问题是,在继续使用代码的数学部分之前,您永远不会将数字单字符串转换为实际数字。我认为这样做的一个自然的地方是当你分配给y = int(x[countdigit])时。您可以使用while之类的内容在分配之前进行转换。

其他不是问题的是for循环中代码的整体结构。在Python中,您可以使用while循环直接迭代各种容器类型,而不需要手动使用连续的整数对它们进行索引。您的countdigit以及所有for character in x:代码可以替换为character(并在其余代码中使用x[countdigit]代替function copydata() { var ss = SpreadsheetApp.getActiveSpreadsheet(); var source_sheet = ss.getSheetByName("Data Entry"); var target_sheet = ss.getSheetByName("Data"); var last_row = target_sheet.getLastRow(); var v var row = 6 var target_range = target_sheet.getRange("B"+(last_row+1)+":W"+(last_row+1)); for (var i = 0; i< 27; i++){ v = source_sheet.getRange("E" + row + ":N" + row).getValues(); if (v[i] == "Listing Agent"){ row++ continue; } var triggerCell = source_sheet.getRange("AB" + row).getValue(); if (triggerCell == 0){ var source_range = source_sheet.getRange("B" + row + ":W" + row); target_sheet.insertRowAfter(last_row); source_range.copyTo(target_range, {contentsOnly:true}); } row++ } ss.setActiveSheet(source_sheet); source_sheet.getRange('C2').clearContent(); ss.setActiveSelection("C2"); Browser.msgBox("Your data has been moved."); //SpreadsheetApp.getActiveSpreadsheet().toast("Data has been moved.", "Data Copied"); }