Python和社区的新手。在不同的练习中,我很难找到解决方案。当使用end=',‘时,我需要移除尾随。
任何智慧或指导都是非常感谢的!
low = 10000
up = 10050
for num in range(low, up + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
print(num,end=',')发布于 2022-06-29 03:06:59
看起来你在尝试在给定的范围内打印素数。可以说,将素数的发现与打印相结合是造成问题的原因。通过适当的分解,这个问题就不存在了:
def generate_primes(low, up):
for num in range(max(low, 2), up+1):
if all(num % i for i in range(2, num)):
yield num
print(*generate_primes(low, up), sep=',')作为一个积极的副作用,您现在可以在不需要打印的程序的其他部分重用素生成器。
还请注意,检查到num的所有数字是不必要的-如果数字是复合的,其中一个因素将小于或等于sqrt(num)。因此,更快的质数发生器应该是这样的:
def generate_primes(low, up):
for num in range(max(low, 2), up+1):
if all(num % i for i in range(2, int(num**0.5 + 1))):
yield num发布于 2022-06-29 03:07:51
试试这个:
low = 10000
up = 10050
nums = []
for num in range(low, up + 1):
if num > 1:
for i in range(2, num):
if (num % i) == 0:
break
else:
nums.append(str(num))
a = ",".join(nums)
print(a)本质上,只需添加将输出到列表中的所有元素,然后使用联接函数将它们转换为字符串并打印出来。
发布于 2022-06-29 03:24:59
解决方案
import sys
low = 10000
up = 10050
firstValuePrinted = 0
for rootIndex, num in enumerate(range(low, up + 1)):
if num > 1:
for subIndex, i in enumerate(range(2, num)):
if (num % i) == 0:
break
else:
print("", end = "," if firstValuePrinted==1 else "")
firstValuePrinted = 1
print(num, end = "")
sys.stdout.flush()解释
因为我们不能确定循环将退出哪个数字num,所以我们不能确切地知道结束条件。但我们可以算出起始号码。
因此,根据这个逻辑,我们实际上是在开始时打印",“,而不是打印”,“在最后,我们使用一个变量来维护它,如果我们在上面的代码中打印了由firstValuePrinted完成的任何值。
调用sys.stdout.flush()以确保控制台立即打印输出,而不是等待程序完成。
注意:不要忘记在文件开始时使用import sys。
与其他答案相比的好处
如果您想要连续输出num变量,以便不必等待在写入值之前计算所有数字,这种类型的实现是非常有用的。
如果将所有值放入数组中,然后打印,则实际上需要大量内存来存储所有数字(如果low和up很大),并且控制台将等到for loop完成后才执行print命令。
特别是在处理素数时,如果low和up变量相距很远,如low=0和up=1000000,则需要很长时间才能打印输出。尽管有了上面的实现,它将在计算时打印出来。同时也确保没有额外的",“是打印在末尾。
https://stackoverflow.com/questions/72795245
复制相似问题