求助大佬,用python写6174
1955 年,卡普耶卡对 4 位数字进行了研究,发现一个规律:对任意各位数字不相同的 4 位数,使用各位数字能组成的最大数减去能组成的最小数,对得到的差重复这个操作,最终会得到 6174 这个数字,并且这个操作最多不会超过 7 次。编写程序,使用枚举法对这个猜想进行验证。提示:使用 from string import digits 和from itertools import combinations 导入 digits 对象和 combinations 方法。使用字符串的‘ ’.join()方法将字符组合成字符串。{:10_254:} pallas 发表于 2021-11-3 22:01print(f"\n组合:{com}")
这里为什么有个f呢?
from itertools import combinations
from string import digits
def g6174(com, sn):
if sn > 0:# sn是记录第几次操作的参数
print(f"第{sn}次操作:{com}")
if com == "6174":# 递归函数的出口,得到6174后不再递归
return com
com = list(com)# 将传入的字符串转换为列表方便排序
com.sort()# 以升序方式排序,比如
minn = int("".join(com))# ,组合字符串并转换为整数得到最小值
com.sort(reverse=True)# 以降序方式排序,比如
maxn = int("".join(com))# 组合字符串并转换为整数得到最大值
# 最大值减最小值,并将结果转换为字符串,传入g6174函数递归调用,sn+1为记录操作次数的sn变为sn+1
g6174(str(maxn - minn), sn + 1)
# combinations(digits, 4)意思就是从digits中取4字进行排列组合,返回所有可能的组合
for com in combinations(digits, 4):
print(f"\n组合:{com}")# f""是f-string字符串格式化方法,具体用法自行查看
g6174("".join(com), 0)# 将字符串元组com的值连接成字符串,例如"".join(("1", "3", "2", "4"))
本帖最后由 hrpzcf 于 2021-11-3 16:58 编辑
from itertools import combinations
from string import digits
def g6174(com, sn):
if sn > 0:
print(f"第{sn}次操作:{com}")
if com == "6174":
return com
com = list(com)
com.sort()
minn = int("".join(com))
com.sort(reverse=True)
maxn = int("".join(com))
g6174(str(maxn - minn), sn + 1)
for com in combinations(digits, 4):
print(f"\n组合:{com}")
g6174("".join(com), 0)
hrpzcf 发表于 2021-11-3 11:56
for com in combinations(digits, 4):
print(f"\n组合:{com}")
g6174("".join(com), 0) 本帖最后由 hrpzcf 于 2021-11-3 16:51 编辑
python初学者_1 发表于 2021-11-3 15:58
for com in combinations(digits, 4):
print(f"\n组合:{com}")
g6174("".join(com), 0)
{:10_250:} hrpzcf 发表于 2021-11-3 11:56
大佬,能稍微解释以下您的代码吗? hrpzcf 发表于 2021-11-3 11:56
print(f"\n组合:{com}")
这里为什么有个f呢?
页:
[1]