网站首页 > 教程分享 正文
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()介绍完毕
猜你喜欢
- 2024-09-11 「每日一练」巧用python计算猴子吃桃问题
- 2024-09-11 python初学笔记(python入门教程(非常详细)书)
- 2024-09-11 3种python的编码形式制作九九乘法口诀表
- 2024-09-11 Python 之 计算单代码的执行时间(python代码执行结果)
- 2024-09-11 Python入门编程题库35--计算三个随机数的立方和
- 2024-09-11 Python入门编程题库35--计算三个random整数的立方和
- 2024-09-11 Python 0-5 循环语句和列表元组(python循环语句用法)
- 2024-09-11 第一行Python代码之KO面试官(python面试第68招)
- 2024-09-11 1-6,0基础学Python创建list,Python中布尔类型按照索引访问list
- 2024-09-11 python 知识3(python技巧总结60)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- css导航条 (66)
- sqlinsert (63)
- js提交表单 (60)
- param (62)
- parentelement (65)
- jquery分享 (62)
- check约束 (64)
- curl_init (68)
- sql if语句 (69)
- import (66)
- chmod文件夹 (71)
- clearinterval (71)
- pythonrange (62)
- 数组长度 (61)
- javafx (59)
- 全局消息钩子 (64)
- sort排序 (62)
- jdbc (69)
- php网页源码 (59)
- assert h (69)
- httpclientjar (60)
- postgresql conf (59)
- winform开发 (59)
- mysql数字类型 (71)
- drawimage (61)
本文暂时没有评论,来添加一个吧(●'◡'●)