Ошибка с операторами if / elif и командами turtle

#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 paren

3. Я предполагаю, что это попытка преобразования типов. Вместо этого следует использовать 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 to int , но это не должно было иметь значения, если 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.')