2016-02-11 26 views
0

我正在寫一段代碼來完成滾動。我努力在文本文件中獲取價格並將其乘以用戶輸入的數量。我不知道如何解決。努力從文本文件中乘以一個數字(Python)

這就是我迄今爲止所做的;

的代碼部分也是如此,下面

def receipt(): 
    food = input("Enter the product code for the item you want.") 

    fi = open("data.txt","r") 
    info = fi.readlines() 
    fi.close() 
    item = False 
    for li in info: 
     if(li.split(":")[0].lower() == food): 
      print(li.split(":")[1]) 
      item = True 
      quantity = input("How many do you want?")   
      print("£" + quantity) 
receipt() 

的文本文件:

12345670:Burgers, £1:1.30 
19203123:Cheese, £2.50:2.50 
98981236:Crisps, 0.55p:0.55 
56756777:Alphabetti Spaghetti, £1.45:1.45 
90673412:Sausages, £2.30:2.30 
84734952:Lemonade, 0.99p:0.99 
18979832:Ice Cream, £1.50:1.50 
45353456:6 Pack of Beer, £5:5.00 
98374500:Gum, 0.35p:0.35 
85739011:Apples, 0.70p:0.70 

我想我必須使用.append或名單,但我不知道他們是如何工作的我還沒有學到他們。

+2

有什麼麻煩?什麼是錯誤?預期產出是多少? – timgeb

+1

爲什麼每一行的價格是兩倍? – timgeb

+0

你的代碼試圖進行乘法運算的地方在哪裏?如果你不發佈代碼,我們應該如何向你展示你做錯了什麼? – Barmar

回答

0

你只需要提取的文件中的行價,並將其轉換成一個浮點數:

price = float(li.split(":")[2]) 

會給你項目的價格上給定線路。這會將行尾的價格轉換爲浮點數或十進制數,然後您可以使用它。

0

要獲得總價格,您需要獲取用戶輸入的數量並將其轉換爲整數(浮點數實際上沒有意義)。您可以通過li.rsplit(':',1)[-1]獲得價格。不要忘記將其轉換爲浮動。

演示:

>>> quantity = int(input('how many do you want? ')) # make int out of input string 
how many do you want? 10 
>>> li = '90673412:Sausages, £2.30:2.30' # example line 
>>> quantity * float(li.rsplit(':', 1)[-1]) 
23.0 

應該讓你開始那。

0

我建議更新for循環,像這樣的線分割成各自的部分,那麼你可以操縱的部分,你需要像id.lower()float(price)

for li in info: 
    id,desc,price = li.split(':') 
    if id.lower() == food: 
     item = True 
     quantity = int(input("How many do you want? ")) 
     print("£" + str(quantity*float(price))) 
0

@狼:請嘗試下面的代碼,它應該工作。由於從 txt文件檢索到的數據是ASCII格式,因此if條件似乎失敗。

import chardet 

def receipt(): 
    food = input("Enter the product code for the item you want.") 
    fi = open("data.txt","r") 
    info = fi.readlines() 
    fi.close() 
    item = False 
    for li in info: 
     a = li.split(":")[0].lower() 
     encoding = chardet.detect(a) 
     #print encoding 
     #int(a) 
     #print int(a) 
     if int(a) == food: 
      #print "pass" 
      print(li.split(":")[1]) 
      #print item 
      item = True 
      quantity = input("How many do you want?") 
      print(quantity) 
receipt() 
+0

我試過這個,但它沒有工作,它告訴我,有'沒有模塊命名chardet' – Wolf

+0

@Wolf:chardet是一個點子包,請嘗試下載它。 – Bangi

相關問題