2014-01-19 1 views
4

Я работаю над книгой «Введение в вычисления и программирование с использованием Python» доктора Гуттага. Я работаю над упражнениями пальцев для главы 3. Я застрял. Это раздел 3.2, стр. 25. Упражнение: Пусть s - строка, содержащая последовательность десятичных чисел, разделенных запятыми, например s = '1.23,2.4,3.123'. Напишите программу, в которой печатается сумма чисел в s.Python Convert String Literal to Float

Предыдущий пример был:

total = 0 
for c in '123456789': 
    total += int(c) 
print total. 

Я пытался и пытался, но получаю различные ошибки. Вот моя последняя попытка.

total = 0 
s = '1.23,2.4,3.123' 
print s 
float(s) 
for c in s: 
    total += c 
    print c 
print total  
print 'The total should be ', 1.23+2.4+3.123 

я ValueError: invalid literal for float(): 1.23,2.4,3.123.

+0

conert строка плавать используя >>> a = "1.23" float (a) >> 1.23. Если несколько строк, как в вашем случае, разделите их и используйте функцию float. –

+0

Один намек: посмотрите на фрагмент 'total + = c'. 'c' - это строка, поэтому вы пытаетесь добавить строку к целому числу' total'. – richizy

ответ

6

Значения с плавающей точкой не может иметь запятую. Вы проходите 1.23,2.4,3.123, так как это функция float, которая недопустима. Сначала разбить строку на основе запятой,

s = "1.23,2.4,3.123" 
print s.split(",")  # ['1.23', '2.4', '3.123'] 

Затем преобразовать каждый и и каждый элемент из этого списка, чтобы плавать и добавить их вместе, чтобы получить результат. Чтобы почувствовать силу Python, эту проблему можно решить следующим образом.

Вы можете найти total, как этот

s = "1.23,2.4,3.123" 
total = sum(map(float, s.split(","))) 

Если число элементов будет слишком большим, то вы можете использовать выражение генератора, как этот

total = sum(float(item) for item in s.split(",")) 

Все эти версии будет производить тот же результат, что и

total, s = 0, "1.23,2.4,3.123" 
for current_number in s.split(","): 
    total += float(current_number) 
+0

Могу ли я спросить: в чем разница между total = sum ([float (item) для элемента в s.split (",")]); и total = sum (float (item) для элемента в s.split (",")) –

+0

@KennyLJ Первый использует [List Consrehension] (http://docs.python.org/2/tutorial/datastructures. html # list-comprehensions), а второй использует [Generator Expression] (http://www.python.org/dev/peps/pep-0289/) – thefourtheye

+0

@MartijnPieters Спасибо :) Я исправил это. – thefourtheye

2

С момента запуска g с Python, вы можете попробовать этот простой подход:

Используйте функцию split(c), где c является разделителем. С этим вы получите список numbers (в коде ниже). Тогда вы можете перемещаться по каждому элементу этого списка, отбрасывая каждый номер к float (поскольку элементы numbers являются строками) и просуммировать их:

numbers = s.split(',') 
sum = 0 

for e in numbers: 
    sum += float(e) 

print sum 

Выход:

6.753 
2

Из книги Введение в вычисления и программирование с использованием Python на стр. 25.

«Пусть s - строка, содержащая последовательность десятичных чисел, разделенных запятыми, например, s = '1.23,2.4,3.123'. Напишите программу, которая печатает сумму чисел в s."

Если мы используем только то, что преподается до сих пор, то этот код один подход:

tmp = '' 
num = 0 
print('Enter a string of decimal numbers separated by comma:') 
s = input('Enter the string: ') 
for ch in s: 
    if ch != ',': 
     tmp = tmp + ch 
    elif ch == ',': 
     num = num + float(tmp) 
     tmp = '' 

# Also include last float number in sum and show result 
print('The sum of all numbers is:', num + float(tmp)) 
0

Вот решение без использования split:

s='1.23,2.4,3.123,5.45343' 
pos=[0] 
total=0 
for i in range(0,len(s)): 
    if s[i]==',': 
     pos.append(len(s[0:i])) 
pos.append(len(s)) 
for j in range(len(pos)-1): 
    if j==0: 
     num=float(s[pos[j]:pos[j+1]]) 
     total=total+num 
    else: 
     num=float(s[pos[j]+1:pos[j+1]]) 
     total=total+num  
print total 
0

Мой путь работы:

s = '1.23, 211.3' 
total = 0 
for x in s: 
    for i in x: 
     if i != ',' and i != ' ' and i != '.': 
      total = total + int(i) 
print total 
0

Мой ответ:

s = '1.23,2.4,3.123' 

sum = 0 
is_int_part = True 
n = 0 
for c in s: 
    if c == '.': 
     is_int_part = False 
    elif c == ',': 
     if is_int_part == True: 
      total += sum 
     else: 
      total += sum/10.0**n 
     sum = 0 
     is_int_part = True 
     n = 0 
    else: 
     sum *= 10 
     sum += int(c) 
     if is_int_part == False: 
      n += 1 
if is_int_part == True: 
    total += sum 
else: 
    total += sum/10.0**n 
print total 
1

работает как шарм используется только то, что я узнал еще

s = raw_input('Enter a string that contains a sequence of decimal ' + 
        'numbers separated by commas, e.g. 1.23,2.4,3.123: ') 

    s = "," + s+ "," 

    total =0 

    for i in range(0,len(s)): 

     if s[i] == ",": 

       for j in range(1,(len(s)-i)): 

        if s[i+j] == "," 
        total = total + float(s[(i+1):(i+j)]) 
        break 
    print total 
0
total = 0 
s = '1.23,2.4,3.123' 
for c in s.split(','): 
    total = total + float(c) 
print(total) 
0

мне удалось ответить на вопрос, со знанием не получил вплоть до 3.2 раздела для цикла

s = '1.0, 1.1, 1.2' 
print 'List of decimal number' 
print s 
total = 0.0 
for c in s: 
    if c == ',': 
     total += float(s[0:(s.index(','))]) 
     d = int(s.index(','))+1 
     s = s[(d+1) : len(s)] 

s = float(s) 
total += s 
print '1.0 + 1.1 + 1.2 = ', total 

Это ответ на вопрос, который я чувствую, что функция split не подходит для начинающих, как вы и я.

0

Учитывая тот факт, что вы еще не можете столкнуться с более сложными функциями, просто попробуйте их.

total = 0 
for c in "1.23","2.4",3.123": 
    total += float(c) 
print total 
1

Это то, что я придумал:

s = raw_input('Enter a sequence of decimal numbers separated by commas: ') 
aux = '' 
total = 0 
for c in s: 
    aux = aux + c 
    if c == ',': 
     total = total + float(aux[0:len(aux)-1]) 
     aux = '' 
total = total + float(aux) ##Uses last value stored in aux 
print 'The sum of the numbers entered is ', total 
+1

Попробуйте объяснить, что вы сделали подробно, а не предполагать, что код достаточно объяснения. –

0

Мой ответ:

s = '2.1,2.0' 
countI = 0 
countF = 0 
totalS = 0 

for num in s: 
    if num == ',' or (countF + 1 == len(s)): 
     totalS += float(s[countI:countF]) 
     if countF < len(s): 
      countI = countF + 1 
    countF += 1 

print(totalS) # 4.1 

Это работает только если номера поплавки

-1
total =0 
s = {1.23,2.4,3.123} 
for c in s: 
    total = total+float(c) 
print(total) 

 Смежные вопросы

  • Нет связанных вопросов^_^