无法将字符串转换为浮点数?

时间:2017-05-13 11:11:19

标签: python

我正在编写一个代码,它基本上要求用户输入一个8位数字,然后从文本文件中读取它以查看它是否有效,然后询问用户数量。它工作正常,直到它需要计算产品的总和(乘以输入的数量)?它产生了这个错误:

Traceback (most recent call last):
  File "C:\Users\User\Desktop\A453 Task 2.py", line 25, in <module>
    price=float(itemsplit[2]) #price is
ValueError: could not convert string to float: 'magent,'

这是我的实际代码:

loop=1
while loop==1:
    print ("The Hardware Store")
    print ("a - Place an order by barcode")
    print ("x - Exit")
    task=input("Please make your selection")
    if task.lower()=="a":
        print("The Hardware Store")
        myfile=open("hardware_store.txt", "r") #this opens the text file
        product_information=myfile.readlines() #reads the file and stores it 
as a variable named variable 'details'
        myfile.close() #closes the file
        while True:
            digits=input("Please enter your GTIN-8 code\n") 
            if len(digits) !=8: #if the digits aren't equal to 8 digits, the 
input not accepted
                print("Please enter a valid GTIN-8 code\n") 
            else:
                break #if the code is the correct length, the loop ends
        for line in product_information:
            if digits in line:
                productline=line 
                myfile=open("receipt.txt", "w") #opens receipt file
                myfile.writelines("\n" + "+")
                quantity=input("How much of the product do you wish to purchase?\n")
                itemsplit=line.split(' ') #seperates into different words
                price=float(itemsplit[2]) #price is
                total=(price)*(quantity) #this works out the price
                myfile.writelines("Your total spent on this product is: " +str("£:,.2f)".format(total)+"\n"))
    if task.lower()=="x":
        print("Thank you for visiting the hardware store, come again!")
        break
    else:
        print("Sorry, please enter a valid input")

这是文本文件(名为&#34; hardware_store.txt&#34;)

16923577,Hammer,3.00,
78451698,32 lrg nails,2,
17825269,32 med nails,2.00,
58246375,32 sml nails,2.00,
21963780,Drill Bits set,7.00,
75124816,Lrg Brush,2.00,
78469518,Sml Brush,1.00,         
58423790,Dust Pan,1.00,
88562247,32 lrg screws,2.00,
98557639,32 med screws,2.00,
37592271,32 sml screws,2.00,
50966394,screwdriver set,7.00,
75533458,wall bracket,0.70,
12345678, neodymium magent, 9.99
10101010, screws 12x50mm Pack 50, 2.79

我不明白发生了什么,直到你输入所需的数量为止。提前致谢

3 个答案:

答案 0 :(得分:-1)

您的文件hardware_store.txt的值在每行上用逗号分隔,而不是空格。您应该按','分割,而不是' '

您还可以查看python中的CSV module来读取您的文件。

答案 1 :(得分:-1)

在itemsplit列表中,您有:

itemsplit[0] = "12345678,"
itemsplit[1] = "neodymium"
itemsplit[2] = "magent,"
itemsplit[3] = "9.99"

itemsplit[2]没有任何数字可以投射浮动。

如果列表项中没有数字,则必须使用try ... except ...来捕获异常。

答案 2 :(得分:-1)

我已经更正了您的代码:

所以我们说 // refer --> your DatabaseReference refer.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { Iterator<DataSnapshot> dataSnapshotsChat = dataSnapshot.getChildren().iterator(); User user = null; // User is Model class while (dataSnapshotsChat.hasNext()) { DataSnapshot dataSnapshotChild = dataSnapshotsChat.next(); user = dataSnapshotChild.getValue(User.class); if (!Lists.contains(user.id)) { // here List is array list of type User Lists.add(user); } } 包含:

hardware_store.txtfile
12345678 5

运行代码:

task = ""
while task.lower() != "x":
    print ("The Hardware Store")
    print ("a - Place an order by barcode")
    print ("x - Exit")
    task=input("Please make your selection ")
    if task.lower()=="a":
        print("The Hardware Store")
        myfile=open("hardware_store.txt", "r") #this opens the text file
        product_information=myfile.readlines() #reads the file and stores it as a variable named variable 'details'
        myfile.close() #closes the file

        while True:
            digits=input("Please enter your GTIN-8 code\n")

            if not len(digits) == 8: #if the digits aren't equal to 8 digits, the input not accepted
                print("Please enter a valid GTIN-8 code\n")
            else:
                break #if the code is the correct length, the loop ends
        for line in product_information:
            if digits in line:
                #productline=line
                myfile=open("receipt.txt", "w") #opens receipt file
                myfile.write("\n" + "+")
                quantity=input("How much of the product do you wish to purchase?\n")
                quantity = int(quantity)

                price = line.split(" ")[1]
                price=float(price) #price is
                total=(price)*(quantity) #this works out the price
                myfile.write("Your total spent on this product is: £:({:.2f}){}".format(total, '\n'))
                myfile.close()

            else:
                print("Sorry, please enter a valid input")
else:
    print("Thank you for visiting the hardware store, come again!")

receipt.txt:

The Hardware Store
a - Place an order by barcode
x - Exit
Please make your selection a
The Hardware Store
Please enter your GTIN-8 code
12345678
How much of the product do you wish to purchase?
5
The Hardware Store
a - Place an order by barcode
x - Exit
Please make your selection x
Thank you for visiting the hardware store, come again!

如果你打开receipt.txt,你就不会在文本编辑器中看到\n +Your total spent on this product is: £:(25.00) ,我已经包含了\n只是为了明确开头有一个新行,你'只需在编辑器中看到一个空格,然后是'\n'