i believe i have coded everything correctly but i keep getting an error message saying, for example("Module 'turtle' has no 'reset' member)
import turtle
color = input('Enter a color:')
while (color != "QUIT"):
turtle.reset()
turtle.pencolor(color)
turtle.pensize(10)
n = int(input('Enter a number:'))
if n % 3 == 0 and n % 5 == 0:
turtle.penup()
turtle.setposition(x=0, y=150)
turtle.pendown()
drawU(turtle.Turtle)
turtle.penup()
turtle.setposition(x = 0, y = -10)
turtle.pendown()
drawH(t)
elif n % 3 == 0:
turtle.penup()
turtle.setposition(x=0, y=150)
turtle.pendown()
drawU(turtle.Turtle)
elif n % 5 == 0:
turtle.penup()
turtle.setposition(x=0, y=150)
turtle.pendown()
drawH(turtle.Turtle)
else:
turtle.pencolor('black')
def drawU (t):
turtle.setheading(270)
turtle.forward(150)
turtle.left(90)
turtle.forward(75)
turtle.left(90)
turtle.forward(150)
each "turtle.____" shows as an error. i am not too sure what i am doing wrong. i included turtle.done() at the end as well, this is only half of my code.
i believe i have coded everything correctly
Far from it: termination of your loop depends on the value of color which never changes during the loop; you should be passing a turtle instance here drawU(turtle.Turtle) but are passing a turtle class; your else clause makes no sense, effectively a no-op; your indentation as shown doesn't work; your drawH() function is missing.
Below is my attempt to reconstruct your intended code, but I can't be certain:
from turtle import Screen, Turtle
def drawU(turtle):
turtle.setheading(270)
turtle.forward(150)
turtle.left(90)
turtle.forward(75)
turtle.left(90)
turtle.forward(150)
def drawH(turtle):
pass
color = input('Enter a color: ')
screen = Screen()
turtle = Turtle()
while color != "QUIT":
n = int(input('Enter a number: '))
turtle.reset()
turtle.pencolor(color)
turtle.pensize(10)
if n % 3 == 0 and n % 5 == 0:
turtle.penup()
turtle.setposition(x=0, y=150)
turtle.pendown()
drawU(turtle)
turtle.penup()
turtle.setposition(x=0, y=10)
turtle.pendown()
drawH(turtle)
elif n % 3 == 0:
turtle.penup()
turtle.setposition(x=0, y=150)
turtle.pendown()
drawU(turtle)
elif n % 5 == 0:
turtle.penup()
turtle.setposition(x=0, y=150)
turtle.pendown()
drawH(turtle)
color = input('Enter a color: ')
screen.mainloop()
Related
I made a simple text-based tic-tac-toe game and now I am trying to step it up creating a GUI using the Turtle module. The problem is that when I run my program, the Turtle window draws the board correctly, but then freezes and stops responding. I tried searching this problem everywhere and some people said that it could have to do with the line screen.mainloop(), but I can't figure out what is wrong.
Here is my code:
import warnings
import numpy as np
from turtle import Turtle, Screen
warnings.simplefilter(action='ignore', category=FutureWarning)
def create_board():
# turtle.hideturtle()
turtle.speed(0)
turtle.pensize(5)
turtle.left(90)
turtle.penup()
turtle.setpos(-150, -450)
turtle.pendown()
turtle.forward(900)
turtle.penup()
turtle.setpos(150, -450)
turtle.pendown()
turtle.forward(900)
turtle.right(90)
turtle.penup()
turtle.setpos(-450, -150)
turtle.pendown()
turtle.forward(900)
turtle.penup()
turtle.setpos(-450, 150)
turtle.pendown()
turtle.forward(900)
def enter_data(matrix, user, number):
if user == 1:
matrix = np.where(matrix == number, 'X', matrix)
if is_winner(matrix):
user = 1
else:
user = 2
elif user == 2:
matrix = np.where(matrix == number, 'O', matrix)
if is_winner(matrix):
user = 2
else:
user = 1
return matrix, user
def show_board(matrix):
print('-----|-----|-----')
for i in range(3):
print(f' {matrix[i][0]} | {matrix[i][1]} | {matrix[i][2]} ')
print('-----|-----|-----')
return
def is_winner(matrix):
for i in range(3):
if matrix[0][i] == matrix[1][i] == matrix[2][i]:
return True
elif matrix[:, 0][i] == matrix[:, 1][i] == matrix[:, 2][i]:
return True
if matrix[0][0] == matrix[1][1] == matrix[2][2]:
return True
elif matrix[0][2] == matrix[1][1] == matrix[2][0]:
return True
else:
return False
def draw_circle(x, y):
turtle.penup()
turtle.goto(x, y + 60)
turtle.pendown()
turtle.circle(-60)
def draw_cross(x, y):
turtle.penup()
turtle.goto(x - 60, y - 60)
turtle.pendown()
turtle.goto(x + 60, y + 60)
turtle.penup()
turtle.goto(x - 60, y + 60)
turtle.pendown()
turtle.goto(x + 60, y - 60)
screen = Screen()
screen.setup(width=0.65, height=0.95, starty=0)
turtle = Turtle()
create_board()
array = np.array(np.mat('1 2 3; 4 5 6; 7 8 9'), dtype=object)
count = 0
player = 1
show_board(array)
while count < 9 and is_winner(array) is not True:
choice = int(input(f'\nPlayer {player}, enter the number you want:\n'))
if choice not in range(1, 10) or choice not in array:
print('\nThat is invalid. Try again.\n')
show_board(array)
else:
count += 1
array, player = enter_data(array, player, choice)
screen.update()
show_board(array)
if count == 9:
print("\nThat's a draw.")
else:
print(f'\nPlayer {player} won! Congratulations!!')
print('Game Over!')
screen.mainloop()
Any help would be very much appreciated.
height = input("Enter the height: ")
height = int(height)
width = input("Enter the width: ")
width = int(width)
import turtle
width = width - 1
turtle.speed(1)
turtle.penup()
for y in range(height // 2):
for x in range(width):
turtle.dot()
turtle.forward(20)
turtle.dot()
turtle.right(90)
turtle.forward(20)
turtle.right(90)
for x in range(width):
turtle.dot()
turtle.forward(20)
turtle.dot()
turtle.left(90)
turtle.forward(20)
turtle.left(90)
turtle.exitonclick()
I want to print dots in python graphical turtle. For my width, it’s giving out as my input. But for the height, if the number is even I am getting the accurate output but if the number is odd I am getting height - 1. I know that my code, logic are not efficient & accurate. I am a self-learner (by books only).
Rather than patch your nested loops, let's simplify them:
import turtle
height = int(input("Enter the height: "))
width = int(input("Enter the width: "))
turtle.speed('slowest')
turtle.penup()
angle = 90
for _ in range(height):
for _ in range(width - 1):
turtle.dot()
turtle.forward(20)
turtle.dot()
turtle.right(angle)
turtle.forward(20)
turtle.right(angle)
angle *= -1
turtle.hideturtle()
turtle.exitonclick()
import turtle
#1)draw board
sc= turtle.Screen()
sc.setup(300,300)
import turtle
sc= turtle.Screen()
sc.setup(300,300)
turtle.speed(0)
turtle.pensize(10)
turtle.bgcolor("black")
turtle.pencolor("white")
turtle.penup()
turtle.goto(-150,50)
turtle.pendown()
turtle.forward(300)
turtle.penup()
turtle.goto(-150,-50)
turtle.pendown()
turtle.forward(300)
turtle.penup()
turtle.goto(-50,150)
turtle.setheading(-90)
turtle.pendown()
turtle.forward(300)
turtle.penup()
turtle.goto(50,150)
turtle.pendown()
turtle.forward(300)
turtle.penup()
#2) X's and O's
turtle.pencolor("yellow")
def kreuz(x,y):
turtle.penup()
turtle.goto(x+30,y-45)
turtle.setheading(-45)
turtle.pendown()
turtle.forward(50)
turtle.penup()
turtle.goto(x+60,y-40)
turtle.setheading(-130)
turtle.pendown()
turtle.forward(50)
turtle.penup()
def kreis(x,y):
turtle.penup()
turtle.goto(x+50,y-80)
turtle.setheading(0)
turtle.pendown()
turtle.circle(20)
turtle.penup()
AlleTeile=["","","","","","","","",""]
nächsterZug="X"
def zeichneTeile (AlleTeile):
x = -150
y = 150
for einTeil in AlleTeile:
if einTeil=="X":
kreuz(x,y)
elif einTeil=="O":
kreis(x,y)
else:
print("leeres feld")
x=x+100
if x > 50:
x=-150
y=y-100
zeichneTeile(AlleTeile)
def geklickt(x,y):
global nächsterZug,AlleTeile
senkrecht= (x+150) // 100
waagrecht= (-y+150)// 100
Bereich= senkrecht+waagrecht*3
Bereich=int(Bereich)
print("Du klicktest auf Bereich-Nummer", Bereich)
AlleTeile[Bereich]=nächsterZug
if nächsterZug =="X":
nächsterZug="O"
else:
nächsterZug="X"
zeichneTeile(AlleTeile)
turtle.onscreenclick(geklickt)
turtle.mainloop()
I want to create this tic-tac-toe game using turtle in Python but I am stuck. The problem is that I keep drawing noughts and crosses on the game board after all 9 fields are full with noughts and crosses. How can I code this so that after 9 turns (9 fields) it is no longer possible to keep on drawing?
Since unused squares consist of an empty string in AlleTeile, this is trivial to fix since empty strings are False in a boolean context. At the top of geklickt(), after the global statement:
if all(AlleTeile):
print("All taken!")
return
We can reuse the same trick later in that function to prevent overwritting of existing squares. After the Bereich calculation, we can do something like:
print("Du klicktest auf Bereich-Nummer", Bereich, end="")
if AlleTeile[Bereich]:
print(" -- already taken!")
return
else:
print()
Here's my complete rework with the above changes, some turtle idoms, code cleanup and English translation courtesy of Google (and common sense):
from turtle import Screen, Turtle
# X's and O's
def cross(x, y):
turtle.penup()
turtle.goto(x + 30, y - 35)
turtle.setheading(-45)
turtle.pendown()
turtle.forward(50)
turtle.penup()
turtle.goto(x + 60, y - 30)
turtle.setheading(-130)
turtle.pendown()
turtle.forward(50)
turtle.penup()
def nought(x, y):
turtle.penup()
turtle.goto(x + 50, y - 70)
turtle.setheading(0)
turtle.pendown()
turtle.circle(20)
turtle.penup()
# Playing the game
def drawSquares():
screen.tracer(False) # because this routine is a graphics bottleneck
x, y = -150, 150
for square in AllSquares:
if square == "X":
cross(x, y)
elif square == "O":
nought(x, y)
x += 100
if x > 50:
x = -150
y -= 100
screen.tracer(True)
def clicked(x, y):
global turn
if all(AllSquares):
print("All taken!")
return
vertical = (x + 150) // 100
horizontal = (150 - y) // 100
Area = int(vertical + horizontal * 3)
print("You clicked area number", Area, end="")
if AllSquares[Area]:
print(" -- already taken!")
return
else:
print()
AllSquares[Area] = turn
if turn == "X":
turn = "O"
else:
turn = "X"
drawSquares()
# Draw the board
screen = Screen()
screen.setup(330, 330)
screen.bgcolor("black")
turtle = Turtle(visible=False)
turtle.pensize(10)
turtle.color("white")
turtle.speed('fastest')
turtle.penup()
turtle.goto(-150, 50)
turtle.pendown()
turtle.forward(300)
turtle.penup()
turtle.goto(-150, -50)
turtle.pendown()
turtle.forward(300)
turtle.setheading(-90)
turtle.penup()
turtle.goto(-50, 150)
turtle.pendown()
turtle.forward(300)
turtle.penup()
turtle.goto(50, 150)
turtle.pendown()
turtle.forward(300)
turtle.penup()
# Start the game
turtle.color("yellow")
AllSquares = ["", "", "", "", "", "", "", "", ""]
turn = "X"
drawSquares()
screen.onscreenclick(clicked)
screen.mainloop()
I have written this Python code with turtle graphics for drawing a chessboard by given dimension. The problem I'm facing is when I enter an odd number everything works just fine:
The last square is also filled, I just didn't manage to screen shot it on time
But when I enter an even number, it's like:
Here's the code:
from turtle import *
import sys
def main():
dimension = int(input('Enter dimension: '))
side = 50
x_coord = -250
y_coord = 300
turtle = Turtle()
turtle.speed('fastest')
turtle.pensize(5)
for i in range(dimension ** 2):
if not i % dimension:
y_coord -= side
turtle.penup()
turtle.setx(x_coord)
turtle.sety(y_coord)
turtle.pendown()
if not i % 2:
turtle.begin_fill()
for _ in range(4):
turtle.forward(side)
turtle.right(90)
turtle.forward(side)
turtle.end_fill()
if __name__ == '__main__':
sys.exit(main())
A similar flag-based solution with alternate approaches. I don't understand what your main() layout gets you so I reworked it to be a potential library with the test code under __main__:
import turtle
def draw_board(dimension, x_coord, y_coord, side):
parity = False
for i in range(dimension ** 2):
if i % dimension == 0:
y_coord -= side
turtle.penup()
turtle.setpos(x_coord, y_coord)
turtle.pendown()
parity = parity != (dimension % 2 == 0) # logical XOR
if parity:
turtle.begin_fill()
for _ in range(4):
turtle.forward(side)
turtle.right(90)
if turtle.filling():
turtle.end_fill()
turtle.forward(side)
parity = not parity
if __name__ == '__main__':
size = int(input('Enter dimension: '))
turtle.speed('fastest')
turtle.pensize(5)
draw_board(size, -250, 300, 50)
turtle.hideturtle()
turtle.exitonclick()
I didnt look through your code, but it seems that the problem you have is that unlike a true chessboard, you change from white to black and vice versa when making a new line of squares, this example:
black,white,black,white
black,white,black,white
etc.
or black,white,black
white,black,white
etc.
while a chessboard is:
black,white,black,white
WHITE,black,white,black
BLACK....etc.
you see the difference?
so that seems to be the problem, il try to fix your code aswell, but i think you could manage that
I suggest setting a flag for when to fill instead of doing it only when it's an odd number from the range which is what trips you up since it doesn't go black white left to right, it reaches then end an then goes right to left.
Anyway, here is my edit, just a simple boolean which toggles each time except when going to new row. I also suggest using turtle.exitonclick instead of sys.exit
from turtle import *
def main():
dimension = int(input('Enter dimension: '))
side = 50
x_coord = -250
y_coord = 300
turtle = Turtle()
turtle.speed('fastest')
turtle.pensize(5)
fill = False
for i in range(dimension ** 2):
if not i % dimension:
y_coord -= side
turtle.penup()
turtle.setx(x_coord)
turtle.sety(y_coord)
turtle.pendown()
if not dimension % 2:
fill = not fill
if fill:
turtle.begin_fill()
for _ in range(4):
turtle.forward(side)
turtle.right(90)
turtle.forward(side)
turtle.end_fill()
fill = not fill
if __name__ == '__main__':
main()
exitonclick()
For Python 3,7 I would recommend this way
import turtle
turtle.speed(0)
turtle.up()
turtle.goto(-200,200)
turtle.down()
for row in range(8):
for col in range(8):
if col % 2 == row % 2:
turtle.forward(50)
continue
turtle.begin_fill()
for _ in range(4):
turtle.forward(50)
turtle.right(90)
turtle.end_fill()
turtle.forward(50)
turtle.backward(400)
turtle.right(90)
turtle.forward(50)
turtle.left(90)
turtle.width(6)
for _ in range(4):
turtle.forward(400)
turtle.left(90)
turtle.hideturtle()
turtle.done()
import random
import turtle
spiral = turtle.Turtle()
turtle.bgcolor("black")
spiral.color("cadet blue")
randomfive = random.randint(5,15)
spiral.pensize(randomfive)
randomfour = random.randint(20,75)
spiral.speed (randomfour)
randomthree = random.randint(200,500)
randomtwo = random.randint(5,20)
random = random.randint(10,360)
spiral.pendown()
for i in range(randomthree):
spiral.forward(i * randomtwo)
spiral.right(random)
def christmas ():
turtle.bgcolor("black")
for i in range(2):
turtle.speed (9999999)
coordone = random.randint (-300,300)
coordtwo = random.randint (-300,300)
right = random.randint (1,360)
turtle.penup()
turtle.goto (coordone,coordtwo)
turtle.pendown()
turtle.right(right)
for y in range (10):
turtle.speed(9999)
turtle.right(36)
for x in range (50):
turtle.color("red")
turtle.speed(99999)
turtle.pensize(x/5)
turtle.forward (x-(x-1))
turtle.penup()
turtle.goto (coordone,coordtwo)
turtle.pendown()
turtle.right(18)
for z in range (10):
turtle.speed(9999)
turtle.right(36)
for w in range (50):
turtle.color("green")
turtle.speed(99999)
turtle.pensize(w/3)
turtle.forward (w-(w-1))
turtle.penup()
turtle.goto (coordone,coordtwo)
turtle.pendown()
christmas()
When I try this python says "AttributeError: 'int' object has no attribute 'randint'" (By the way, this is the whole code). Please help with this issue. The name of this is droplets.py so that wouldn't be the issue.
import turtle
import random
def spiral():
turtle.bgcolor("black")
spiral = turtle.Turtle()
spiral.color("cadet blue")
randomfive = random.randint(5, 15)
spiral.pensize(randomfive)
randomfour = random.randint(0, 11)
spiral.speed(randomfour)
randomthree = random.randint(200, 500)
randomtwo = random.randint(5, 20)
randomone = random.randint(10, 360)
spiral.pendown()
for i in range(randomthree):
spiral.forward(i * randomtwo)
spiral.right(randomone)
spiral.penup()
def christmas():
turtle.bgcolor("black")
turtle.speed("fastest")
for i in range(2):
coordinate = random.randint(-300, 300), random.randint(-300, 300)
right = random.randint(1, 360)
turtle.penup()
turtle.goto(coordinate)
turtle.pendown()
turtle.right(right)
for y in range(10):
turtle.right(36)
for x in range(50):
turtle.color("red")
turtle.pensize(x / 5)
turtle.forward(1)
turtle.penup()
turtle.goto(coordinate)
turtle.pendown()
turtle.right(18)
for z in range(10):
turtle.right(36)
for w in range(50):
turtle.color("green")
turtle.pensize(w / 3)
turtle.forward(1)
turtle.penup()
turtle.goto(coordinate)
turtle.pendown()
spiral()
christmas()
turtle.done()