我正在尝试编写一个代码来检查允许的唯一数字是否可以使用while循环被2或3整除,这是我写的代码:
$(function() {
$.ajax({
type: "GET",
url: "/data",
success: function (res) {
console.log(res);
}
});
});
但是我意识到这段代码只能测试字符串中的第一个数字而不是全部,所以当我测试字符串'asdf @ 25'时,它返回True。所以我想知道如何解决它,我的代码中还有其他问题吗?谢谢!
答案 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
。
如果每个数字都可以被2
或3
整除,那么这将保持为真。
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");
}
。