2015-07-31 1 views
-1

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

https://drive.google.com/file/d/0B_K2RFTege5uRF9IeGJiYllQbGs/view?usp=sharing

Я использую Python 3.4.3

Please enter a direction from the list above.: up

Please enter how many steps you would like to take.: 5

Traceback (most recent call last): 
    File "D:\Downloads\programming-assignment-5.py", line 63, in <module> 
    main() 

    File "D:\Downloads\programming-assignment-5.py", line 61, in main 
    move_robot(direction,steps) 

    File "D:\Downloads\programming-assignment-5.py", line 28, in move_robot 
    start[1].append(int(step)) 
AttributeError: 'int' object has no attribute 'append' 

Вот код, который я до сих пор:

import math 
import sys 

def calculate_distance(pos1, pos2): 
    pos1 = [x,y] 
    pos2 = [x,y] 
    #distance = math.sqrt((((-)**2)+((-)**2)) 


def command_list(): 
    print("Utilize the folowing commands") 
    print("Up, Down, Left, Right") 
    print("press 'E' to Exit") 

def move_robot(step_sequence,step): 
    x = 0 
    y = 0 
    start = [0,0] 
    #end = [x,y] 
    #print(start) 
    moveRobot = [["up"],["down"],["left"],["right"]] 
    while step_sequence != "e": 
     if moveRobot[0][0] == step_sequence: 
      #x = x + int(step) 
      #start.append(int(step)) 
      start[1].pop(0) 
      start.insert[1](step) 

      print("you moved UP",step, "space") 
      print(start) 
     elif moveRobot[1][0] == step_sequence: 
      print("You moved DOWN 1 space") 
      down = 0 
     elif moveRobot[2][0] == step_sequence: 
      print("You moved LEFT 1 space") 
      left = 0 
     elif moveRobot[3][0] == step_sequence: 
      print("You moved RIGHT 1 space") 
      right = 0 
     elif step_sequence == "e": 
      sys.exit() 
     elif step_sequence != (moveRobot[0][0] or moveRobot[1][0] or moveRobot[2][0] or moveRobot[3][0]): 
      print() 
      print("You have Entered an Invalid command.") 
      print("Please enter one of the following commands.") 
      print("Up, Down, Left, Right") 
     print() 
     step_sequence = str(input("Please enter a direction from the list above.: ")) 
     steps = int(input("Please enter how many steps you would like to take.: ")) 

     print(start) 
    return 


def main(): 
    command_list() 
    print() 
    direction = str(input("Please enter a direction from the list above.: ")) 
    steps = int(input("Please enter how many steps you would like to take.: ")) 

    move_robot(direction,steps) 
    #calculate_distance(move_robot(direction,steps)) 
main() 
+0

и эта ошибка будет .....? – CoryKramer

+3

Пожалуйста, разместите трассировку, она содержит много полезной информации. – Will

+0

Нужно указать stacktrace, чтобы дать совет здесь. Также почему 'print (« вы переместили 1 космос »)' повторяется в каждом случае? – shuttle87

ответ

1
if matrix[0][1] == command : 

Это будет дайте вам индекс за пределами ошибки, потому что matrix является двумерным списком 4x1, а [0][1] будет действительной координатой, если это было 4x2.

Быстрое исправление заключается в том, чтобы переключать порядок каждой из ваших пар координат, например. [0][1] будет [1][0]. Но вы действительно должны просто использовать одномерный список, например. matrix = ["up", "down", "left", "right"]. Тогда ваши условные обозначения упростились бы до if matrix[0] == command:, if matrix[1] == command: и т. Д. Кроме того, вы не должны использовать какой-либо список вообще и просто вставляете строковые литералы напрямую, например. if command == "up":

+0

Удивительно, что это имеет смысл. Узнал что-то новое сегодня! Спасибо –

0

matrix представляет собой массив, который содержит несколько массивов одноэлементные, так что ваши индексы перепутаны:

if matrix[0][0] == command : 
    print ("you moved up 1 space") 
if matrix[0][1] == command : 
    print ("you moved up 1 space") 
if matrix[0][2] == command : 
    print ("you moved up 1 space") 
if matrix[0][3] == command : 
    print ("you moved up 1 space") 
if command == "c": 
    sys.exit() 
1

С обновленным кодом, который вы пытаетесь добавить к междунар, вы не можете сделать это, вместо вы хотите установить start[1] = int(step)

Так что начало будет выглядеть примерно так:

while step_sequence != "e": 
     if moveRobot[0][0] == step_sequence: 
      #x = x + int(step) 
      start[1] = int(step) 
      print("you moved UP",step, "space") 
      print(start) 
+0

Вы серьезно ничего себе, это было так просто! лол –

Смежные вопросы