Pertanyaan Python Mengkonversi String Literal ke Float


Saya bekerja melalui buku "Pengantar Komputasi dan Pemrograman Menggunakan Python" oleh Dr Guttag. Saya sedang mengerjakan latihan jari untuk Bab 3. Saya terjebak. Ini adalah bagian 3.2, halaman 25. Latihan ini: Biarkan s menjadi string yang berisi urutan angka desimal yang dipisahkan oleh koma, misalnya, s = '1.23,2.4,3.123'. Tulis program yang mencetak angka-angka angka dalam s.

Contoh sebelumnya adalah:

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

Saya sudah mencoba dan mencoba tetapi terus mendapatkan berbagai kesalahan. Inilah upaya terakhir saya.

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

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


5
2018-01-19 03:03


asal


Jawaban:


Nilai titik mengambang tidak dapat memiliki koma. Anda sedang lewat 1.23,2.4,3.123 karena untuk mengapung fungsi, yang tidak valid. Pertama belah string berdasarkan koma,

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

Kemudian konversikan setiap dan dan setiap elemen dari daftar itu untuk mengambang dan menambahkannya bersama untuk mendapatkan hasilnya. Untuk merasakan kekuatan Python, masalah khusus ini dapat dipecahkan dengan cara-cara berikut.

Anda dapat menemukan total, seperti ini

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

Jika jumlah elemen akan menjadi terlalu besar, Anda dapat menggunakan ekspresi generator, seperti ini

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

Semua versi ini akan menghasilkan hasil yang sama dengan

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

6
2018-01-19 03:07



Karena Anda memulai dengan Python, Anda dapat mencoba pendekatan sederhana ini:

Menggunakan split(c) fungsi, di mana c adalah pemisah. Dengan ini Anda akan memiliki daftar numbers (dalam kode di bawah). Kemudian Anda dapat mengiterasi ulang setiap elemen dari daftar itu, dengan memasukkan setiap angka ke a float (karena elemen numbers adalah string) dan jumlah mereka:

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

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

print sum

Keluaran:

6.753

2
2018-01-19 03:07



Dari buku itu Pengantar Komputasi dan Pemrograman menggunakan Python di halaman 25.

"Misalkan string yang berisi urutan angka desimal yang dipisahkan oleh koma, mis., S = '1.23,2.4,3.123'. Tulis program yang mencetak jumlah angka dalam s. "

Jika kita hanya menggunakan apa yang telah diajarkan sejauh ini, maka kode ini adalah salah satu pendekatan:

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))

2
2017-07-18 10:25



Bekerja Seperti Pesona Hanya menggunakan apa yang sudah saya pelajari

    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

1
2017-09-11 17:53



total = 0
s = '1.23,2.4,3.123'
for c in s.split(','):
    total = total + float(c)
print(total)

1
2017-12-25 08:34



Inilah yang saya temukan:

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
2018-05-14 18:37



Saya pikir mereka telah merevisi buku teks ini karena pertanyaan ini ditanyakan (dan sebagian yang lain telah menjawab.) Saya memiliki edisi kedua dari teks dan contoh terpisahnya tidak ada di halaman 25. Tidak ada apa pun sebelum pelajaran ini yang menunjukkan kepada Anda bagaimana cara menggunakan split.

Saya akhirnya menemukan cara lain untuk melakukannya dengan menggunakan ekspresi reguler. Ini kode saya:

# Intro to Python
# Chapter 3.2
# Finger Exercises

# Write a program that totals a sequence of decimal numbers
import re
total = 0 # initialize the running total
for s in re.findall(r'\d+\.\d+','1.23, 2.2, 5.4, 11.32, 18.1,22.1,19.0'):
    total = total + float(s)
print(total)

Saya tidak pernah menganggap diri saya padat ketika datang untuk belajar hal-hal baru, tetapi saya mengalami kesulitan dengan (sebagian besar) latihan jari dalam buku ini sejauh ini.


1
2017-08-09 20:33