0

我是一名新程序员,所以这可能效率不高,但我发现这个问题对我来说很好奇。查看下面的函数 countDigitsCheck 并注意 if 语句正在检查变量 count_check_one 和变量 count_check_two 是否 == 1。如果它们都是 == 1,则它乘以 a * b。您可以在输出中看到 count_check_one == 3(不是 1)并且 count_check_two == 1。由于其中一个整数是 == 3,因此两个整数不应相乘。但是,您会在输出中注意到整数乘以 900。我知道如果我在 if 语句中使用“or”而不是“and”,我会期待这种行为,但当我使用“and”时不会。请帮助我理解为什么它们仍在成倍增加。谢谢。

def karatsubaAlgorithm(x,y):
  return(countDigitsCheck(x,y))

def countDigitsCheck(one, two):
  count_check_one = countDigits(one)
  count_check_two = countDigits(two)
  a = one
  b = two
  print(count_check_one)
  print(count_check_two)
  if count_check_one and count_check_two == 1:
    answer = a * b
    return(answer)

def countDigits(number):
  Number = number
  Count = 0
  while(Number > 0):
    Number = Number // 10
    Count = Count + 1
  return(Count)

check_function = karatsubaAlgorithm(100,9)
print(check_function)


OUTPUT:
3
1
900
4

1 回答 1

0

您的 if 语句本质上是if (count_check_one) and (count_check_two == 1): 这意味着只要 count_check_one 的值不为 0,第一个条件就会为真,因为在 Python 中,除 0 之外的每个整数都为真。如果要检查 count_check_one 和 count_check_two 是否都等于 1 ,你将不得不做if count_check_one == 1 and count_check_two == 1:。这将检查两个变量是否为 1。

于 2020-05-04T02:03:57.427 回答