繁体   English   中英

我对 python 逻辑有点困惑; 以及我对确定奇数和偶数的模数的问题

[英]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 % 2count为奇数时分解为if 1始终为 True

  • if count % 2count甚至分解为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM