#python #turtle-graphics
#python #черепаха-графика
Вопрос:
У меня возникла странная ошибка с операторами if / else. По какой-то причине, когда я использую этот код (вводный проект для графики turtle)
from turtle import *
print('Hello. I am Terry the Turtle. Enter a command to make me draw a line, or ask for help.')
on = True
shape('turtle')
if on == True:
c1 = str(input('Enter command: ')
if c1 == 'forward':
c2 = eval(input('How many degrees? ' ))
right(c2)
elif c1 == 'right':
c2 = eval(input('How many degrees? ' ))
right(c2)
elif c1 == 'left':
c2 = eval(input('How many degrees? ' ))
left(c2)
elif c1 == 'goodbye':
print('Bye!')
on = False
else:
print('Possible commands: forward, right, left, goodbye.')
По какой-то странной причине операторы if
and elif
продолжают возвращать синтаксические ошибки, но, похоже, у них нет видимых ошибок. Я пытался делать подобные вещи, но он продолжал возвращать синтаксические ошибки. Есть ли какой-нибудь способ это исправить?
Извините, если это глупый вопрос, я здесь впервые, и я просто в замешательстве.
Комментарии:
1. Почему вы употребляете
eval(input())
?2. В любом случае, опечатка…
str(input('Enter command: ')
<— Отсутствует close paren3. Я предполагаю, что это попытка преобразования типов. Вместо этого следует использовать OP
int(input())
, если это так.4. Пожалуйста, отправьте фактическое сообщение об ошибке. Вы уверены, что это операторы
if
/elif
, а неeval
?
Ответ №1:
Я думаю, это то, что вы хотите
from turtle import *
print('Hello. I am Terry the Turtle. Enter a command to make me draw a line, or ask for help.')
on = True
shape('turtle')
# Get commands until user enters goodbye
while on:
c1 = str(input('Enter command: '))
if c1 == 'forward':
# Ask how far when moving
c2 = int(input('How far? '))
# Use forward to move
forward(c2)
elif c1 == 'right':
c2 = int(input('How many degrees? '))
right(c2)
elif c1 == 'left':
c2 = int(input('How many degrees? '))
left(c2)
elif c1 == 'goodbye':
print('Bye!')
on = False
else:
print('Possible commands: forward, right, left, goodbye.')
Это должно выполняться с помощью Python3 (например python3 myrtle.py
).
Комментарии:
1. Что вы изменили, что было не так? Единственное, что я заметил с первого взгляда, это
while on:
.2. Я исправил отступ, но OP также исправил это. Я изменил значение
eval
toint
, но это не должно было иметь значения, если OP вводил числа. Заявление OP о том, что «операторы продолжают возвращать синтаксические ошибки», показалось подозрительным, поэтому я просто хотел доказать, что в скрипте на самом деле не было синтаксических ошибок.
Ответ №2:
Для c1 вам не нужно указывать, что это строка, поскольку входные данные уже являются строками и нет необходимости в «оценке».
Попробуйте:
from turtle import *
print('Hello. I am Terry the Turtle. Enter a command to make me draw a line, or ask for help.')
on = True
shape('turtle')
while on == True:
c1 = input('Enter command: ')
if c1 == 'forward':
c2 = int(input('How far forward? ' ))
forward(c2)
elif c1 == 'right':
c2 = int(input('How many degrees? ' ))
right(c2)
elif c1 == 'left':
c2 = int(input('How many degrees? ' ))
left(c2)
elif c1 == 'goodbye':
print('Bye!')
on = False
else:
print('Possible commands: forward, right, left, goodbye.')