Как вызывать подпрограммы по выбору пользователя - PullRequest
0 голосов
/ 23 ноября 2018

Мои требования

Напишите программу, которая рисует одну из пяти фигур в зависимости от выбора пользователя: линия (l), квадрат (ы), прямоугольник (r),треугольник (t) или ромб (d).Если пользователь вводит правильный выбор, ваша программа предложит пользователю ввести размер фигуры.

Вопрос

Я написал подпрограммы для каждой фигурыно у меня возникли проблемы с выяснением того, как использовать выбор буквы для реализации подпрограмм.Я предполагаю, что я использую операторы if / else, но не уверен, как использовать их со строками.Это код, который у меня есть:

#   Subroutines

def drawLine(length):
    length = int(input("Enter size of line: "))
    print("*" * (length))

def drawSquare(size):
    size = int(input("Enter size of side of square: "))
    for i in range(size):
        print('*' * size)

def drawRectangle(across_size, down_size):
    across_size = int(input("Enter the across side of rectangle: "))
    down_size = int(input("Enter the down side of rectangle: "))
    for i in range(down_size):
        for j in range(across_size):
            print('*' if i in [0, down_size-1] or j in [0, across_size-1] else " ", end='')
        print()

def drawTriangle(size):
    size = int(input("Enter size of triangle: "))
    x = 1
    while (x <= size):
        print("*" * x)
        x = x + 1

def drawDiamond(size):
    size = int(input("Enter size of diamond: "))
    for i in range(n-1):
        print((n-i) * ' ' + (2*i+1) * '*')
    for i in range(n-1, -1, -1):
        print((n-i) * ' ' + (2*i+1) * '*')

# main program
shape = input ("Enter type of shape (l,s,r,t,d): ")
list = ['l', 's', 'r', 't', 'd']

if shape not in list:
    print("Entered incorrect type of shape", shape)

Я создал список, используя буквы, но не могу продолжить мой код, поэтому, если кто-то выбирает «l», он вызывает подпрограмму drawLine и т. Д.

1 Ответ

0 голосов
/ 23 ноября 2018

Остальные следуют той же логике.Вам также необходимо получить целое число от пользователя для перехода в функцию, поскольку вы вводите данные в свои функции.

size = int(input("Please enter a number for the size: "))

if shape == 'l':
    drawLine(size)
else if shape == 's':
    drawSquare(size)
else if ...:
   .
   .
else:
     print("Entered incorrect type of shape")

В качестве отступления, способ определения функции здесь работает:

def drawLine(length):
    length = int(input("Enter size of line: "))
    print("*" * (length))

Это то, что вы определяете функцию с именем drawLine, которая принимает 1 аргумент с именем length.Когда вы вызываете эту функцию, т.е. drawLine(5), ваша функция будет выполняться с length = 5.Когда вы затем используете переменную length внутри тела вашей функции, она будет равна любому значению, с которым вы вызвали функцию в качестве аргумента, поэтому вам не нужно запрашивать ввод данных внутри каждой функции.В качестве альтернативы вы можете получить длину внутри ваших функций, но тогда вам не следует определять функцию с какими-либо входными параметрами, например так:

# this definition takes 0 arguments(inputs) and gets length inside
def drawLine(): 
    length = int(input("Enter size of line: "))
    print("*" * (length))

# this definition expects drawLine to be called with a value, and you can get the length from the user elsewhere
def drawLine(length):
        print("*" * (length))

При вызове со вторым определением она выполнит телоВаша функция выглядит следующим образом (используя drawLine(10) в качестве примера):

print("*" * (10))
...