如何根据用户的选择调用子例程

时间:2018-11-23 02:25:01

标签: python method-call

我的要求

编写一个程序,该程序根据用户的选择绘制五个形状之一:直线(l),正方形(s),矩形(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 :(得分:1)

其余的遵循相同的逻辑。您还需要从用户那里获取一个整数以传递给函数,因为您正在向函数中输入内容。

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的函数,该函数接受一个称为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))