Как получить информацию от пользователя и сделать так, чтобы черепаха его нарисовала? - PullRequest
0 голосов
/ 12 ноября 2018

Я хочу иметь черепашку, которая рисует то, что пользователь вводит в консоли. Например: если пользователь вводит "CLOCK", я хочу, чтобы черепаха рисовала "CLOCK "во всех заглавных буквах.

Я сделал почти все буквы + пробел и точку и определил их именами "letterA", "letterB" и т. Д.

Я долго искал способы сделать это, но не могу понять.

Мою черепаху зовут "t", а мои переменные turtleEnd/Start/MidSpot. Если пользователь вводит любые символы, которые не в английском алфавите + Æ,Ø,Å, то консоль выводит что-то вроде:

"Invalid character in sentence, please try again"

КОД: Игнорируйте операторы print, они только для моей регистрации

    import turtle as t

turtleEndSpot = t.position()
turtleStartSpot = t.position()
turtleMidSpot = t.position()

#------------------------ALLE BOKSTAVENE OG TEGNENE--------------------
def letterA():
    print('\x1b[1;30;41m' + 'STARTER letterA' + '\x1b[0m')
    t.pendown() 
    t.left(78) 
    t.forward(110)
    t.right(156)
    t.forward(110)
    turtleEndSpot = t.position()
    t.back(25)
    t.right(102)
    t.forward(37)
    t.penup()
    t.setpos(turtleEndSpot)
    t.setheading(0)
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterA FERDIG!' + '\x1b[0m')
def letterB():
    print('\x1b[1;30;41m' + 'STARTER letterB' + '\x1b[0m')
    t.pendown()
    t.left(90)
    t.forward(107.59)
    t.right(90)
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(0)
    for i in range(7):
        t.forward(15)
        t.right(30)
    t.setheading(0)
    t.penup()
    t.forward(45)
    print('\x1b[0;30;42m' + 'letterB FERDIG!' + '\x1b[0m')
def letterC():
    print('\x1b[1;30;41m' + 'STARTER letterC' + '\x1b[0m')
    t.penup() 
    turtleStartSpot = t.position() 
    t.forward(5) 
    t.setheading(90) 
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(-90)
    t.backward(75)
    t.pendown()
    for i in range(7):
        t.backward(14)
        t.left(30)
    t.setheading(-90)
    t.forward(41)
    for i in range(7):
        t.forward(14)
        t.left(30)
    t.penup()
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(75)
    print('\x1b[0;30;42m' + 'letterC FERDIG!' + '\x1b[0m')
def letterD():
    print('\x1b[1;30;41m' + 'STARTER letterD' + '\x1b[0m')
    t.pendown()
    t.setheading(90)
    t.forward(108)
    t.setheading(0)
    for i in range(4):
        t.forward(20)
        t.right(30)
    t.setheading(-90)
    t.forward(13)
    for i in range(4):
        t.forward(20)
        t.right(30)
    t.setheading(0)
    t.penup()
    t.forward(65)
    print('\x1b[0;30;42m' + 'letterD FERDIG!' + '\x1b[0m')
def letterE():
    print('\x1b[1;30;41m' + 'STARTER letterE' + '\x1b[0m')
    t.pendown()
    turtleStartSpot=t.position()
    t.setheading(90)
    t.forward(54)
    turtleMidSpot = t.position()
    t.forward(54)
    t.setheading(0)
    t.forward(40)
    t.penup()
    t.setpos(turtleMidSpot)
    t.pendown()
    t.forward(35)
    t.penup()
    t.setpos(turtleStartSpot) 
    t.pendown()
    t.forward(40)
    t.penup()
    t.forward(15)
    print('\x1b[0;30;42m' + 'letterE FERDIG!' + '\x1b[0m')
def letterF():
    print('\x1b[1;30;41m' + 'STARTER letterF' + '\x1b[0m')
    t.pendown()
    turtleStartSpot=t.position()
    t.setheading(90)
    t.forward(54)
    turtleMidSpot = t.position()
    t.forward(54)
    t.setheading(0)
    t.forward(40)
    t.penup()
    t.setpos(turtleMidSpot)
    t.pendown()
    t.forward(35)
    t.penup()
    t.setpos(turtleStartSpot) 
    t.forward(40)
    t.penup()
    t.forward(15)
    print('\x1b[0;30;42m' + 'letterF FERDIG!' + '\x1b[0m')
def letterG():
    print('\x1b[1;30;41m' + 'STARTER letterG' + '\x1b[0m')
    t.penup() 
    turtleStartSpot = t.position() 
    t.forward(5) 
    t.setheading(90) 
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(-90)
    t.backward(75)
    t.pendown()
    for i in range(7):
        t.backward(14)
        t.left(30)
    t.setheading(-90)
    t.forward(41)
    for i in range(7):
        t.forward(14)
        t.left(30)
    t.setheading(180)
    t.forward(20)
    t.penup()
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(75)
    print('\x1b[0;30;42m' + 'letterG FERDIG!' + '\x1b[0m')
def letterH():
    print('\x1b[1;30;41m' + 'STARTER letterH' + '\x1b[0m')
    t.pendown()
    t.setheading(90)
    t.forward(107.59)
    t.backward(54)
    t.setheading(0)
    t.forward(35)
    t.setheading(90)
    t.forward(54)
    t.backward(107.59)
    t.setheading(0)
    t.penup()
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterH FERDIG!' + '\x1b[0m')
def letterI():
    print('\x1b[1;30;41m' + 'STARTER letterI' + '\x1b[0m')
    t.pendown()
    t.setheading(90)
    t.forward(107.59)
    t.backward(107.59)
    t.setheading(0)
    t.penup()
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterI FERDIG!' + '\x1b[0m')
def letterJ():
    print('\x1b[1;30;41m' + 'STARTER letterJ' + '\x1b[0m')
    t.forward(50)
    t.setheading(90)
    t.forward(107.59)
    t.pendown()
    t.setheading(-90)
    t.forward(74)
    turtleMidSpot = t.position()
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.penup()
    t.setpos(turtleMidSpot)
    t.setheading(-90)
    t.forward(30)
    t.setheading(0)
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterJ FERDIG!' + '\x1b[0m')
def letterK():
    print('\x1b[1;30;41m' + 'STARTER letterK' + '\x1b[0m')
    t.setheading(90)
    t.pendown()
    t.forward(54)
    turtleMidSpot=t.position()
    t.forward(53)
    t.setpos(turtleMidSpot)
    t.setheading(57)
    t.forward(15)
    turtleMidSpot=t.position()
    t.forward(45)
    t.setpos(turtleMidSpot)
    t.setheading(-60)
    t.forward(79)
    t.setheading(0)
    t.penup()
    t.forward(15)
    print('\x1b[0;30;42m' + 'letterK FERDIG!' + '\x1b[0m')
def letterL():
    print('\x1b[1;30;41m' + 'STARTER letterL' + '\x1b[0m')
    t.pendown()
    turtleStartSpot = t.position()
    t.setheading(90)
    t.forward(107.59)
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(30)
    t.penup()
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterL FERDIG!' + '\x1b[0m')
def letterM():
    print('\x1b[1;30;41m' + 'STARTER letterM' + '\x1b[0m')
    t.pendown()
    t.setheading(90)
    t.forward(107.59)
    t.setheading(-60)
    t.forward(50)
    t.left(120)
    t.forward(50)
    t.setheading(-90)
    t.forward(107.59)
    t.setheading(0)
    t.penup()
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterM FERDIG!' + '\x1b[0m')
def letterN():
    print('\x1b[1;30;41m' + 'STARTER letterN' + '\x1b[0m')
    t.setheading(90)
    t.pendown()
    t.forward(107.59)
    t.setheading(-70)
    t.forward(115)
    t.setheading(90)
    turtleEndSpot = t.position()
    t.forward(107.59)
    t.penup()
    t.setpos(turtleEndSpot)
    t.setheading(0)
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterL FERDIG!' + '\x1b[0m')
def letterO():
    print('\x1b[1;30;41m' + 'STARTER letterO' + '\x1b[0m')
    t.penup() 
    turtleStartSpot = t.position() 
    t.forward(5) 
    t.setheading(90) 
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(-90)
    t.backward(75)
    t.pendown()
    for i in range(7):
        t.backward(14)
        t.left(30)
    t.setheading(-90)
    t.forward(41)
    for i in range(7):
        t.forward(14)
        t.left(30)
    t.setheading(90)
    t.forward(50)
    t.penup()
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(75)
    print('\x1b[0;30;42m' + 'letterO FERDIG!' + '\x1b[0m')
def letterP():
    print('\x1b[1;30;41m' + 'STARTER letterP' + '\x1b[0m')
    t.pendown()
    turtleStartSpot = t.position()
    t.left(90)
    t.forward(107.59)
    t.right(90)
    for i in range(7):
        t.forward(15)
        t.right(30)
    t.penup()
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(40)
    print('\x1b[0;30;42m' + 'letterP FERDIG!' + '\x1b[0m')
def letterQ():
    print('\x1b[1;30;41m' + 'STARTER letterQ' + '\x1b[0m')
    t.penup() 
    turtleStartSpot = t.position() 
    t.forward(5) 
    t.setheading(90) 
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(-90)
    t.backward(75)
    t.pendown()
    for i in range(7):
        t.backward(14)
        t.left(30)
    t.setheading(-90)
    t.forward(41)
    for i in range(7):
        t.forward(14)
        t.left(30)
    t.setheading(90)
    t.forward(50)
    t.penup()
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(50)
    t.setheading(120)
    t.turtleEndSpot = t.position()
    t.pendown()
    t.forward(30)
    t.penup()
    t.setpos(turtleEndSpot)
    t.setheading(0)
    t.forward(20)
    print('\x1b[0;30;42m' + 'letterO FERDIG!' + '\x1b[0m')
def letterR():
    print('\x1b[1;30;41m' + 'STARTER letterR' + '\x1b[0m')
    t.pendown()
    t.left(90)
    t.forward(107.59)
    t.right(90)
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(-58)
    t.forward(68)
    t.setheading(0)
    t.penup()
    t.forward(45)
    print('\x1b[0;30;42m' + 'letterR FERDIG!' + '\x1b[0m')
def letterS():
    print('\x1b[1;30;41m' + 'STARTER letterS' + '\x1b[0m')
    t.penup() 
    turtleStartSpot = t.position() 
    t.backward(20) 
    t.setheading(90) 
    for i in range(7):
        t.forward(14)
        t.right(30)
    t.setheading(-90)
    t.backward(75)
    t.pendown()
    for i in range(8):
        t.backward(14)
        t.left(30)
    t.setheading(-30)
    t.forward(40)
    t.setheading(-60)
    for i in range(8):
        t.forward(13)
        t.right(30)
    t.penup()
    t.setpos(turtleStartSpot)
    t.setheading(0)
    t.forward(60)
    print('\x1b[0;30;42m' + 'letterS FERDIG!' + '\x1b[0m')
def letterT():
    print('\x1b[1;30;41m' + 'STARTER letterT' + '\x1b[0m')
    t.penup()
    t.forward(30)
    turtleEndSpot = t.position()
    t.setheading(90)
    t.pendown()
    t.forward(107.59)
    t.setheading(180)
    t.forward(30)
    t.backward(60)
    t.penup()
    t.setpos(turtleEndSpot)
    t.setheading(0)
    t.forward(60)
    print('\x1b[0;30;42m' + 'letterT FERDIG!' + '\x1b[0m')
def letterU():
def specialSpace():
    t.penup()
    t.setheading(0)
    t.forward(40)
def specialPeriod():
    t.pendown()
    t.dot(5)
    t.penup()
    specialSpace()
#-----------------------------------------------------------------------
def lettersInTheAlphabet():
    letterA()
    print(" ")
    letterB()
    print(" ")
    letterC()
    print(" ")
    letterD()
    print(" ")
    letterE()
    print(" ")
    letterF()
    print(" ")
    letterG()
    print(" ")
    letterH()
    print(" ")
    letterI()
    print(" ")
    letterJ()
    print(" ")
    letterK()
    print(" ")
    letterL()
    print(" ")
    letterM()
    print(" ")
    letterN()
    print(" ")
    letterO()
    print(" ")
    letterP()
    print(" ")
    letterQ()
    print(" ")
    letterR()
    print(" ")
    letterS()
    print(" ")
    letterT()
    print(" ")
    print("Alfabet ferdig\n---------------")
def readyCanvas():
    t.pensize(5)
    t.shape("turtle")
    t.speed(1000000000)
    t.setpos(-1000,0)
    t.color("magenta")
    t.forward(3000)
    t.setpos(-1000,0)
    t.setheading(90)
    t.forward(107.59)
    t.setheading(0)
    t.forward(3000)
    t.pu()
    t.setpos(-1000,0)
    t.color("black")
    t.pensize(2)

readyCanvas()
lettersInTheAlphabet()

print(" ")
print('\x1b[5;31;41m' + 'PROGRAM FERDIG!' + '\x1b[0m')

1 Ответ

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

Если вы определили свои функции для рисования букв, используйте следующую идею:

letters = {
    'A': letterA,   # <— that’s a function
    'B': letterB,
    ...
}

Затем переберите пользовательский ввод и попробуйте нарисовать:

phrase = input('enter phrase: ')
for letter in phrase:
    try:
        letters[letter]()
    except KeyError:
        raise TypeError('invalid character {}'
                        .format(letter)) from None

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

...