使用turtle模块编写代码绘制矩形



Q6:使用turtle模块编写代码,绘制从左上角int到右下角int的连续整数矩形。如果int是一对孪生素数中的一个,孪生素数应该是红色的。如果int是素数(但不是双素数),则int应该是蓝色的。否则,int为黑色。

这是我到目前为止的代码:

import turtle
UL = 4686 
numRows = 33
numCols = 51
max_number = UL + numRows*numCols - 1
numbers = [ list(range(UL + (row *numCols), UL + (row*numCols) + numCols)) for row in 
range(numRows)]

turtle.tracer (0,0)
t = turtle.Turtle ()
## Question 2:
def count_twinprime (UL, max_number):
count = 0
for a in range (UL, max_number):
b = a + 2
if (is_prime(a) and is_prime(b)):
count += 1
print ("Number of twin primes are: ", count)
print ('Q2') 
twinPrimes = count_twinprime(UL, max_number)
Question 6:

def drawRectangle(tObj, size, text, color):
tObj.penup()
tObj.forward(size//2)
tObj.color(color)
tObj.write(number, align='center', font=("Arial", 8, "normal"))
tObj.forward(-size//2)
tObj.pendown()
tObj.color('black')
for side in range(4):
tObj.forward(size)
tObj.left(90)
print("Q6:tSee rectangle of ints showing primes & twin primesn")
twinPrime = count_twinprime (UL, max_number)
size = 30
number = UL
for row in range(numRows):
for col in range(numCols):
if number in twinPrimes:
color = 'red'
elif is_prime(number):
color = 'blue'
else:
color = 'black'
drawRectangle(t, size, number, color)
t.forward(size)
number += 1
t.penup()
t.setx(0)
t.right(90)
t.forward(size)
t.left(90)
t.hideturtle()
turtle.update()

我一直得到这个我怎么解决它?

Traceback (most recent call last):
File "/Users/bk/Documents/csc_proj.py", line 109, in 
<module>
if number in twinPrimes:
TypeError: argument of type 'NoneType' is not iterable

count_twinprime函数没有返回任何东西,因此它隐式返回None。要解决这个问题,只需向它添加一条返回语句:

def count_twinprime(UL, max_number):
count = 0
for a in range(UL, max_number):
b = a + 2
if (is_prime(a) and is_prime(b)):
count += 1
return count

或一行

def count_twinprime(UL, max_number):
return sum(1 for a in range(UL, max_number) if is_prime(a) and is_prime(a + 2))

注意你不能做

twinPrimes = count_twinprime(UL, max_number)

和之后的

for number in twinPrimes:

前者将一个整数赋值给twinPrimes(ULmax_number之间的孪生素数的数目),后者试图迭代该整数,您不能这样做。您可以考虑以下几种选择:

  • 如果您想从0迭代到ULmax_number之间的双素数,则将循环替换为
for number in range(twinPrimes):
  • 如果你想遍历ULmax_number之间的所有双素数,你需要创建一个新的函数来完成:
def twin_primes(UL, max_number):
return (a for a in range(UL, max_number) if is_prime(a) and is_prime(a + 2))

现在你可以

twinPrimes = twin_primes(UL, max_number)
for number in twinPrimes:
...

最新更新