打印出 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=' ')
你的代码写的有点乱,我按照你的思路重写了一下,其中用到了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 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+"*")