100个python算法超详细讲解:求出符合要求的素数

本文详细介绍了如何使用Python编程找到大于特定整数n的k个连续素数,并从infile.txt文件中读取多组n和k值,计算结果并保存到outfile.txt。核心算法包括素数判断函数isPrime()和求素数数组的num()函数,以及文件读写操作。程序执行示例展示了输入17和5得到的结果,并解释了Python文件操作的相关知识。
摘要由CSDN通过智能技术生成
完整版下载超详细Python算法案例讲解100例.zip-Python文档类资源-CSDN下载

 1.问题描述
编写程序实现将大于某个整数n且紧靠n的k个素数存入某个数组中,
同时实现从infile.txt文件中读取10对n和k的值,分别求出符合要求的素数,
并将结果保存到outfile.txt文件中。
2.问题分析
解决该问题首先要能够判断出某个数是否为素数,同时还应该熟练掌
握Python语言中读写文件的相关知识。判断某个数是否为素数的方法在第5
章中已经详细介绍过了,这里对Python语言的文件概念进行简单介绍。
文件指的是存储在外部介质中的数据的集合。运行程序时,通常的做
法是将数据保存在变量中,但是当程序结束并关闭时,数据也会随着丢
失。为了保存运行程序时产生的数据,最好的做法是通过文件的形式来保
存,当程序运行结束后,数据仍然在文件中,不会丢失。
3.算法设计
该问题可根据题意直接编程,程序中应该能够判断某个数是否为素
数,该功能可通过定义函数来实现,同时也可以通过定义相应功能的函数
来实现对文件的操作。
4.确定程序框架
(1)判断是否为素数
定义函数isPrime(),形式参数为n,当函数返回值为0时,表示n不是素
数;当函数返回值为1时,则表示n为素数。

# 判断素数
def isPrime(n):
for i in range(2, n):
if n % i == 0:
return False # n不是素数
return True # n是素数

(2)求出紧靠n的k个素数,并存放到数组中
定义函数num(),其形参为n、k和数组array。

# 求出紧靠n的k个素数
def num(n, k, array):
i, n = 0, n + 1
while k > 0:
if isPrime(n): # 调用函数isPrime()判断n是否为素数
array[i] = n # 若n是素数,则将n存入数组array中
i += 1
k -= 1
n += 1

(3)实现对文件的操作
定义filedata()函数,实现对文件的操作。在该函数中,实现了对
infile.txt文件的读操作,从infile.txt文件中读取10对n和k的值,再调用num()
函数分别求出符合要求的素数,最后将结果保存到outfile.txt文件中。因为
outfile.txt文件不存在,因此先生成outfile.txt文件,再对其进行写操作。
filedata()函数代码如下:

# 文件操作
def filedata():
array = [0] * 1000
rf = open('infile.txt', 'r') # 读infile.txt文件
wf = open('outfile.txt', 'w') # 写outfile.txt文件
# 从infile.txt文件中读取10对(n,k)值
for i in range(10):
[n, k] = rf.readline().split()
n = int(n)
k = int(k)
num(n, k, array) # 调用num()函数
for n in range(k):
print('%d ' % array[n], file=wf, end='') # 写文件
print(file=wf)
rf.close() # 关闭infile.txt文件
wf.close() # 关闭outfile.txt文件

程序的流程图如图12.13所示。

 5.完整的程序
根据上面的分析,编写完整的程序如下:        

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 求出符合要求的素数
# 判断素数
def isPrime(n):
for i in range(2, n):
if n % i == 0:
return False # n不是素数
return True # n是素数
# 求出紧靠n的k个素数
def num(n, k, array):
i, n = 0, n + 1
while k > 0:
if isPrime(n): # 调用函数isPrime()判断n是否为素数
array[i] = n # 若n是素数,则将n存入数组array中
i += 1
k -= 1
n += 1
# 文件操作
def filedata():
array = [0] * 1000
rf = open('infile.txt', 'r') # 读infile.txt文件
wf = open('outfile.txt', 'w') # 写outfile.txt文件
# 从infile.txt文件中读取10对(n,k)值
for i in range(10):
[n, k] = rf.readline().split()
n = int(n)
k = int(k)
num(n, k, array) # 调用num()函数
for n in range(k):
print('%d ' % array[n], file=wf, end='') # 写文件
print(file=wf)
rf.close() # 关闭infile.txt文件
wf.close() # 关闭outfile.txt文件
if __name__ == '__main__':
array = [0] * 1000
print('输入整数n和k:')
n, k = map(int, input().split())
num(n, k, array) # 调用num()函数
for n in range(k):
print(array[n], end=' ') # 打印出array数组中的每个值
print('\n')
filedata() # 调用filedata()函数

在运行程序之前,一定要先创建infile.txt文件,否则将会报错。
6.运行结果
在PyCharm下运行程序,当输入整数n=17,k=5时,打印出紧靠17的5
个素数:19、23、29、31和37,如图12.14所示,
同时,程序还从infile.txt文件中读取了10对n和k值,infile.txt文件的图
标如图12.15所示,其保存的10对n和k的值如图12.16所示。对这10对n和k
的值分别求出符合要求的素数,并存放在outfile.txt文件中。outfile.txt文件
由程序来生成,其图标如图12.17所示,文件内容如图12.18所示。

7.补充知识点
该问题涉及Python语言中文件的内容。下面对Python语言的文件操作
进行简单介绍。
(1)文件的打开
在Python中,使用open()函数来打开文件。该函数的定义如下:
open(file_name [,access_mode][,buffering])
参数说明:
·file_name:将要打开的文件名,是一个字符串。
·access_mode:指打开文件的模式,对应有只读、只写、追加等。
access_mode变量值不是必须要有的,默认的文件访问模式是只读(r)。
·buffering:文件缓冲区,如果buffering的值为0,就不会有寄存;如果
buffering的值为1,访问文件时就会有寄存行;如果将buffering的值设为大
于1的整数,表示这就是寄存区的缓冲大小;如果buffering的值为负数,表
示寄存区的缓冲大小就是系统默认的值。
open()函数返回一个文件(File)对象。File对象代表计算机中的一个
文件。
(2)文件的打开模式
Pyhon语言中的文件打开模式如表12.2所示。

 在使用open()函数时,指定文件操作模式为读模式与什么模式都不指
定的效果一样。使用读模式只能读取文件内容;使用写模式可以向文件写
入内容;+参数可以用到任何其他模式中,表示同时允许读写操作;b参数
表示可以用来读取一个二进制文件。
(3)文件的读写
在Python的文件操作中,我们使用read()函数来读取文件内容,使用
write()函数来向文件中写入内容。
open()函数返回的是一个File对象,有了File对象,就能进行后续的读
写操作了。我们使用File对象的read()函数将文件的内容读取为一个字符串
值。read()函数从一个打开的文件中读取字符串。Python中的字符串不仅仅
是简单的字符串(字母、数字、汉字等),也可以是二进制数据。read()函
数的定义如下:
fileObject.read([count]);
说明: fileObject为open()函数返回的File对象,count参数是从已经打
开的文件中读取的字节数,该函数从文件的开头处开始读入。如果没有
count参数,该函数就会尝试尽可能地多读取内容,有可能一直读取到文件
末尾。
在Python中,使用write()函数向一个文件中写入内容数据。write()函数
可以将任何字符串写入一个打开的文件,它不会在字符串的结尾添加换行
符(‘\n’)。write()函数的定义如下:
fileObject.write(string);
说明: fileObject是open()函数返回的File对象,string参数是将要写入
文件的内容。write()函数返回写入文件的字符串的长度。
(4)文件的关闭
对文件操作完成之后,需要调用文件的close()方法来关闭文件。一般
情况下,一个文件对象在退出程序后会自动关闭,但是为了安全起见,还
是要显式地调用close()方法来关闭文件,以避免出现不必要的异常。
close()函数的定义如下:
fileObject.close();
说明: fileObject是open()函数返回的File对象。
当我们对一个文件进行修改时,在操作完成后,一定要记得关闭文
件,因为写入的数据可能被缓存,如果程序或系统因为某些原因而崩溃,
被缓存部分的数据就不会写入文件了。
(5)文件操作的其他常用函数
下面介绍几个文件操作中常用的其他函数。
·fileObject.readline():该函数用于读入文件的一行到字符串中。
·fileObject.readlines():该函数用于将整个文件按行读入到列表中。
·fileObject.writeLines():该函数用于向文件中写入一个列表。
实例代码:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 文件操作
if __name__ == "__main__":
# 以只读方式打开test.txt文件
file1 = open("test.txt", 'r', encoding='utf-8')
print("test.txt的文件内容:", file1.read())
# 以写入方式打开test1.txt文件
file2 = open("test1.txt", 'w+', encoding='utf-8')
file2.write("你好") # 将test.txt文件的内容写入test1.txt中
file2 = open("test1.txt", 'r', encoding='utf-8')
print("test1.txt的文件内容为:", file2.read())
list_str = ["天国虽美","没有了你","万杯觥筹","只不过是提醒寂寞罢了"]
# 以写入方式打开test2.txt文件
file3 = open("test2.txt", 'w+', encoding='utf-8')
file3.writelines(list_str)
file3 = open("test2.txt", 'r', encoding='utf-8')
print("test2.txt的文件内容为:", file3.readlines())
# 关闭文件
file1.close()
file2.close()
file3.close()

在PyCharm下运行程序,结果如图12.19所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lee达森

创作不易,感谢打赏!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值