首先,我想开始我的Python之旅,所以我的代码肯定会反映这一点。我试图编写一个程序,通过返回真或假来检查输入的数字是否是卡普雷卡数。为此,我创建了以下函数:
def list_to_num(list):
(以int形式返回列表)
def num_to_list(num):
(以列表形式返回int)
主程序:
def is_kaprekar_number(num):
square = num ** 2
listeNum = num_to_list(square)
x = 0
p1 = listeNum[:x]
p2 = listeNum[(x+1):]
for i in range(len(listeNum)):
if list_to_num(p1) + list_to_num(p2) == num:
return 'True'
else:
return 'False'
x += 1
print(is_kaprekar_number(9))
输出返回False
我的主要问题是,我正在努力测试一个列表中的所有可能性,该列表是从我试图测试的数字的平方转换而来的。i、 e 45^2=2025
第一次迭代=2+025=27,错误-检查下一次迭代
第二次迭代=20+25=45,true,返回true
提前多谢
我不喜欢这样,我不能在注释中格式化代码。您的循环没有正确嵌套;您只拆分了一次列表,然后多次检查同一字符串。另外,在尝试所有变体之前,不能返回False。以下是一个有效的版本:
我想你的问题是,尽管92=81和8+1=9(这有助于明确这些事情),为什么这会返回
False
首先,
p1,p2
在您的循环之外,因此它们只计算一次,从不更新。很容易修复-只需将它们移动到循环体中即可其次,
return
语句终止is_kaprekar_number
,这意味着在第一次尝试后不会有任何额外的循环调用。如果找到合适的拆分,您希望立即终止,但如果没有,则继续,并且只有在用尽所有可能的拆分后才返回False
。因此,您需要删除else条件并将return False
移到循环之外第三,python切片的上限是不包含的-
[0:x]
不包含x
th元素,因此切片总是排除一个数字。 我将把明确的解决方案留给您(或其他回答者)来完成最后,介绍一些让您的生活更轻松的python通用习惯用法:
想要列表的前x个元素吗
l[:x]
想要名单的其余部分吗l[x:]
需要非负整数的数字吗?转换为字符串
str(i)
。 已完成字符串切片,需要返回整数吗int(s)
(注意:在这种特殊情况下,您不需要这样做,因为您必须修改程序逻辑的其余部分,以避免尝试转换空字符串)使用已经是python类型的变量名,如
list
Don't do that!
除非有必要,否则不要在
for
循环中使用计数器,也不要在不使用的东西上循环相关问题 更多 >
编程相关推荐