2013-12-14 5 views
-1

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

Это мой текущий код.

month = 0 
day = 0 
year = 0 

def getDate(): #gets the current date 
    global month 
    global day 
    global year 
    print('What is the current month?') 
    month = month + int(input()) 
    print('What is the current day?') 
    day = day + int(input()) 
    print('What is the current year?') 
    year = year + int(input()) 
    print('The current date is ' + str(month) + '/' + str(day) + '/' + str(year) + '. Is this correct?') 
    YESNO = input() #confirms date 
    if YESNO == 'YES' or YESNO == 'yes': 
     print('Okay.') 
    else: 
     getDate() 

    newMonth = 0 
    newDay = 0 
    newYear = 0 

def newDate(): #gets the desired countdown date 
    global newMonth 
    global newDay 
    global newYear 

    print('What is the desired countdown month?') 
    newMonth = newMonth + int(input()) 
    print('What is the desired countdown day?') 
    newDay = newDay + int(input()) 
    print('What is the desired countdown year?') 
    newYear = newYear + int(input()) 
    print('The desired countdown date is ' + str(newMonth) + '/' + str(newDay) + '/' + str(newYear) + '. Is this correct?') 
    YESNO = input() #confirms date 
    if YESNO == 'YES' or YESNO == 'yes': 
     print('Okay.') 
    else: 
     newDate() 

def COUNTDOWN(): #prints countdown 
    global newMonth 
    global newDay 
    global newYear 

    global month 
    global day 
    global year 

    if newMonth < Month: 
     countDownMonth = int(Month) - int(newMonth) 
    else: 
     countDownMonth = int(newMonth) - int(Month) 
    if newDay < Day: 
     countDownDay = int(Day) - int(newDay) 
    else: 
     countDownDay = int(newDay) - int(Day) 
    if newMonth < Year: 
     countDownYear = int(Year) - int(newYear) 
    else: 
     countDownYear = int(newYear) - int(Year) 
    print(countDownMonth + '/' + countDownDay + '/' + countDownYear) 

getDate() 
newDate() 
COUNTDOWN() 

EDIT Я извиняюсь, я не понял, что это не было отступа. EDIT Мой вопрос: как создать переменную перекрестной функции?

+0

В Python отступы очень важны.Эрго, не могли бы вы правильно отложить свой код? – AVP

+1

Вы не задавали вопрос. Я не знаю, в какой части вашей проблемы вам нужна помощь, чтобы понять. – user2357112

+0

Почему нижние три строки находятся под getDate()? 'global newMonth global newDay global newYear' Также, если вы получаете какую-либо ошибку, отправьте эту информацию о трассировке. – gsmaker

ответ

0

Я просто сделать код работоспособным, как показано ниже:

month = 0 
day = 0 
year = 0 
newMonth = 0 
newDay = 0 
newYear = 0 

def getDate(): #gets the current date 
    global month 
    global day 
    global year 

    print('What is the current month?') 
    month = month + int(input()) 
    print('What is the current day?') 
    day = day + int(input()) 
    print('What is the current year?') 
    year = year + int(input()) 
    print('The current date is ' + str(month) + '/' + str(day) + '/' + str(year) + '. Is this correct?') 
    YESNO = raw_input() #confirms date 
    print YESNO 
    if YESNO == 'YES' or YESNO == 'yes': 
     print('Okay.') 
    else: 
     getDate() 

def newDate(): #gets the desired countdown date 
    global newMonth 
    global newDay 
    global newYear 

    print('What is the desired countdown month?') 
    newMonth = newMonth + int(input()) 
    print('What is the desired countdown day?') 
    newDay = newDay + int(input()) 
    print('What is the desired countdown year?') 
    newYear = newYear + int(input()) 
    print('The desired countdown date is ' + str(newMonth) + '/' + str(newDay) + '/' + str(newYear) + '. Is this correct?') 
    YESNO = raw_input() #confirms date 
    if YESNO == 'YES' or YESNO == 'yes': 
     print('Okay.') 
    else: 
     newDate() 

def COUNTDOWN(): #prints countdown 
    global newMonth 
    global newDay 
    global newYear 
    global month 
    global day 
    global year 

    if newMonth < month: 
     countDownMonth = int(month) - int(newMonth) 
    else: 
     countDownMonth = int(newMonth) - int(month) 
    if newDay < day: 
     countDownDay = int(day) - int(newDay) 
    else: 
     countDownDay = int(newDay) - int(day) 
    if newMonth < year: 
     countDownYear = int(year) - int(newYear) 
    else: 
     countDownYear = int(newYear) - int(year) 
    print(str(countDownMonth) + '/' + str(countDownDay) + '/' + str(countDownYear)) 

getDate() 
newDate() 
COUNTDOWN() 

В моем окр, этот код работает, но я не уверен, является ли выход правильно или нет.

+0

ОК, это работает, несколько незначительных ошибок капитализации и проблема с строкой в ​​нижней части COUNTDOWN() в моем источнике, но я хотел бы уйти от глобальных переменных – kookman98

0

Глобальное ключевое слово в python используется для повторной привязки глобальной переменной в локальном контексте. При этом, как правило, рекомендуется избегать использования глобального ключевого слова, когда это возможно.

В коде, который вы опубликовали, необходимо использовать глобальные функции getDate и newDate, чтобы связать эти имена в глобальной среде. Однако в COUNTDOWN, поскольку вы не перепроверяете имена и получаете доступ только к значениям, привязанным к этим именам, глобальный не нужен.

Для получения дополнительной информации смотрите здесь: Use of "global" keyword in Python

+0

ahhh, спасибо – kookman98

0

использовать global ключевое слово, например, так:

def function(): 
    global variable 

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

Используйте это только в том случае, если вы меняете переменную, а не только на то, что находится внутри нее. например,

def example(): 
    global eg 
    eg = 1 

Здесь мы используем глобальные, потому что мы изменяем содержание eg «s. Если бы мы вместо ИСПОЛЬЗОВАТЬ eg «s содержание, чтобы сделать что-то другое, мы бы это сделать:

def example(eg): 
    eg2 = eg 

Здесь мы говорим:» Я хочу, чтобы использовать значение, которое eg содержит, но я не хочу, чтобы изменить его ». Тогда мы объявили eg2 быть такой же, как eg, но мы не изменили eg

Если вы хотите, чтобы затем использовать результаты примера функции, необходимо добавить строку «возвращение».

def example(eg): 
    eg2 = eg 
    return eg 

тогда мы вызываем функцию следующим образом:

eg3 = example(eg) 

Это помещает результат примера в EG3.

Надеюсь, что это поможет :)

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