我需要一些帮助:
写一个函数(main),它将要求用户输入一个起始和结束数字范围(包括)。使用while循环计算数字。只有在它是回文时才将数字加到总数中(调用isNumberPalindrome)。添加数字后打印总数。'
到目前为止,这个(主要)功能是......
def main():
start = int(input("Enter a number to start counting at:"))
end = int(input("Enter a number to end counting at:"))
while start <= end:
print(start)
start = start + 1
这是我对我的(isNumberPalindrome)函数所拥有的。
def isNumberPalindrome(s):
if len(s) < 1:
return True
else:
if s[0] == s[-1]:
return isNumberPalindrome(s[1:-1])
else:
return False
到目前为止,我的(主要)功能要求用户输入(开始和结束编号)并使用while循环对它们进行计数。我不知道在我的代码中添加什么(主要)函数接下来实现“只有当它是回文时才将数字添加到总数中(调用isNumberPalindrome)。在添加数字后打印总数。”
感谢您的帮助。
到目前为止,提供给我的代码,这就是发生的事情。
Enter a number to start counting at:1
Enter a number to end counting at:6
1
Traceback (most recent call last):
File "C:/Users/Tyler/Desktop/AWDADXC.py", line 38, in <module>
main()
File "C:/Users/Tyler/Desktop/AWDADXC.py", line 33, in main
if isNumberPalindrome(start):
File "C:/Users/Tyler/Desktop/AWDADXC.py", line 18, in isNumberPalindrome
if len(s) < 1:
TypeError: object of type 'int' has no len()
有谁知道出了什么问题?
答案 0 :(得分:1)
这是一个简单的尝试:
def isNumberPalindrome(n):
return str(n) == str(n)[::-1]
filter(isNumberPalindrome, range(10,100))
输出:
[11, 22, 33, 44, 55, 66, 77, 88, 99]
总结它们只需将序列传递给sum()
,如此:
sum(filter(isNumberPalindrome, range(10,100)))
输出:
495
如果您想要考虑用户输入,您可以这样做:
sum(filter(isNumberPalindrome, range(int(raw_input('Enter a starting number:')), int(raw_input('enter a stopping number:')))))
将产生以下输出:
Enter a starting number:10
enter a stopping number:100
495
答案 1 :(得分:1)
迭代从start
到end
的所有整数:
for n in range(start, end + 1):
print(n)
获取数字;你可以使用str(n)
:
def is_palindrom(number):
digits = str(number)
return digits == digits[::-1]
其中s[::-1]
反向返回字符串s
,例如"abc"[::-1] == "cba"
。
查找[start,end]范围内所有回文的总和:
total = sum(number for number in range(start, end + 1) if is_palindrom(number))
答案 2 :(得分:1)
您的代码存在的问题是您在整数上调用len
。
您应该做的是在可迭代的地方调用len
,例如list
或string
(如答案中公布的解决方案)。
例如,使用isNumberPalindrome
的递归实现,
>>> isNumberPalindrome("123321")
True
>>> isNumberPalindrome("HelloolleH")
True
>>> isNumberPalindrome(str(123321))
True
>>> isNumberPalindrome([1,2,3,4,3,2,1])
True
除此之外,如果没有必要使用递归实现, 任何其他答案,应该做的工作。
答案 3 :(得分:0)
def main():
start = int(input("Enter a number to start counting at:"))
end = int(input("Enter a number to end counting at:"))
total = 0
while start <= end:
print(start)
if isNumberPalindrome(str(start)):
total += start
start = start + 1
print(total)
答案 4 :(得分:0)
你需要一个可以存储回文总和的变量。不只是调用if语句来检查数字是否为回文,如果是,则将数字添加到总数中,否则什么都不做。
PS:您可以使用另一个答案中提供的Juampi代码。
答案 5 :(得分:0)
您的问题是假设isNumberPalindrome
的参数是str
,但您传递的是int
在不转换为str
的情况下检查回文很容易。例如
def isNumberPalindrome(n): # n is an integer
s = n
t = 0
while s:
t = t*10 + s%10
s /= 10
return n == t
答案 6 :(得分:0)
使用输入数字指定范围
function findPalindromes(number) {
let palindromeCount = 0;
let leftSide = '';
let rightSide = '';
for (let i = 1; i <= number; i++) {
let checkBox = [];
let s = i.toString();
for (let j = 0; j < s.length / 2; j++) {
leftSide = s[j];
rightSide = s[s.length - 1 - j];
if (rightSide === leftSide) {
checkBox.push('y');
} else {
checkBox.push('n');
}
}
if (!checkBox.includes('n') && i > 10) {
console.log(s);
palindromeCount++;
}
}
console.log(`TOTAL: ${palindromeCount} palindromes found`);
}
findPalindromes(1001);