Python输出包含3的数字

打印出 1~1000 之间包含 3 的数字
如果 3 是连在一起的(如 233)则在数字前加上&;
如果这个数字是质数则在数字后加上*,例:(3,13*,23*,&33,43…&233…)。
我写的代码是
for i in range(1001):
data=str(i)
if '33' in data:
for j in range(2,i):
if i%j==0:
print("&"+data)
break
else:
print(data+"")
elif '3' in data:
for k in range(2,i):
if i%k==0:
print(data)
break
else:
print(data+"
")
但是是有错误的,问题出在哪里呢

麻烦用代码格式粘贴一下你写的代码,方便调试
示例代码如下:

import math


def is_prime(number):
    if number > 1:
        if number == 2:
            return True
        if number % 2 == 0:
            return False
        for current in range(3, int(math.sqrt(number) + 1), 2):
            if number % current == 0:
                return False
        return True
    return False


for i in range(1000):
    j=str(i)
    if '3' in str(i):
        if is_prime(i):
            j=j+'*'
        if '33' in j:
            j='&'+j
        print(j,end=' ')

img

你的代码写的有点乱,我按照你的思路重写了一下,其中用到了for-else语句,这样的话,程序显得更简洁。

    for i in range(1001):
        data=str(i)
        if '33' in data:
            data = "&" + data
            for j in range(2,i):
                if i%j==0:
                    break
            else:
                data += "*"
            print(data)
        elif '3' in data:
            for k in range(2,i):
                if i%k==0:
                    break
            else:
                data += "*"
            print(data)

有关for-else语句的介绍,可以参考我这篇文章。



for i in range(1001):
    data=str(i)
    if '33' in data:
        for j in range(2,i):
            if i%j==0:
                print("&"+data)
                break
        else:
            print(data+"*")
    elif '3' in data:
        for k in range(2,i):
            if i%k==0:
                print(data)
                break
        else:
            print(data+"*")