2014-11-25 72 views
1

我是新來的一般的蟒蛇和編碼。 所以我有一個菜單,其中有多個功能的程序。單獨的每個功能都可以自行工作,但是當我將它們放在一起時,它們通常不會完全執行,而是停止一半或不工作。 示例 - 刪除功能不會刪除我告訴它。 def show_coffee只會顯示第一個描述和重量而已,沒有別的。 我能做些什麼來使功能完全執行?完全完成一項功能

import os 
def main(): 
choice ='' 
fun=[] 
while choice != 4: 
    menu() 
    choice=getUserChoice() 
    if choice !=4: 
     fun=process_choice(choice,fun) 
     print(fun) 

print("Goodby!") 

def process_choice(choice,fun): 
#fun=fun1 
if choice == 0: 
    fun=add_coffee(fun) 
elif choice == 1: 
    fun=show_coffee(fun) 
elif choice == 2: 
    fun=search_coffee(fun) 
elif choice == 3: 
    fun=modify_coffee(fun) 
else: 
    print(choice,"is not a valid choice.") 
return fun 


def add_coffee(fun): 
another= 'y' 
coffee_file=open('coffee.txt', 'a') 
Description={} 
while another == 'y' or another == 'Y': 
    print('Enter the following coffee data:') 
    descr=input('Description: ') 
    qty= int(input('Quantity (in pounds): ')) 
    coffee_file.write(descr + '\n') 
    coffee_file.write(str(qty) + '\n') 
    print("Do you want to add another record?") 
    another = input("Y=yes, anything else =no: ") 

    return fun 


coffee_file.close() 
print('Data append to coffee.txt.') 


def show_coffee(fun2): 
coffee_file=open ('coffee.txt', 'r') 
descr=coffee_file.readline() 
while descr != "": 

    qty= str(coffee_file.readline()) 

    descr=descr.rstrip('\n') 
    print('Description:', descr) 
    print('Quantity:', qty) 
    descr= coffee_file.readline() 
    fun=fun2 
    return fun 
coffee_file.close() 

def search_coffee(fun3): 
found=False 
search =input('Enter a description to search for: ') 
coffee_file=open('coffee.txt', 'r') 
descr=coffee_file.readline() 
while descr != '': 
    qty= float(coffee_file.readline()) 
    descr = descr.rstrip('\n') 
    if descr== search: 
     print('Description:', descr) 
     print('Quantity:', qty) 
     found=True 
    descr=coffee_file.readline() 
    fun=fun3 
    return fun 
coffee_file.close() 
if not found: 
    print('That item was not found in the file.') 




def modify_coffee(fun4): 
found=False 
search=input('Which coffee do you want to delete? ') 
coffee_file=open('coffee.txt', 'r') 
temp_file=open('temp.txt', 'w') 
descr=coffee_file.readline() 
while descr != '': 
    qty=float(coffee_file.readline()) 
    descr=descr.rstrip('\n') 
    if descr !=search: 
     temp_file.write(descr + '\n') 
     temp_file.write(str(qty) + '\n') 
    else: 
     found=True 
    descr=coffee_file.readline() 
    fun=fun4 
    return fun 
coffee_file.close() 
temp_file.close() 
os.remove('coffee.txt') 
os.rename('temp.txt', 'coffee.txt') 
if found: 
    print('The file has been update.') 
else: 
    print('The item was not found in the file.') 




def menu(): 
print(''' 
0. Add or Update an entry 
1. Show an entry 
2. Search 
3. remove 
4. Remove number 
''') 


def getUserChoice(): 
choice=-1 
while choice <0 or choice > 3: 
    print("Please select 0-3: ",end='') 
    choice=int(input()) 
return choice 
+0

請讓你的縮進正確 – biobirdman 2014-11-25 03:52:54

+0

一般來說,你可以在函數中使用'return'一次。可以有多個'return'語句,但只有一個被執行。在返回時,該函數將停止執行。如果你使用while循環,返回將跳出循環。 – 2014-11-25 04:30:17

回答

0

您正在定義函數,但這不會調用函數。在Python中執行此操作的標準方法是使用文件底部的if __name__=="__main__":語句。執行該文件(而不是由另一個腳本導入的函數/類)時,執行if __name__=="__main__":範圍內的代碼塊。

獲得舒適與此,它是有用的,乾淨的:)好讀 - What does if __name__ == "__main__": do?

因此,舉例來說...

在你的文件底部...

if __name__=="__main__": 
    main()