这个指令有什么作用?

时间:2018-01-26 00:32:18

标签: python python-3.x

我是Python的新手,我不理解以下程序中的指令:

n = int(input("enter an number : ")
b = 3
p = 1
while n > 0:
   n,r = n//2,n%2
   p* = b**r
   b = b*b
print(p)

我不明白这句话:n,r = n//2,n%2。它做了什么?

3 个答案:

答案 0 :(得分:3)

这是一项并行任务:

n, r = n // 2, n % 2

n等于n除以2使用整数除法,r等于n modulo 2。它与:

相同
t1 = n // 2
t2 = n % 2
n  = t1
r  = t2

评估右边的值,然后分配它们,推迟覆盖原始值,直到我们不再需要它们为止。

答案 1 :(得分:3)

这是元组赋值。左侧元组中的每个值都分配给右侧元组中的相应值。由于在发生任何赋值之前评估右侧的值,因此使用语句前的n值。所以该行相当于:

tmp = n
n = tmp // 2
r = tmp % 2

答案 2 :(得分:3)

大多数答案都不正确。

void ft_list_clear(struct Node *begin_list) { if(begin_list == NULL) return; ft_list_clear(begin_list->next); free(begin_list); } 是一个名为" tuple unpacking"的Pythonic概念。

a, b = c, d表示"将n,r=n//2,n%2分配给n//2"和"将n分配给n % 2"但rn,r。在元组解包中,RHS上的所有表达式都在 分配之前进行评估。因此tuplen被评估之前n//2 变异。

元组解包中操作顺序的概念证明:

n%2