Программа, которая позволяет пользователю выбирать фигуру из пяти, но она рисует все одинаковые фигуры одновременно, что я делаю не так? - PullRequest
0 голосов
/ 06 ноября 2019
from turtle import*
def square():
  for i in range(4):
    forward(30)
    right(90)

def triangle():
  for i in range(3):
    forward(50)
    left(120)

def pentagon():
  for i in range(5):
    forward(30)
    right(72)

def hexagon():
  for i in range(6):
    forward(30)
    right(60)

def star():
  for i in range(5):
    forward(50)
    right(144)

def pause():
  penup()
  forward(70)
  pendown()

shape = (input("Type one of these shapes square, triangle, pentagon, hexagon, star"))



if shape == square():
    print (square())

elif shape == triangle():
    print (triangle())


elif shape == pentagon():
    print (pentagon())

elif shape == hexagon():
    print (hexagon())

elif shape == star():
    print (star())
else:
  print("Shape is not valid, please input a valid one!")

1 Ответ

1 голос
/ 06 ноября 2019

Когда вы пишете:

if shape == square():

, вызывается функция square, которая рисует квадрат. Затем он сравнивает входные данные пользователя с возвращаемым значением. Поскольку функция ничего не возвращает, сравнение завершается неудачей.

Вы делаете это для всех фигур, и в итоге получается рисование всех фигур.

Вы должны сравнить входные данные пользователя сстрока, не вызывающая функции.

if shape == "square":

Вы также не должны использовать print() вокруг вызовов функций формы, так как они не возвращают ничего, что должно быть напечатано. Таким образом, это должно быть так:

if shape == "square":
    square()
elif shape == "triangle":
    triangle()
...
else:
    print("shape is not valid, please input a valid one!")

Вместо всех операторов if, более разумным способом было бы использовать словарь, который отображает имена фигур в функции:

shape_map = {"square": square, "triangle": triangle, "pentagon": pentagon, ...}
if shape in shape_map:
    shape_map[shape]()
else:
    print("shape is not valid, please input a valid one!")
...