## Instructions

**Objective**

Write a program to create rectangles with ints in python language.

## Requirements and Specifications

You are each given the number of rows and the number of columns of a rectangle, the starting number at the upper left of the rectangle - see the PowerPoint, “num rows, num columns, starting num in upper left” posted in the project folder. The numbers are all integers.

The project is to use the turtle module to draw a rectangle of consecutive ints, with the given starting number in the upper left of the rectangle and an ending number in the lower right of the rectangle.

In each row, numbers increase sequentially from left to right, then continue on at the beginning of the next row. Both the number of rows and the number of columns of the rectangle are odd ints.

- [5%] Write code to count the number of prime numbers from the smallest int (in the upper left) to the largest int (in the lower right). Print out the number of primes as a labeled output.
- [5%] Write code to count the number of twin prime numbers from the smallest int (in the upper left) to the largest int (in the lower right). Print out the number of pairs of twin primes as a labeled output. [TWIN PRIMES is a pair of prime numbers that differ by 2. The first several twin primes are: 3, 5; 5, 7; 11, 13; 17, 19.]
- [5%] Write code to count the number of primes per row in the rectangle. Print this out. Check that the sum of the number of primes in each row is the same as the number of primes.
- [5%] Write code to count the number of primes per column in the rectangle. Print this out. Check that the sum of the number of primes in each column is the same as the number of primes.
- [10%] A prime gap is the difference between two successive prime numbers. For your range of ints, find:
- the average prime gap
- the maximum prime gap
- the most common gaps (there may be more than one most common gap). I recommend using dictionaries – see chapter 20. What is the most number of occurrences of these more common gaps? [Hint: make a dictionary whose keys are gaps and whose corresponding values are the number of times the corresponding gap occurs. Find the largest gap occurrence number using dict.values(). Then find the gap or gaps that have that max number of occurrences.]

- [40%] Write code using the turtle module to draw a rectangle of consecutive ints from the int in the upper left to the int in the lower right. If the int is one of a pair of twin primes, the twin primes should be red. If the int is a prime (but not a twin prime), the int should be blue. Otherwise, the int is black.
- [10%] Write your code using appropriate helper functions – you must use helper functions. This will make your code easier to write and easier to explain.
- [10%] Every function must have a docstring just below the function header.
- [10%] Submit a YouTube link of a video that explains your code.

**Source Code**

```
import turtle
UL = 4275
numRows = 31
numCols = 59
# Calcualte the final number to be shown
BR = UL + numRows*numCols - 1 # number at bottom right corner
# Define a function to know if a number is prime
def isPrime(n):
if n%2 == 0 and n != 2: # if the number is pair but it is now 2, then it is not prime
return False
for i in range(2, int(n/2)+1):
if n%i == 0:
return False
return True
"""
QUESTION 1
"""
# All prime numbers are odd, so check only for odd numbers between UL and BR
primes = 0
for i in range(UL, BR+1):
if i%2 != 0 and isPrime(i):
primes += 1
print("Number of primes within range is", primes)
"""
QUESTION 2
"""
print()
def getTwinPrimes(a, b):
"""
This function get all twin primes between a and b, with a gap of 2
:param a: Initial number
:param b: Final number
:return: Set with twin primes
"""
twin_primes = list()
for i in range(a, b- 1):
pair = (i, i + 2)
if pair[0] % 2 != 0 and pair[1] % 2 != 0 and isPrime(pair[0]) and isPrime(pair[1]):
twin_primes.append(pair[0])
twin_primes.append(pair[1])
return set(twin_primes)
# Now, get all twin primes
twin_primes = getTwinPrimes(UL, BR)
print("Number of twin primes within range is", len(twin_primes))
"""
QUESTION 3
"""
print()
n = UL
sum_primes = 0
row_primes = list()
for row in range(numRows):
row_primes_n = 0
sum_row = 0
for col in range(numCols):
if n%2 != 0 and isPrime(n):
row_primes_n += 1
n += 1
row_primes.append(row_primes_n)
sum_primes += row_primes_n
print("The number of primes in each row is:")
print(row_primes)
print("As a check, the total number of primes is", sum_primes)
"""
```

**QUESTION 4**

```
"""
print()
n = UL
sum_primes = 0
column_primes = list()
for col in range(numCols):
col_primes = 0
sum_col = 0
for row in range(numRows):
if n%2 != 0 and isPrime(n):
col_primes += 1
n += 1
column_primes.append(col_primes)
sum_primes += col_primes
print("The number of primes in each column is:")
print(column_primes)
print("As a check, the total number of primes is", sum_primes)
"""
```

**QUESTION 5**

```
"""
print()
avg_gap = 0.0
max_gap = 0.0
gaps = dict() # to count the most frequent gap
gaps_lst = list()
n_gaps = 0 # count number of gaps
prev = None
for n in range(UL, BR+1):
if n%2 != 0 and isPrime(n):
if prev != None:
gap = abs(n-prev)
if gap > max_gap:
max_gap = gap
avg_gap += gap
# append gap
gaps_lst.append(gap)
# store in dict
gaps[gap] = gaps.get(gap, 0) + 1
# increment counter
n_gaps += 1
prev = n
avg_gap = avg_gap / n_gaps
# Print
print("Average prime gap is", avg_gap)
print("Max prime gap is", max_gap)
print("Prime gaps:")
print(gaps)
# Sort dict by values
gaps = {k: v for k, v in sorted(gaps.items(), key = lambda item: item[1], reverse = True)}
gaps = list(gaps.items())
print("Most common gap is", gaps[0][1])
print(f"The corresponding gaps are [{gaps[0][0]}]")
"""
```

**QUESTION 6**

```
"""
# Create turtle screen
turtle.tracer(0,0)
turtle.speed("fastest")
wn = turtle.Screen()
# Calculate width and height
size = 20
HEIGHT = (numRows + 1)*size
WIDTH = (numCols + 1)*size
# set size
wn.setup(WIDTH, HEIGHT)
wn.bgcolor("white")
wn.title("Numbers grid")
turtle.pencolor("black")
turtle.pensize(3)
def drawSquare(pen, x, y, size):
"""
This function draws a square starting at position (x,y) with size
:param pen: Turtle object
:param x: X-position
:param y: Y-position
:param size: Size of square
:return: None
"""
pen.penup()
pen.goto(x,y)
pen.pendown()
pen.pencolor("black")
for i in range(4):
pen.forward(size)
pen.right(90)
def drawNumber(pen, n, x, y, pen_color):
"""
This function draws a number n at positions (x,y)
:param pen: Turtle object
:param n: number to be drawn
:param x: X-position
:param y: Y-position
:param pen_color: font color
:return: None
"""
pen.penup()
pen.goto(x+3, y-10)
pen.pendown()
pen.pencolor(pen_color)
pen.write(str(n), font=("Arial", 5, "normal"))
def drawGrid(pen, UL, BR, numRows, numColumns, size):
"""
This function receives a turtle object and draw a grid given the number of rows and columns
:param pen: Turtle object
:param UL: Initial number at upper-left corner
:param BR: Final number at bottom-right corner
:param numRows: Integer that defines the number of rows
:param numColumns: Integer that defines the number of columns
:param size: Integer that defines the size of each square
:return: None
"""
# Calculate width and height
HEIGHT = (numRows + 1) * size
WIDTH = (numCols + 1) * size
# Draw each square with each number
x, y = 0,HEIGHT/2# Starting positions
num = UL
font_color = "black"
# Get all twin primes
twin_primes = getTwinPrimes(UL, BR)
for row in range(numRows):
x = -WIDTH/2
for col in range(numCols):
drawSquare(pen, x, y, size)
# Check is the number is twin prime
if num in twin_primes:
font_color = "red"
elif isPrime(num): # check if it is just a prime
font_color = "blue"
else:
font_color = "black"
drawNumber(pen, num, x, y, font_color)
x += size
num += 1
y -= size
drawGrid(turtle, UL, BR, numRows, numCols, size)
wn.exitonclick()
```

## Related Samples

At ProgrammingHomeworkHelp.com, we understand the challenges students face with Python assignments. That's why we offer a comprehensive range of sample Python assignments to help guide and inspire your work. Our expertly crafted samples cover various topics, from basic syntax and data structures to advanced algorithms and web development. Whether you're struggling with code debugging or project implementation, our samples provide clear, practical examples to enhance your understanding and improve your grades. Trust us to support your Python learning journey with quality resources tailored to your needs.

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python

Python