Python 值查找Kaprekar数时出错
在数学中,给定基数的Kaprekar数是一个非负整数,其在该基数中的平方表示可以分成两部分,再加起来等于原始数。例如,45是Kaprekar数,因为45²=2025,20+25=45。Python 值查找Kaprekar数时出错,python,python-3.x,Python,Python 3.x,在数学中,给定基数的Kaprekar数是一个非负整数,其在该基数中的平方表示可以分成两部分,再加起来等于原始数。例如,45是Kaprekar数,因为45²=2025,20+25=45。 我想打印两个整数p和q之间的所有卡普雷卡数 错误: 编译器消息: Runtime Error Error(stderr) : Traceback (most recent call last): File "solution.py", line 26, in <module> kapreka
我想打印两个整数p和q之间的所有卡普雷卡数 错误: 编译器消息:
Runtime Error
Error(stderr) :
Traceback (most recent call last):
File "solution.py", line 26, in <module>
kaprekarNumbers(p, q)
File "solution.py", line 17, in kaprekarNumbers
if int(p1) + int(p2) == int(i):
ValueError: invalid literal for int() with base 10: ''
运行时错误
错误(stderr):
回溯(最近一次呼叫最后一次):
文件“solution.py”,第26行,在
卡普雷卡数(p,q)
文件“solution.py”,第17行,以Kaprekar数字表示
如果int(p1)+int(p2)==int(i):
ValueError:基数为10的int()的文本无效:“”
非常感谢您的帮助。如果
p
是[0,3]范围内的整数,因此其平方是一个单位数整数,那么您对平方字符串版本的拆分将为p1
生成一个空字符串。int(“”)是一个错误。在尝试转换之前,必须检查该值:
if len(square) >= 2:
# Put your existing code here;
# If square is only a single digit, there's no use splitting the result.
更好的是,覆盖一位数的大小写,这样您就可以选择1
作为有效数字:
if p1 == '':
p1 = '0' # Force a leading zero.
if int(p1) + int(p2) == int(i):
这里有一个更高级的实现(当您更熟悉Python时) code.py:
您得到了什么错误?此代码甚至没有尝试将任何字符串转换为浮点。请发布一个完整、准确的堆栈跟踪。欢迎使用StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。已编辑!在正文中添加了错误。请将错误作为文本编辑到问题正文中。即使我已纠正了此错误,我仍收到另一个错误
回溯(最近一次调用):文件“solution.py”,第26行,在kaprekarNumbers(p,q)文件“solution.py”中,第14行,在kaprekarNumbers p1中,p2=square[:len(square)/2],square[len(square)/2:]TypeError:切片索引必须是整数或无,或者具有_索引_方法
您能建议代码中的一些改进吗。谢谢:D不应该是“范围[1:3]”吗?实际上,根据正式定义,0是允许的。
if p1 == '':
p1 = '0' # Force a leading zero.
if int(p1) + int(p2) == int(i):
import sys
def kaprekar(n, base=10):
#if i <= 0:
# return False
square = n ** 2
splitter = base
while True:
div, mod = divmod(square, splitter)
if mod and div + mod == n:
return True
if splitter >= square:
return False
splitter *= base
return False
def print_kaprekars(p, q, base=10):
for i in range(p, q):
if kaprekar(i, base=base):
print(i)
def main():
lo = 0
hi = 1000
base = 10
print("Printing Kaprekar numbers (!!! base 10 representation !!!) between {:d} and {:d} in base {:d}".format(lo, hi, base))
print_kaprekars(lo, hi, base=base)
if __name__ == "__main__":
print("Python {:s} on {:s}\n".format(sys.version, sys.platform))
main()
(py35x64_test) e:\Work\Dev\StackOverflow\q050846444>"e:\Work\Dev\VEnvs\py35x64_test\Scripts\python.exe" code.py
Python 3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:17:05) [MSC v.1900 64 bit (AMD64)] on win32
Printing Kaprekar numbers (!!! base 10 representation !!!) between 0 and 1000 in base 10
1
9
45
55
99
297
703
999