2013-07-14 4 views
-3

Итак, ниже мой код, я должен создать список, содержащий места, в которых должно быть расстояние. Пользователь должен выбрать два разных места, чтобы посмотреть, как далеко друг от друга они находятся в милях, после чего им предоставляется возможность конвертировать в километры. Однако я как-то завершил код, чтобы он работал, и затем я добавил добавить оператор if, который должен сказать что-то вроде «если пользователь входит в place1, place2 или place 3, а затем продолжайте просить пользователя ввести второе место, иначе перезапустите программу вернуться к началу. Однако, если заявление не написано правильно, и теперь он говорит: «Во-вторых, не определен»Почему непредсказуемо мое заявление?

print 'The available places to select from are:' 

print 'place1, place2, place3: ' 


place1 = 50 
place2 = 40 
place3 = 30 
Convert = 1.609344 



First = str(raw_input('Please select from the list where you are coming from')) 
if raw_input == 'place1' 'place2' 'place3': 
    Second = str(raw_input('Please select where you are going to: ')) 
else: 
    print 'please press any key to restart' 

Distance = First + Second 

print "the distance between the two places are", Distance, "miles" 



Kilometres = bool(input('Would you like to convert to Kilometres? please type True to convert or False to exit: ')) 
if True: 
     print 'The distance in Kilometres is',First + Second/Convert, 'Kilometres' 

else: 
     print 'press any ket to terminate' 
+5

Не является ли ошибка само собой разумеющейся? В нем указано, что ваш отступ в инструкции 'if' неверен. Вы должны переместить блок if-else в 4 пробела. –

+1

Отступы важны - ваш 'if' /' else' не может быть отступом –

+0

Другая ошибка заключается в том, что вы определяете «Расстояние» до того, как были установлены Первый и Второй. –

ответ

7

не отступ, если заявление.

First = int(input('Please select from the list where you are coming from')) 
if answer in ['place1', 'place2', 'place3']: 
    Second = int(input('Please select where you are going to: ')) 
else: 
    print 'please press any key to restart' 

вместо

First = int(input('Please select from the list where you are coming from')) 
    if answer in ['place1', 'place2', 'place3']: 
     Second = int(input('Please select where you are going to: ')) 
    else: 
     print 'please press any key to restart' 

Редактировать:

Кажется, вам нужна помощь. Я переработал ваш код и добавил некоторые комментарии, чтобы надеяться, что все будет ясно.

#using a dictionary allows us to associate, or hash, a string with a value 
place_dict = {"place1":50,"place2":40,"place3":30} 

convert = 1.609344 

def run_main(): 
    #placing the bulk of the program inside of a function allows for easy restarting 
    print 'The available places to select from are:' 
    print 'place1, place2, place3: ' 

    first = raw_input('Please select from the list where you are coming from: ') 
    second = raw_input('Please select where you are going: ') 
    #the values the user puts in are now stored in variables called 'first' and 'second', so if the user inputs "one", then first == "one" 

    if first not in place_dict or second not in place_dict: 
     #check to ensure that both first and second are in the place place dictionary 
     #if not, then return none to the main program 
     raw_input('Press any key to restart...') 
     return None 

    #an else is not needed here, because if the if statement executes, then we will not reach this point in the program 

    #this returns the dictionary value of the first value that the user inputs + the second. 
    return place_dict[first] + place_dict[second] 


if __name__ == "__main__": 
    #this line says that if we are running the program, then to execute. This is to guard against unwanted behavior when importing 

    distance = None 
    #set an initial variable to None 

    while distance is None: 
     #run the main program until we get an actual value for distance 
     distance = run_main() 

    print "the distance between the two places are", distance, "miles" 


    kilometres = bool(input('Would you like to convert to Kilometres? please type True to convert or False to exit: ')) 
    if kilometres == True: 
     print 'The distance in Kilometres is',distance/convert, 'Kilometres' 

    else: 
     print 'press any key to terminate'  
+0

Спасибо, что ответили, я попробовал это, но казалось, что, когда я это сделал, оператор if работал неправильно. Например, я удаляю затем отступы, а затем преднамеренно печатаю что-то другое, отличное от place1 или place2 или place3, а вместо вывода инструкции else, которое просто сбой, а выходы place5 не определены. Которое я знаю, это не определено, но оно должно печатать то, что в моем заявлении else. Есть идеи? – Daniel

+0

Несколько вещей ... прямо сейчас, вы уже не являетесь оператором, не перезапускаете программу. Что происходит, вы нажимаете оператор else, а затем код продолжает выполняться, он не перезапускается.Вы можете использовать функцию, чтобы исправить это. Во-вторых, вы сохраняете значение, принимаемое как первое, но тогда доступ - это ответ (если ответ в ... должен быть, если первый в). В-третьих, вы вводите свой ввод для First как int, но затем сравниваете его со строками. Вам не нужно бросать его. – Schiem

+0

Извините, Schiem, что-то меня озадачило, я могу понять, как инструкция else не перезапускает программу, но что касается второй проблемы, я не совсем уверен, как исправить это:/и да, поскольку для третьего это было все, что я мог подумать о том, что делать, я знаю, когда это было показано некоторое время назад, они составили список, в котором было название места с номером, который должен был представлять расстояние, однако я не мог вспомнить, как они это делали, так что с головы до ног и пытаясь использовать несколько разных источников, я не мог найти пример, когда кто-то создает список, используя строку, связанную с литералом. – Daniel

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