2015-10-03 2 views
0

Скрипт запускается до тех пор, пока не будет вызвана функция «takeotes», а затем просто остановится, когда она должна запустить эту функцию. Нет никаких ошибок, которые он просто останавливает. Почему это?Python не работает Функция

# Please note that this only works in integer values, since there is no change in pence 
notes = (1,5,10,20,50) #Value of notes 
quantities = [10,8,5,5,1] #Quantities of notes 
# Defining variables 
notesout = [] 
total = 0 
x = -1 
payment = [] 
# This loop works out the total amount of cash in the cash register 
while (x < 4): 
     x += 1 
     calc = notes[x]*quantities[x] 
     total += calc 
mon_nd = 70 # Money needed 
def takenotes(): 
     print("Please input each notes value, when finished type \"stop\"") 
     # If input is an int then add to payment list, if not then work out the change 
     payment = [20,20,20,20] 
     main() 

def main(): 
     # Finds the value of the cash given 
     paymentV = sum(payment) 
     changeT = paymentV - mon_nd 
     # Change the quantities of the 'quantities' variable 
     for i in payment: 
       quantities[notes.index(i)] = quantities[notes.index(i)] + 1 
     while(changeT < 0): 
       # Works out what amount of change should be given 
       for i in reversed(notes): 
         if (changeT - i >= 0): 
           notesout.append(i) 
           quantities[notes.index(i)] = quantities[notes.index(i)]-1 
           changeT -= i 
         else: 
           return True 
     print(notesout) 
takenotes() 
+0

'payment = [20, 20, 20, 20]' не изменяет глобальную переменную, используйте 'global' или лучше передают значение функции' main() '. – bereal

+1

фактически @imaluengo это неправильно. Обзор кода - это сайт для ** рабочего ** кода, а не для отказа от кода. Это означает: код должен работать не только, он должен давать правильные результаты, так как этот вопрос не является ропий для [codereview.se]. Для получения дополнительной информации см. Https://meta.stackoverflow.com/questions/253975/be-careful-when-recommending-code-review-to-askers?s=1|1.0000 – Vogel612

+0

@ Vogel612 Ouch! Не знал об этом, извините. Полностью подумал, что «CodeReview» на самом деле должен был просматривать код и находить ошибки (поскольку ваш связанный вопрос говорит, что я один из тех, кто не читал справку CodeReview, но я только что выучил хороший урок). Благодаря! Я подумаю дважды, прежде чем снова рекомендовать codereview! :П –

ответ

0

Он не «просто остановился». takenotes звонки main; он попадает в цикл for внутри цикла while; первый раз, changeT - i не больше 0, поэтому он возвращает True. Поскольку вы ничего не делаете с возвращаемым значением от main, ничего не печатается, и программа заканчивается.

0

Прежде всего, вам понадобится инструкция global, чтобы изменить любую глобальную переменную (например, payment).

payment = [] 

def takenotes(): 
    global payment 
    payment = [20, 20, 20, 20] 

Вы также не имеют input() функцию в вашем коде. См. the docs.

0

Этот сценарий работает правильно. Он вызывает функцию takeotes(), а затем выполняет ее нормально (отображает сообщение, устанавливает local платежный массив, а затем выполняет функцию main()). Вы можете проверить это на this online Python interpreter. Также вы можете выполнить его шаг за шагом here, чтобы узнать, что именно делает ваш скрипт.

Также, когда вы хотите редактировать глобальную переменную, вы должны использовать глобальный оператор. Прочтите ответ для this SO question для получения дополнительной информации.