首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何移除尾随的尾尾=‘,’

如何移除尾随的尾尾=‘,’
EN

Stack Overflow用户
提问于 2022-06-29 02:49:54
回答 3查看 76关注 0票数 0

Python和社区的新手。在不同的练习中,我很难找到解决方案。当使用end=',‘时,我需要移除尾随。

任何智慧或指导都是非常感谢的!

代码语言:javascript
运行
复制
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=',')
EN

回答 3

Stack Overflow用户

发布于 2022-06-29 03:06:59

看起来你在尝试在给定的范围内打印素数。可以说,将素数的发现与打印相结合是造成问题的原因。通过适当的分解,这个问题就不存在了:

代码语言:javascript
运行
复制
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)。因此,更快的质数发生器应该是这样的:

代码语言:javascript
运行
复制
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
票数 1
EN

Stack Overflow用户

发布于 2022-06-29 03:07:51

试试这个:

代码语言:javascript
运行
复制
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)

本质上,只需添加将输出到列表中的所有元素,然后使用联接函数将它们转换为字符串并打印出来。

票数 1
EN

Stack Overflow用户

发布于 2022-06-29 03:24:59

解决方案

代码语言:javascript
运行
复制
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变量,以便不必等待在写入值之前计算所有数字,这种类型的实现是非常有用的。

如果将所有值放入数组中,然后打印,则实际上需要大量内存来存储所有数字(如果lowup很大),并且控制台将等到for loop完成后才执行print命令。

特别是在处理素数时,如果lowup变量相距很远,如low=0up=1000000,则需要很长时间才能打印输出。尽管有了上面的实现,它将在计算时打印出来。同时也确保没有额外的",“是打印在末尾。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72795245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档