我写了一个代码,它确定了小于或等于1000 000的自然数是完全的数字对数字不变量(它们可以写成它们的数字之和,每一个数字的幂等于这个数字;参见https://en.wikipedia.org/wiki/Perfect_digit-to-digit_invariant)并以这种形式表示出来。
def f(n):
y = str(n)
l = len(y)
list = []
for i in range(0,l):
list.append(int(y[i]))
list2 = []
for i in list:
list2.append(i**i)
return sum(list2)
N = 10**6
n = np.linspace(1,N,N,dtype=int)
list = []
for i in n:
if i == f(i):
list.append(i)
list = np.array(list)
list2 = []
for i in list:
list2.append(str(i))
for i in list2:
for j in range(0,len(i)-1):
print(i[j],'^',i[j],'+')
print(i[-1],'^',i[-1],'=',int(i))
print('----------')
运行此代码的输出为:
1 ^ 1 = 1
----------
3 ^ 3 +
4 ^ 4 +
3 ^ 3 +
5 ^ 5 = 3435
----------
代码给出了正确的答案,但我希望表达式3^3+4^4+3^3+5^5=3435出现在一行。有办法吗?
最佳答案
print()
语句默认情况下也会打印换行符。要禁止该行为并继续在同一行上打印,请添加end=''
参数,如下所示:
for i in list2:
for j in range(0, len(i)-1):
print(i[j],'^',i[j],'+', end='')
print(i[-1],'^',i[-1],'=',int(i))
print('----------')
或者,更具体地说,您可以通过使用字符串组合并按如下格式设置输出来替换内部循环:
for i in list2:
print(' + '.join(['{0:}^{0:}'.format(x) for x in i]) + ' = {}'.format(i))
print('----------')