程序员的知识教程库

网站首页 > 教程分享 正文

Python数字编程第一章练习(上)(python数字代码)

henian88 2024-09-11 03:45:50 教程分享 54 ℃ 0 评论

1.5.1 计算整数因子

当一个非零整数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()函 数检查输入的数是否是整数,以确保输入有效。如果输入的数不 是正整数,程序将输出一个用户友好的指令,而不是一长串的错误信息。

1.5.2 生成乘法表

考虑三个数字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()介绍完毕

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表