为什么if循环在这个python程序上不起作用?

2024-09-19 23:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

在添加两个数字时,我想检查进位发生了多少次—— 例如: 输入 数字1:451 数字2:349 输出 2. 说明:

从右向左添加'num 1'和'num 2'将导致2次进位,因为(1+9)是10。1被携带,(5+4=1)是10,再次携带1。因此返回2

def NumberOfCarries(num1, num2):
    count = 0
    l = str(num1)
    i = 0
    if i <= len(l):
        n = num1 % 10
        n2 = num2 % 10
        sum = n + n2
        print(f" num is {num1} and {num2} n1 is {n} and n2 is {n2} and sum is {sum}")
        if sum > 9:
            count += 1
            num1 = num1 // 10
            num2 = num2 // 10
            i += 1
        else:
            num1 = num1 // 10
            num2 = num2 // 10
            i += 1

        return count


num1 = int(input("> "))
num2 = int(input("> "))
print(NumberOfCarries(num1, num2))

在这里,循环不起作用,只有一次和生成。我想为numb1中的每个数字生成。我累了一阵子。请帮帮我,我是新手


Tags: andinputifisdefcount数字num
1条回答
网友
1楼 · 发布于 2024-09-19 23:29:31

我认为你试图这样做:

def number_of_carries(num1, num2):
    amplitude_num1 = len(str(num1))
    amplitude_num2 = len(str(num2))
    count = 0
    i = 0
    carry_over = 0
    while i < amplitude_num1 or i < amplitude_num2:
        n = num1 % 10
        n2 = num2 % 10
        sum_of_digits = n + n2 + carry_over
        print(f" num is {num1} and {num2}, n1 is {n} and n2 is {n2}, carry digit from previous addition is {carry_over}, sum is {sum_of_digits}")
        if sum_of_digits > 9:
            count += 1
            carry_over = 1
        else:
            carry_over = 0

        num1 //= 10
        num2 //= 10
        i += 1
    
    return count

num1 = int(input("> "))
num2 = int(input("> "))
print(number_of_carries(num1, num2))

但是,如果您希望有一个可以接受2个以上数字的解决方案,则可以修改为:

def number_of_carries(numbers):
    amplitude = max(len(str(x)) for x in numbers)
    count = 0
    i = 0
    carry_over = 0
    for i in range(amplitude):
        current_numbers = tuple(x % 10 for x in numbers)
        sum_of_digits = sum(current_numbers) + carry_over
        print(
            f" numbers are {' '.join(str(x) for x in numbers)}, "
            f"current_numbers are {' '.join(str(x) for x in current_numbers)}, "
            f"carry digit from previous addition is {carry_over}, sum is {sum_of_digits}"
        )
        if sum_of_digits > 9:
            count += 1

        carry_over = sum_of_digits // 10
        numbers = tuple(x // 10 for x in numbers)
    
    return count

input_numbers = (198, 2583, 35)
print(number_of_carries(input_numbers))

相关问题 更多 >