Number类型数据是我们在python当中经常要用到的数据类型,先上一些小知识点,再上实例。。。
Number类型的定义和删除
一句话,赋值就是定义,删除要用DEL:
定义:var1 = 1 var2 = 10
删除:del var1 del var1, var2
Number中四种不同的类型
python中有四种不同的类型,各有各的用,对号要入座:
整型 - 通常被称为是整型或整数,是正或负整数,不带小数点。
长整型- 无限大小的整数,整数最后是一个大写或小写的L。
浮点型 - 浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2 = 2.5 x 102 = 250)
复数 - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
Number 类型转换
每一种数据类型都有不同应用场合,但是不同的数据类型不可以放在一起进行运算,所以要进行类型转换。常用的如下:
int(x) 将x转换为一个整数;
long(x) 将x转换为一个长整数;
float(x) 将x转换到一个浮点数;
str(x ) 将对象 x 转换为字符串;
tuple(s) 将序列 s 转换为一个元组;
list(s) 将序列 s 转换为一个列表;
chr(x) 将一个整数转换为一个字符
素数就是只能被1和本身整除的数值,这是一个关于python中数字(Number)类型的小实例。。。先上源码:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 用户输入数据
lower = int(input("输入区间最小值: "))
upper = int(input("输入区间最大值: "))
# 求解过程
for num in range(lower,upper + 1):
# 素数大于 1
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
print(num)
在上面的实例运行过程中,我们输入了两个值,一个是1,一个是20,这两个值通过input语句赋予了两个整型变量lower 和upper,结果为:lower=1、 upper=20。
下面我们来分析For循环当中的内容。。。
for num in range(lower,upper + 1):
# 素数大于 1
if num > 1:
for i in range(2,num):
if (num % i) == 0:
break
else:
print(num)
第一行给出了一个for循环,对于for循环,官方给出的结构是这样的:
for iterating_var in sequence:
statements(s)
其特点是会在一系列对象(sequence)上进行迭代(iterating_var),也就是说利用iterating_var逐一、有序地遍历对象(sequence)序列中的每一个基本元素,每遍历一个元素,就执行一次statements(s)程序。
再来看我们的第一行for循环:
for num in range(lower,upper + 1):
statements(s)
我们定义了一个数字型变量num,把num作为进行迭代的变量,而这时对象(sequence)就是函数range(lower,upper + 1)形成的有序的数据集合。
我们先了解一下range()。
range()是一个函数,具体形式是:range(start,stop[,step])
start :开始数值,可以缺省,如果不写这项,则认为start = 0 ,在我们的例子中,start =lower=1。
stop :结束的数值,这是必须要写,在我们的例子中,stop=upper + 1=21 ,那么这时问题来了,明明我们要求的是1至20之间的素数,为什么range的结束值定义21呢?那是因为在range(start,stop[,step])中,stop所定义的那个值是不执行的,只执行到stop前面的那个值,我们为了让20作为最后一个执行的值,那么定义stop就需要是20+1。
step :变化的步长,默认是1,我们的例子就是1,所以省略了 。
经过以上分析,我们可以得知range(lower,upper + 1)就是range(1,21),num依次取1、2、3。。。。20。
下面分析几个num的取值,为了看的清楚,我们在源代码中插几个print语句,整个代码如下
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 输出指定范围内的素数
# 用户输入数据
lower = int(input("输入区间最小值: "))
upper = int(input("输入区间最大值: "))
for num in range(lower,upper + 1):
print('num='+str(num))
# 素数大于 1
if num > 1:
for i in range(2,num):
print('i='+str(i))
if (num % i) == 0:
break
else:
print(num)
我们先看第一种情况:
首先lower=1,upper=1时,for num in range(lower,upper + 1):变成了for num in range(1,2):,这时2不执行,所以本次循环num只取当了一个1,当num=1,进入循环,执行print(‘num=’+str(num)),就是图上所显示的结果,打印了一个num=1,而在执行后面if num > 1:时条件不成立,下面的程序不执行。
我们再来看第二种情况:
这时lower=1,upper=2,for循环变成了for num in range(1,3):,num可以两个值:num=1和num=2,当num=1,打印出图中圈3所标的num=1后,后面的if不成立,直接越过if,又回到for循环中取下一个num,这时num=2,然后打印num=2,由于这时的num>1,所以if条件为真,可以进入内嵌的for循环,内嵌的for循环for i in range(2,num):变为for i in range(2,2):,由于range(2,2)是一个空值,所以i无法取值,则for循环不执行,直接执行for循环下面的else:后的语句,直接打印num的数值,就是2,就是图中圈5所示的结果。
这里涉及一个知识点,就是for … else语句,在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是通过 break 跳出而中断的)的情况下执行,while … else 也是一样。也就是说,for循环是正常执行完毕,只要不是通过break跳出,那么else后面的语句就会执行,由于这次我们进了内嵌的for循环,但是i没有取到值,所以下面的语句没执行,break也没执行,for循环正常结束,因此else之后的打印就执行了。
下面我们看第三种情况:
如上图所示,num可以取1、2、3三个数,1和2上面分析的一致,现在分析num=3的情况。
当num=3时,打印num=3,同时if num > 1:条件成立,进入到内嵌的for循环,内嵌的for循环for i in range(2,num):变为for i in range(2,3):这时变量i可以取到2,从而可以执行下面的语句print(‘i=’+str(i)),打印出i=2,然后再执行下一条if (num % i) == 0:,这是num=3,i=2,所以num % i不等于0,if条件不成立,break不执行,则转向执行else后面的打印语句,输出3。
第四种情况,如图:
图中1所表示的num取值1、2、3时结果和前面的一样,不再赘述,只分析num=4的情况:
当num=4,系统先打印出num=4,同时if num > 1:条件成立,进入到内嵌的for循环,内嵌的for循环for i in range(2,num):变为for i in range(2,4):这时变量i可以取到2,3两个值,当i=2时,先打印i=2,接着验证if语句,由于num=4,i=2,所以(num % i) = = 0条件是成立的,执行break,跳出本次循环,进入外层for循环,由于num只可以取到4,所以运行结束。而这时for循环是通过break跳出的,所以else后面的不执行。
如果num可以取到5,那么进入外层for循环后num取5,这时num=5,i=2,if 条件不成立,回到for循环开始进行下一次循环,num=5,i=3,if还是不成立,又回到for循环开始进行下一次循环,num=5,i=4,if还是不成立,但是i已经把能取的都取过了,循环正常结束,始终break没有执行,则转向执行else后面的打印,则打印出i=5。
下面的就不再讨论了,意思是一样的,在程序中
if (num % i) == 0:
break
完成的是把num与小于num的数值分别相除,只要有能整除的,说明num不是素数,直接退出。
这个程序就完成了。。。