【问题标题】:finding emrips with python, what am i doing wrong?用python找到emrips,我做错了什么?
【发布时间】:2017-05-10 13:52:51
【问题描述】:

Emirp 是一个素数,其反转也是一个素数。为了 例如,17 是素数,71 是素数,所以 17 和 71 是 emirps。 编写一个程序,打印出前 N 个 emirp,每行五个。

计算前 N 个 emirp(质数,倒写)数,其中 N 是用户作为输入提供的正数。

实现细节

您需要使用 2 个函数(必须编写)。

isPrime(value) # 如果 value 是素数,则返回 true。逆转 (value) # 返回值的倒数(即如果值为 35, 返回 53)。您应该将这些功能与逻辑结合使用 在程序的主要部分,执行 N 的计算 emirps 并根据下面的截图打印出来。

您的程序的总体大纲如下:

第 1 步:向用户询问正数(输入验证) 第 2 步: 将变量 Test 初始化为 2 第 3 步:而 # emirps found is less 比输入: 使用 Test 调用 isPrime,然后使用 reverse(Test) 再次调用它。 如果两者都是素数,则打印并增加找到的 emirp 数。 Test++ Hint - 反转数字,把它变成一个字符串,然后 反转字符串。然后把它转回int!

我的代码:

n = 0
count = 0
i = 1
def isPrime(value):
    test = 2
    count = 0
    while(test < value):
        if( value % test == 0):
            count+=count
            test+=test
    if(count == 0):
        return 1
    else:
        return 0

def reverse(value):
    reverse = 0
    while(value > 0):
        reverse = reverse * 10 + (value % 10)
        value = value / 10
    return reverse

n = float(input("Please enter a positive number: "))

while(count < n):
    i+=i;
    if(isPrime(i)):
        if(isPrime(reverse(i))):
                print("i" + "\n")
                count+=count
        if((count % (5)) == 0 ):
                print("\n")

哪里出错了?

已更新代码但仍未运行:

    n = 0
    count = 0
    i = 1
    def isPrime(value):
     test = 2
    while(test < value):
        if( value % test != 0):
            test +=1
        else:
            return 0

def reverse(value):
    return int(str(value)[::-1])

i = int(input("Please enter a positive number: "))
count = 0
while(count < 5):
    if(isPrime(i)):
        if(isPrime(reverse(i))):
                print(str(i) + "\n")
                count += 1
                i += 1
        else:
            i += 1
    else:
        i +=1

【问题讨论】:

  • 当您厌倦了自己的作业时,这里不是您倾倒作业的地方。
  • 你怎么知道它没有运行?请提供更多信息
  • 您更新后的 isPrime 永远不会返回 1。您遗漏了最后一个返回语句。
  • 我更新并运行代码,但是当我输入“1”时,我收到 1、3、5,7。代码应打印前 1 个 emrip。我不确定它在打印什么
  • 它从 imput int 打印前五个 emirp。我以为你想生成这个。如果您只想打印第一个 emirp,您可以轻松调整代码。

标签: python


【解决方案1】:

您的代码存在很多问题。我更改了函数isPrime。这里不需要count,如果你想在每个循环中将test增加1,请使用test +=1

def isPrime(value):
test = 2
while(test < value):
    if( value % test != 0):
        test +=1
    else:
        return 0
return 1

有一种简单的方法来反转数字,方法是将value 反转为字符串并将其转换为整数:

def reverse(value):
    return int(str(value)[::-1])

您必须将输入分配给i。代码中的n 是一个常量5。在任何情况下,您都必须将 i 加一,如果 i 仅是 emirp,则将计数加一:

i = int(input("Please enter a positive number: "))
count = 0
while(count < 5):  
    if(isPrime(i)):
        if(isPrime(reverse(i))):
                print(str(i) + "\n")
                count += 1
                i += 1
        else:
            i += 1
    else:
        i +=1

【讨论】:

  • 您的第二个 isPrime 永远不会返回 1。您遗漏了最后一条语句。
  • 是的,它运行良好,并且您的更新也可以正确缩进。
猜你喜欢
  • 2017-09-29
  • 2016-07-18
  • 1970-01-01
  • 2014-11-06
  • 2021-11-28
  • 2011-06-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-23
相关资源
最近更新 更多