Python 有没有一种方法可以这样获取输出?

Python 有没有一种方法可以这样获取输出?,python,Python,对于某些x^n,求其数字之和,直到只有一个数字为止。命令行参数的顺序: python3 file.py a b=>python file.py 2 5 输出:2ˆ5=32=3+2=5 我的输出应该如上所示,但当运行下面的代码时,它会给出类似于a=2b=8的输出 它给出: 2^8=256=2+5+6+13=2^8=13=1+3+4 有没有一种方法可以让我的代码像前面一样输出 import sys a = sys.argv[1] b = sys.argv[2] n = (int(a) ** in

对于某些x^n,求其数字之和,直到只有一个数字为止。命令行参数的顺序: python3 file.py a b=>python file.py 2 5 输出:2ˆ5=32=3+2=5

我的输出应该如上所示,但当运行下面的代码时,它会给出类似于a=2b=8的输出 它给出: 2^8=256=2+5+6+13=2^8=13=1+3+4

有没有一种方法可以让我的代码像前面一样输出

import sys

a = sys.argv[1]
b = sys.argv[2]

n = (int(a) ** int(b))

total = 0

if n < 10:
    print(f"{str(a)} ^ {str(b)} = {str(n)}")

list1 = [n]


def sum_of_digits():
    global total
    global n
    while n >= 10:
        print(f"{str(a)} ^ {str(b)} = {str(n)}", end=' = ')
        for m in str(list1[0]):
            total += int(m)
            print(m, end=" + ")
        list1.insert(0, total)
        n = total
        print(total, end=" = ")
        total = 0
    return n
导入系统 a=sys.argv[1] b=sys.argv[2] n=(整数(a)**整数(b)) 总数=0 如果n<10: 印刷体(f“{str(a)}^{str(b)}={str(n)}”) 列表1=[n] 定义数字之和() 全球总数 全球n 当n>=10时: 打印(f“{str(a)}^{str(b)}={str(n)}”,结束='=') 对于str中的m(列表1[0]): 总数+=int(m) 打印(m,end=“+”) 列表1.插入(0,总计) n=总数 打印(总计,结束=“=”) 总数=0 返回n 递归函数调用
a
b
将上述函数保存在test.py文件中

from test import *
sum_of_digits(2,10)
获取
7的输出

import sys

a = sys.argv[1]
b = sys.argv[2]

def sum_of_digits(a, b):
    # Use casts as we can't guarantee the input data type
    n = int(a)**int(b)
    res_list = [str(a), '^', str(b), ' = ', str(n)]
    while len([x for x in str(n)]) > 1:
        current = [int(x) for x in str(n)]
        n = sum(current)
        res_list.append(' = ')
        res_list.extend(' + '.join(str(x) for x in current))
        res_list.append(' = ')
        res_list.extend([x for x in str(n)])
    print(''.join(res_list))

sum_of_digits(a, b)

试着更清楚地思考你的逻辑。特别是,用简单的英语单词写下您希望程序如何进行的每个步骤,然后对照规范检查代码。这里特别重要的是,您能够解释为什么在
print
调用中使用
end='='
,并解释您希望这样做的原因,以及在什么情况下这样做是个好主意。尽可能避免全局调用。主程序与其函数之间的首选通信机制是通过输入参数和返回值。试试这个:
a=20;b=17;打印(sum([int(c)for c in str(a**b)])
并尝试了解发生了什么。list1
的用途是什么,您是否尝试过调试器或打印语句SOP知道他可以编写
a**b
,因此您答案的第一部分完全没有根据。此外,您还有一个自制的整数除法版本,在Python2中它只是
n/10
,而在Python3中它是
n//10
永远不要调用您的文件
test
,总有一天会给您带来很大的麻烦,test可能是一个内置模块或函数或shell命令
from test import *
sum_of_digits(2,10)
import sys

a = sys.argv[1]
b = sys.argv[2]

def sum_of_digits(a, b):
    # Use casts as we can't guarantee the input data type
    n = int(a)**int(b)
    res_list = [str(a), '^', str(b), ' = ', str(n)]
    while len([x for x in str(n)]) > 1:
        current = [int(x) for x in str(n)]
        n = sum(current)
        res_list.append(' = ')
        res_list.extend(' + '.join(str(x) for x in current))
        res_list.append(' = ')
        res_list.extend([x for x in str(n)])
    print(''.join(res_list))

sum_of_digits(a, b)
>>> sum_of_digits('2', '8')
2^8 = 256 = 2 + 5 + 6 = 13 = 1 + 3 = 4