2015-11-04 2 views
1
def main(): 
    global currentX,currentY 
    currentX = 0 
    currentY = 0 
    currentlocation = currentX,currentY 
    print("Starting Location is", currentX,currentY) 
    print() 

    #Main menu dialouge 

    print("Please select direction:") 
    print("1, North;") 
    print("2, East;") 
    print("3, South;") 
    print("4, West;") 
    print("5, End this program") 

    #Loop = to 1 so while loop will go on indefitly until option 5 is pressed. 
    loop = 1 
    #try: handles all errors along with except: 
    try: 
     while loop == 1: 
      direction = input("--> ") 
      print() 
      direction = int(direction) 
      if direction == 1: 
       moveN = currentY + 1 
       print("Moved North.",currentlocation) 

      elif direction == 2: 
       currentX + 1 
       print("Moved East.",currentlocation) 

      elif direction == 3: 
       currentY - 1 
       print("Moved South.",currentlocation) 

      elif direction == 4: 
       currentX - 1 
       print("Moved West.",currentlocation) 

      elif direction == 5: 
       loop = 0 
       print("Final location is", currentlocation) 

      else: 
        print("ERROR:", choice, "is an invalid input.\n" 
          "Enter a number from 1 to 5.") 
    except: ValueError 
    print("Please enter a whole number between 1-5") 

main() 

Не могу понять, почему цикл не добавляется к текущему местоположению. я получаю выход как Начиная Местонахождение 0 0Использование цикла while для добавления и вычитания текущего местоположения

Please select direction: 
1, North; 
2, East; 
3, South; 
4, West; 
5, End this program 
--> 3 
Moved South. (0, 0) 
--> 4 
Moved West. (0, 0) 
+2

Прочитайте некоторые из: [переменных Понимание Python и управления памятью] (http://foobarnbaz.com/2012/07/08/понимание-питон-переменные /). – Jkdc

ответ

2

Вы на самом деле не меняется CurrentX и CurrentY, вы просто оценить значения, которые вы хотите их иметь. Чтобы изменить их, вам нужно присвоить им:

currentX = currentX + 1 

или, более сжато:

currentX += 1 

Ваше направление 1 случай также выглядит прочь. По какой-то причине вы назначаете moveN. Я понятия не имею, что это должно делать.

Редактировать: Вам также необходимо обновить currentlocation, чтобы отразить изменения в позиции.

+0

Это еще не решит проблему с OP. Они хотят обновить текущую локацию, но они никогда не касаются этого. –

+0

Вы также должны обращаться к 'currentlocation', не обновляясь в результате изменения' currentX' или 'currentY'. Этот ответ не полностью решает проблему. – Jkdc

+0

Спасибо, я добавил это. Было много проблем, и я только что упомянул о первых, которые я заметил. –

1

Когда вы говорите

currentlocation = currentX,currentY 

Вы на самом деле не создает кортеж со ссылками на CurrentX и CurrentY, вы создаете кортеж с тем, что значения были в CurrentX и CurrentY в то время это было объявлен. Поэтому каждый раз, когда вы меняете их, он не обновляется.

Один из способов исправить это превратить текущее местоположение в функцию.

def currentlocation(): 
    return currentX,currentY 

Тогда вместо

print(currentlocation) 

Просто поместите

print(currentlocation()) 
Смежные вопросы