如果在if语句中检测到非字母字符,则在for循环迭代期间,i不会递增。
如果字符不是字母,则非数字函数返回true,否则返回false。当我测试for循环内的代码时,我让控制台打印了i的值。每当代码到达非字母字符时,我都不会递增,因此会创建一个无限for循环。
__init__.py
如果字符串中有大写字符,我希望它返回true。如果字符串中没有大写字符,我希望它返回false。
答案 0 :(得分:1)
结合我认为引起问题的事物:
解决方案: 我对功能做了一点改动。现在,它遍历整个字符串,并使用正则表达式(“ Regex”)来确定所测试的值是否确实是字母。如果遇到大写字母,则计数会增加,从而使代码可以遍历整个字符串。我们使用逻辑“ &&”运算符在最终的if函数内部完成两个逻辑检查。
如何改进: 您可以通过在计数增加到0以上时立即返回true来使此代码更好,但是如果您愿意,我会把它留给您。
编辑:将第二个If语句移到for循环中,以便一旦满足条件,它就返回true,而不必在检查之前遍历整个字符串。
function isUpper(str) {
let count = 0;
for (let i = 0; i < str.length; i++) {
if (/[a-zA-Z]/.test(str.charAt(i)) && str.charAt(i) == str.charAt(i).toUpperCase()) {
count += 1;
}
if (count > 0) {
return true;
}
}
return false;
}
让我知道这是否有帮助!
答案 1 :(得分:1)
如果您要检查整个字符串是否为大写,则可以做得简单得多。
function isUpper(str) {
return /^[A-Z\s\W]+$/.test(str);
}
console.log(isUpper('ALL UPPER CASE'));
console.log(isUpper('ALL UPPER CASE! WITH ~@# STUFF'));
console.log(isUpper('THIS hAS ONE LOWER CASE CHARACTER'));
console.log(isUpper('THIS HAS 1 NUMBER'));
正则表达式检查从开始(^
)到结束($
)的整个字符串是否与[]
内的字符匹配,该字符范围从大写A到大写Z(A-Z
,特殊的“空格”字符\s
和其他非单词字符\W
,匹配一次或多次。您可以对其进行微调以确保其匹配至少一个大写字母,然后可选地跟空格,逗号,感叹号等。所有这些都取决于您的用例以及预期的输入vs.输出
没有阅读代码下的最后一句话。如果您只想检查字符串中某处的大写字符,则只需
function isUpper(str) {
return /[A-Z]/.test(str)
}
console.log(isUpper('ALL UPPER CASE'));
console.log(isUpper('ALL UPPER CASE! WITH ~@# STUFF'));
console.log(isUpper('THIS hAS ONE LOWER CASE CHARACTER'));
console.log(isUpper('THIS HAS 1 NUMBER'));
console.log(isUpper('this has no uppercase characters at all'));