您能告诉我该算法的返回线吗?
该函数应该采用字符串并返回其Pig Latin版本,即它采用第一个辅音或辅音簇并将其放置在字符串的末尾,并在末尾添加“ ay”。
如果字符串以元音开头,则应该在末尾添加“ way”。
num1 = -1
while num1 <= 0:
num1 = int(input('Enter a number greater than 0: '))
num2 = num1 - 1
while num2 <= num1:
num2 = int(input('Enter a number greater than {}: '.format(num1)))
print(list(range(num1, num2+1)))
答案 0 :(得分:4)
那很难理解,因为名字太恐怖了。 obj
实际上是一个数字,用于移至字符串中的某个位置,因此应将其命名为pos
或其他名称。 check
不会检查任何内容,它只会向前移动直到找到第一个元音,因此应该为:
const firstVowel = (pos = 0) => "aeiou".includes(str.charAt(pos)) ? pos : firstVowel(pos + 1);
现在,最后一行仅是第一个元音的一部分(在开头删除了辅音):
str.substr(/*from*/ firstVowel() /*till end*/)
如果第一个元音直接在开头:
firstVowel() === 0
它只是追加
"way"
否则,它会以这些辅音开头:
str.substr(0, /*to*/ firstVowel())
并附加一个“ y”。
答案 1 :(得分:0)
希望下面的代码带有注释进行解释。
function translatePigLatin(str) {
function check(obj) {
return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj;
}
//return str.substr(check(0)).concat((check(0) === 0 ? 'w' : str.substr(0, check(0))) + 'ay');
// The above is explained as equivalent to below:
if(check(0) === 0){
return str.substr(check(0)).concat('w'+'ay')
}
return str.substr(check(0)).concat(str.substr(0, check(0))+'ay')
}
// test here
console.log(translatePigLatin("consonant")); // should return "onsonantcay"
答案 2 :(得分:0)
在不确定三元语句的功能时,通常将三元语句分解为if / else块很有帮助。
function translatePigLatin(str) {
function check(index) {
// return ['a','i','u','e','o'].indexOf(str.charAt(obj)) == -1 ? check(obj + 1) : obj;
// break down ternary into traditional if also changed obj to index to be more descriptive
const vowels = ['a','i','u','e','o'];
// if the character at the given index exists then check the next character
if (vowels.indexOf(str.charAt(index)) === -1) {
return check(index + 1)
}
// otherwide return index (vowel case)
return index;
}
// return str.substr(check(0)).concat((check(0) === 0 ? 'w' : str.substr(0, check(0))) + 'ay');
// set base translated word as the first letter in word that is not a vowel.
const indexKey = check(0)
// get string after index key
let substringed = str.substr(indexKey)
// get string from beginning until indexkey
let appended = str.substr(0, indexKey);
// if the index key is the first letter (word starts with vowel) use 'w'
if (indexKey === 0) {
appended = 'w';
}
// return string
return `${substringed}${appended}ay`;
}
// test here
const singleConsonant = translatePigLatin("constant");
const doubleConsonant = translatePigLatin("chain");
const vowel = translatePigLatin("analyze")
console.log(singleConsonant, doubleConsonant, vowel);