2016-03-28 2 views
1

Я написал функцию, которая выполняет множественную запись пользователя и работает с введенными данными. Следующая функция находится в file1Возврат к определенным страницам с использованием разных файлов в Python

def dimensions 
    f = open("file.txt", "a") 
     distance= (raw_input("Enter distance: ")) 
     height= raw_input("Enter height: ")) 
     length= raw_input("Enter length: ")) 
     f.write(fullInfo) 
     f.close() 

Ниже в file2. File2 вызовов file1 с import Этой функция dimensions называются так:

def calculation(): 
     print "1- Enter dimensions" 
     print "2- Enter something else" 
     choice = raw_input("") 
     if choice == 1: 
      file1.dimensions 

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

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

if distance == 'exit': 
    file2.calculation 

Любая помощь или указатели о том, как я могу позволить пользователю оторваться от вопросов и обратно в меню будут оценены. Благодаря

ответ

0

Добавить дополнительный параметр, называемый параметром 0, что означает, что пользователь хочет, чтобы перезагрузить и добавить, если условие, которое проверяет, если пользователь ввел 0

def dimensions 
    f = open("file.txt", "a") 
    distance= (raw_input("Enter distance: ")) 
    if distance == 0: # or any other value that may seem fit 
      # handle the situation to restart the program 
    height= raw_input("Enter height: ")) 
    length= raw_input("Enter length: ")) 
    f.write(fullInfo) 
    f.close() 
+0

Моя проблема с обработкой ситуации, если вводится значение.Я не знаю, что вводить и вызывать функцию меню не работает, потому что файл, который он уже вызывает, измеряет функцию() – Johny

0
  • fullInfo не определен в коде, публикуемой ,
  • if choice == 1: никогда не будет правдой, так как raw_input("")/choice является строкой и должен быть отлит до int для сравнения с 1, чтобы иметь смысл.

В приведенном ниже фрагменте кода dimensions отсутствуют круглые скобки и двоеточие, и distance не должны быть вложенными/с отступом под f = open("file.txt", "a")

def dimensions 
    f = open("file.txt", "a") 
     distance= (raw_input("Enter distance: ")) 

Вы фактически не вызов функцию, если вы не добавите скобки. Это относится и к calculation ниже:

if distance == 'exit': 
    file2.calculation 

"(...) импортирующей оба файла в другом (...)" называется циклическим импорт или круговой импорт. Есть способы заставить его работать, но лучше избегать его, если это возможно. Подробнее об этом here, если вам интересно.

Да, жаль ... Мне было скучно

menu.py

import json 
import os 
import get_dimensions 


def dims_load(dims_json_file): 
    """ you hand this function a filename and it returns a dictionary of dimensions """ 
    with open(dims_json_file, "r") as dims_json: 
     return json.loads(dims_json.read()) 

def dims_save(dims_dict, dims_json_file): 
    """ you hand this function a dictionary and a filename to save the dimensions """ 
    with open(dims_json_file, "w") as dims_json: 
     dims_json.write(json.dumps(dims_dict)) 

def menu(): 
    dimensions_file = "dimensions.json" 
    file_exists = os.path.isfile(dimensions_file) 
    print "1- Enter dimensions" 
    print "2- Load previous dimensions" 
    print "3- Johny's funky function!" 
    choice = raw_input() 
    try: 
     choice = int(choice) 
    except ValueError as e: 
     print "Only numbers can be entered. Error details:", str(e) 
    if choice == 1: 
     dims_dict = get_dimensions.prompt_user() 
     if "exit" in dims_dict.values(): 
      print "User chose to exit get_dimensions()" 
      menu() 
     else: 
      if file_exists: 
       print "overwriting your precious data!" 
      dims_save(dims_dict, dimensions_file) 
    elif choice == 2: 
     if file_exists: 
      print dims_load(dimensions_file) 
     else: 
      print "No dimensions file found. Can't print" 
    elif choice == 3: 
     print "Johny's funky function has yet to see the light of day..." 
    else: 
     print "I have no idea what you want. Make up your mind, human!?" 

menu() 

get_dimensions.py

def prompt_user(): 
    dims = { 
     "distance":"", 
     "length":"", 
     "height":"" 
    } 
    dims_keys = dims.keys() 
    current = 0 
    while current < len(dims_keys): 
     dims[dims_keys[current]] = raw_input("Enter " + dims_keys[current] + " (type 'exit' to return to menu): ") 
     current += 1 
     if "exit" in dims.values(): 
      return dims 
    return dims 
+0

Спасибо за ваш ответ. Большинство из этих ошибок приходят от меня, пытаясь упростить код для публикации здесь. Моя проблема в том, что я хотел бы, чтобы пользователь смог вернуться к методу расчета (т. Е. Меню), находясь внутри метода измерения. Проблема заключается в том, что вычисление вызывает измерение через «импорт», поэтому я не могу импортировать вычисления в измерение, поэтому нет способа вернуться в меню. – Johny

+0

Я переписываю все это сейчас hehe – jDo

+0

@Johny Проверьте мой обновленный ответ – jDo