[英]I'm a little confused about python logic ; and my question to the modulus in determining odd and even
我想问一下,下面的代码产生的三角形 * 只是奇数......但我很困惑......谁能解释为什么模数可以产生奇数三角形以及为什么需要 else 命令? (注意我不太了解模数)
count = 1
while True :
if count % 2 :
print ('*'*count)
count += 1
else:
count +=1
continue
if count > 10 :
break
表达式if (count % 2):
表示计数是否为奇数。
解释:
count % 2
如果 count 是偶数,将始终等于 0
如果 count 是奇数,将始终等于 1
if count % 2
当count
为奇数时分解为if 1
始终为 True
if count % 2
当count
甚至分解为if 0
始终为 False
对于你的第二个问题, else 实际上是没有必要的,它可以像这样重写
count = 1
while True:
if count % 2 :
print ('*'*count)
count += 1
if count > 10 :
break
当您考虑由*
组成的标准等边三角形时:
这就是只使用奇数的样子..
*
***
*****
*******
*********
***********
*************
这就是使用偶数和赔率的样子
*
**
***
****
*****
******
*******
在这种情况下,模数区分奇数和偶数。 在您的情况下,正如您在打印的金字塔中看到的那样,您只有奇数 - 1,3,5 等。当您有偶数时,您处于“if”部分,而在 else 部分中则为 off。
我建议您在程序中添加更多打印语句,以更详细地查看它的行为。
if 检查返回值 = 1,而不是零。 例如,如果您尝试输入 if(count % 2 == 0),您会注意到非奇数打印。
您的逻辑可能会被简化:
for i in range(1, 12, 2):
print('*' * i)
解释:
range
运算符接受一个stop
值(不包括)和一个step
值,默认为 1。这里我们传递step=2
,所以我们只迭代范围内的奇数。
出去:
*
***
*****
*******
*********
***********
模或模除法就像小学 integer 除法,您不计算小数部分,而只是计算整个部分和余数。 具体来说,模会抛出整个部分,只保留其余部分。 与之相反的是 integer 除法,它抛出余数: 9//2 == 4 #quotient
9%2 == 1 #remainder
while True:
永远这样做(或直到break
或未捕获的错误)
if (count % 2):
如果 count 为奇数则执行此操作: (count % 2)
如果奇数则为 1,如果偶数则为 0。 对于if
条件,1 将强制转换为 True,0 将强制转换为 False。
print('*'*count)
通过将字符串"*"
重复count
次来构造一个字符串,并print
它。count += 1
递增计数变量else
,则执行此操作(与先前语句的推论)
count += 1
递增计数变量if count > 10:
当 count 变量大于 10
break
退出while True
循环
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.