python - 以最少的行和列打印列表
问题描述
寻找素数的代码:
def findPrimes(n):
prime_list = list()
for number in range(1, n + 1):
prime = True
for i in range(2, number):
if(number % i == 0):
prime = False
if prime:
prime_list.append(number)
return prime_list
整齐地制作素数列表的代码:
def displayPrimes(number, rows = 50):
table_list = [[] for _ in range(rows)]
primes = findPrimes(number)
for index, item in enumerate(primes):
row_index = index % rows
table_list[row_index].append("%6d" % item)
table_str = "\n".join(["\t".join(i) for i in table_list])
return table_str
print(displayPrimes(4027))
寻找孪生素数的代码:
def findTwinPrimes(n):
prime = [True for i in range(n + 2)]
p = 2
while (p * p <= n + 1):
# If prime[p] is not changed,
# then it is a prime
if (prime[p] == True):
# Update all multiples of p
for i in range(p * 2, n + 2, p):
prime[i] = False
p += 1
# check twin prime numbers
# display the twin prime numbers
for p in range(2, n-1):
if prime[p] and prime[p + 2]:
print("(",p,",", (p + 2), ")" ,end='')
print(findTwinPrimes(4027))
使孪生素数显示整齐的代码。问题是它说:
TypeError:“函数”对象不可迭代
因为我在用于显示素数的代码中有相同的数据,所以这不起作用,它只是整齐地显示列表?
def displayTwinPrimes(number, rows = 52):
table_list = [[] for _ in range(rows)]
twinPrimes = findTwinPrimes
for index, item in enumerate(twinPrimes):
row_index = index % rows
table_list[row_index].append("%6d" % item)
table_str = "\n".join(["\t".join(i) for i in table_list])
return table_str
print(displayTwinPrimes(4027))
解决方案
您需要重构代码以查找孪生数,如下所示。
此方法返回孪生素数元组列表,即[(3,5),(5,7), ...]
def findTwinPrimes(n):
prime = [True for i in range(n + 2)]
p = 2
twin_primes = []
while (p * p <= n + 1):
# If prime[p] is not changed,
# then it is a prime
if (prime[p] == True):
# Update all multiples of p
for i in range(p * 2, n + 2, p):
prime[i] = False
p += 1
# check twin prime numbers
# display the twin prime numbers
for p in range(2, n - 1):
if prime[p] and prime[p + 2]:
twin_primes.append((p, (p + 2)))
print("(", p, ",", (p + 2), ")", end='')
return twin_primes # this returns twin_primes as list of tuples i.e [(3,5),(5,7), ...]
您还需要翻新您的displayTwinPrimes
方法,如下所示:
def displayTwinPrimes(number, rows = 52):
table_list = [[] for _ in range(rows)]
twinPrimes = findTwinPrimes(number)
for index, item in enumerate(twinPrimes):
row_index = index % rows
table_list[row_index].append(item)
table_str = "\n".join(["\t".join(["(%6d, %6d)" % (p[0],p[1]) for p in i]) for i in table_list])
return table_str
推荐阅读
- ios - 是否可以创建一个可以将 UIView 或 UIButton 作为参数的通用函数?
- wordpress - 我怎样才能制作wordpress作者页面模板
- python-3.x - 为什么当我运行我的脚本时,下载的图像文件有零字节并且我收到属性错误?
- javascript - Ionic 4 Fab List 默认打开
- flutter - 在 null 上调用了方法“[]”。扑
- makefile - 为什么即使我在makefile中编写它,当我执行make时也没有-g选项(gdb)
- embedded-linux - 使用 yocto 层的配方或类而不继承所有 bbappends
- vuejs2 - 如何在 v-money 组件中使用 vee-validate 进行验证
- java - solr启动时如何绕过身份验证
- network-programming - 网络上各种大小的连续消息