ValueError:无法将字符串转换为float:'30'

时间:2019-02-20 13:41:57

标签: python arrays type-conversion

这是我在堆栈溢出中的第一个帖子。

我在上大学时做练习时遇到错误,我很想得到一些帮助,因为我是python的新手,但是我有一些编程知识(使用c#),所以我发现用这种新语言编写代码非常困难。

我以以下数组为例:30、20、10、15、20、34、23、12、23、34、30、15、51 这些是我需要输出的数字:〜[7.4]
,但是每次插入时都会出现代码错误:ValueError:无法将字符串转换为float:'30,'。

没有任何错误(我认为),所以我不知道如何解决这个问题。

感谢您的帮助。

import sys 


def floats_println_bracket(a):
print("[", end='')
if (len(a) > 0):
    print("%g" % a[0], end='')
    for i in range(1, len(a) ):
        print(" %g" % a[i], end='')
print("]")


def rewards(a):
global trimmedvalue 
temp = []
for i in len(a):
    if i//3 == 0:
       comission = temp.append(i) 
       total = a[i - 1] + a[i - 2] + [i - 3]        
    if total > 60:        
        comissionvalue = trimmedvalue
        comissionvalue = trimmedvalue + (total * 0.05)
        comission.append(comissionvalue)            
    return comission



def test_rewards():
while True:
    a = []
    try:
        line = input().split()
    except (EOFError, KeyboardInterrupt):
            sys.exit(0)
    if line:
        for i in line:
            a.append(float(i))
    z = rewards(a)
    floats_println_bracket(z)

if __name__ == '__main__':
test_rewards()

4 个答案:

答案 0 :(得分:0)

您的错误是“ ValueError:无法将字符串转换为float:'30'。”

您必须删除“”,例如: 假设您总是想摆脱最后一个字符:

your_almost_number = '30,'
your_number = float(your_almost_number[:-1])

仅包含','的情况:

your_almost_number = '30,'
your_number = float(your_almost_number.split(',')[0])

答案 1 :(得分:0)

尽管丑陋,但操作速度非常快,并且可以涵盖许多情况。

a.append(float(i.replace(",", "").strip()))

用于:

while True:
    a = []
    try:
        line = input().split()
    except (EOFError, KeyboardInterrupt):
            sys.exit(0)
    if line:
        for i in line:
            a.append(float(i.replace(",", "").strip()))
    z = rewards(a)
    floats_println_bracket(z)

答案 2 :(得分:0)

您可以使用map转换数字列表

test_string = "30, 20, 10, 15, 20, 34, 23, 12, 23, 34, 30, 15, 51"
map(float,test_string.split(','))

还假设您要分割多个值

import string
import re
test_string = "30| 20, 10* 15, 20, 34@ 23, 12, 23, 34, 30, 15, 51"
map(float,re.split('['+'|'.join(string.punctuation)+']',test_string))

输出

[30.0, 20.0, 10.0, 15.0, 20.0, 34.0, 23.0, 12.0, 23.0, 34.0, 30.0, 15.0, 51.0]

注意:在Python3中,您可能必须将最终输出转换为list

答案 3 :(得分:0)

根据输入中的','', '拆分

 line = input().split(',')