当一个非零整数a除以另一个非零整数b,余数为0时,我们就认为b是a的因数。下边编写一个程序来判断一个数是否是另一个数的因数
>>> def is_factor(a, b): if b % a == 0: return True else: return False%用来计算余数,假设我们要解决4是不是1024的因数我们可以这样做
>>> is_factor(4, 1024) True那么对于一个正整数n,如何找到它的所有正因子?对于1~n之间的所有整数,我们检查除以该整数之后的余数,如果余数为0,那么这个数字就是n的一个因子。我们使用range函数来编写一个程序,他将遍历1~n之间的每个数字。
我们首先来看看range()函数是如何工作的,典型用法如下:
>>> for i in range(1, 4): print(i) 1 2 3此处我们可以看到,range(a, b)传入了两个参数,第一个参数为起始值,第二个参数为截至值,并且需要注意实际循环范围应该是a~(b-1),再说明一下,range()只接受整数作为参数。
假设我们不指定range()函数的起始值,这种情况下,默认起始值为0
>>> for i in range(3): print(i) 0 1 2由range()函数产生的两个数字之间的差称为步长(step value),默认情况下(也就是不传入这个参数的情况),步长step = 1,假如要定义一个其他的步长,只需要传入第三个参数step即可(此时需要指定起始值),例如,输入10以内的奇数,
>>> for i in range(1, 10, 2): print(i) 1 3 5 7 9了解了range()函数是如何工作的,接下来我们回到刚刚的求一个整数的所有正因子问题,这个程序比较长,因此我们需要在IDLE编辑器中编写,而非IDLE交互界面。首先我们使用三个引号(')来注释代码,这些注释内容并不会被Python作为程序执行。
''' Find the factors of an integer ''' def factors(b): # ① for i in range(1, b + 1): if b % i == 0: print(i) if __name__ == '__main__': b = input('Your Number Please: ') b = float(b) if b > 0 and b.is_integer(): # ② factors(int(b)) else: print('Please enter a positive integer')factors()函数定义了一个for循环,在①处,该循环对1~(b+1)之间的每个整数迭代一次。这里我们需要迭代到整数b,故此截至值被设置为b+1,对于每个整数i,程序检查输入数字b除以i的余数是否为0,如果余数为0,就输出i
运行此程序,结果如下:
Your Number Please: 10.0 1 2 5 10如果输入的数字是非整数,程序会输出一条错误信息,并要求你输入一个正整数
Your Number Please: 12.1 Please enter a positive integer在这个例子中,我们通过检查程序的无效输入,使程序对用户更加友好。因为我们的程序仅用于查找正整数的因子,所以在②处检查输入的数字是否大于0并且 使用is_integer()函 数检查输入的数是否是整数,以确保输入有效。如果输入的数不 是正整数,程序将输出一个用户友好的指令,而不是一长串的错误信息。
考虑三个数字a、b和n,其中n是整数,使得 a * n = b。代表的意思为b是a的第n个倍数,例如,4是2的第二个倍数,1024是2的第512个倍数。
一个数字的乘法表会给出该数字的所有整数,例如下面给出了2的乘法表(前三个倍数)
2 * 1 = 2
2 * 2 = 4
2 * 3 = 6
接下来我们就要写任何一个整数的最大到乘数为10的乘法表。在这个程序中,我们将会使用format()函数与print()函数配合,使输出看起来更加友好,更加可读。先来简单进行介绍:
format()函数可以插入标签并对其进行设置,以获得一个友好的可读的字符串输出,例如我们在水果店买了一些水果,我们已知水果名称,要打印出完整的一句话,我们可以这样做:
>>> item1 = 'apple' >>> item2 = 'orange' >>> item3 = 'grape' >>> print('At the grocery store, I bought some {0} and {1} and {2}'.format(item1, item2, item3)) At the grocery store, I bought some apple and orange and grape首先,我们创建了三个标签(item,item2,item3),每个标签指代不同的字符串(apple,orange,grape)。然后在print()函数中,我们输入字符串,其中包含了三个占位符,分别为{0},{1},{2},接下来是format(),它的参数为之前创建的3个标签,告诉Python按照给定的顺序填充占位符,因此{0}被替换为apple,{1}被替换为orange,依此类推。
并不一定要传入标签,我们也可以直接传入值
>>> print('Number 1: {0} Number 2: {1}'.format(1, 3.14)) Number 1: 1 Number 2: 3.14请注意,占位符的数量必须和format传入的值数量相等。
了解了format的工作原理后,接下来我们看看一个整数乘法表的生成。
''' Multiplication table printer ''' def multi_table(a): for i in range(1, 11): print('{0} × {1} = {2}'.format(a, i, a * i) ) if __name__ == '__main__': a = input('Enter a number: ') multi_table(float(a))mult_table()函数主要完成求输入参数a的乘法表,具体实现为,定义一个循环,输出a*(1~10)的乘法表,然后用format()进行格式化输出,我们输入一个数字,打印乘法表
Enter a number: 5 5.0 × 1 = 5.0 5.0 × 2 = 10.0 5.0 × 3 = 15.0 5.0 × 4 = 20.0 5.0 × 5 = 25.0 5.0 × 6 = 30.0 5.0 × 7 = 35.0 5.0 × 8 = 40.0 5.0 × 9 = 45.0 5.0 × 10 = 50.0上面这张表就是我们利用.format()输出的清晰可观统一的乘法表。
我们可以使用format()函数来进一步控制数字的输出显示,比如一个小数点后位数比较多的浮点数,我们只希望保留两位:
>>> '{0:.2f}'.format(3.141592) '3.14'请注意,对于浮点数而言,如果我们指定了小数位数的话,超出的位数会做四舍五入
>>> '{0:.2f}'.format(3.14592) '3.15'对于一个整数,如果指定了小数位数,则会进行补零操作
>>> '{0:.2f}'.format(1) '1.00'至此,乘法表打印完毕,.format()介绍完毕
| 留言与评论(共有 0 条评论) “” |