2017-03-24 14 views
-3

私は可能な限り単純化しようとします。私のコードは、ユーザーがバーコードを使ってデータベースから複数の製品を入力するように設計されています。彼らが注文した製品の名前と製品の合計価格。それが最初に実行されるコードの私の予想出力は私のコードに期待される出力が得られません

GTIN = int(input("input your gtin-8 number: ")) 
      return GTIN # Breaks the loop and returns the value 
     except: 
      print ("Oops! That was not a valid number. Try again") 

しかし、このコードは、何らかの理由でスタートラインとして、コードの末尾に最初に実行されているが

continue_shopping=int(input("press 0 to stop shopping and print your reciept or press 1 to continue shopping")) 
if continue_shopping != 0 and continue_shopping != 1: 
    print("make sure you enter a valid number") 

私のコードに有用なインプットまたは批判がありましたら幸いです。

ここで興味のあるのは、エンティティとしてのコードです。あなたは(つまり、DEFが何をするかだ)関数を作成するときに機能をインスタンス化するまで、それは何もしません任意の助け

import csv 
import locale 
from decimal import * 
total_price = [] 

locale.setlocale(locale.LC_ALL, '') 
def read_csv_file(): 
    global total_price 
    """ reads csv data and appends each row to list """ 
    csv_data = [] 
    with open("task2.csv") as csvfile: 
     spamreader = csv.reader(csvfile, delimiter=",", quotechar="|") 
     for row in spamreader: 
      csv_data.append(row) 
    return csv_data 


def get_user_input(): 
    global total_price 
    """ get input from user """ 
    while True: 
     try: 
      GTIN = int(input("input your gtin-8 number: ")) 
      return GTIN # Breaks the loop and returns the value 
     except: 
      print ("Oops! That was not a valid number. Try again") 


def search_user_input(product_data): 
    global total_price 
    repeat="" 
    # Pass the csv data as an argument 
    """ search csv data for string """ 
    keep_searching = True 

    while keep_searching: 
     gtin = get_user_input() 
     for row in product_data: 
      if row[0] == str(gtin): 
       product = row[1] 
       price = round(float(row[2]),2) 
       return(product, price) 
     while True: 
      try: 
       repeat = input("not in there? search again? If so (y), else press enter to continue") 
       break 
      except: 
       print("please make sure you enter a valid string") 
     if repeat != 'y': 
      keep_searching = False 
      return None 


def quantity(): 
    fileOne = open('receipt.csv', 'a') 
    writer = csv.writer(fileOne) 
    global total_price 
    product_data = read_csv_file() 
    matches = search_user_input(product_data) 
    if matches: # Will not be True if search_user_input returned None 
     print("apple") 
     product, price = matches[0], matches[1] 

     order = int(input("How much of {} do you want?".format(product))) 
     TWOPLACES = Decimal(10) ** -2 
     subt = order * pricea 
     subtotal = Decimal(subt).quantize(TWOPLACES) 
     values = [str(product), str(price), str(subtotal)] 
     print('values are ',values) 
     writer.writerows((values,)) 
     total_price.append(order * price) 

continue_shopping=int(input("press 0 to stop shopping and print your reciept or press 1 to continue shopping")) 
if continue_shopping != 0 and continue_shopping != 1: 
    print("make sure you enter a valid number") 
    if (continue_shopping == 0): 
     fileOne.close() 
     fileTwo = open("receipt.csv" , "r") 
     reader = csv.reader(fileTwo) 
     for row in reader: 
      if row != None: 
       print(row) 
    elif continue_shopping==1: 
     quantity() 
quantity() 
+1

* "しかし、このコードは何らかの理由で開始行としてコードの最後に実行されます。" *もちろん、もちろんです。これは、関数定義の一部ではない最初のステートメント(インポートとは別に)です。あなたは実際にあなたが定義した関数を呼び出すわけではありません。 – SiHa

答えて

0

いただきありがとうございます。たとえば、人が買い物をしたかどうか尋ねる前にread_csv_file()関数を実行したい場合は、これを行う必要があります。 (または類似のもの)

#all your functions are above this snippet. 

read_csv_file() 

continue_shopping=int(input("press 0 to stop shopping and print your reciept or press 1 to continue shopping")) 

私はこれが助けてくれることを願っています!

+0

これはまさに私が探していたものです!非常に親切にありがとうございます – MeTooThanks

+0

あなたは非常に歓迎された仲間です。 – alex

関連する問題