目前正在从fi学习阅读

2024-09-30 16:22:36 发布

您现在位置:Python中文网/ 问答频道 /正文

你们第一次在这里问问题。我正在学习python的初级编程课程,我想知道为什么我的代码不起作用。它应该从一个文件中读取信息并将数字输出给用户,将所有数字相加,然后给出一个平均值。一切正常,直到我不得不对程序做一些修改。我的问题似乎在计算模块。我在代码的底部添加了正在读取的文件中的文本。我收到这个信息。你知道吗

fltTotal += float(strRead)

ValueError: could not convert string to float: 

代码:

def main():

    strMenu = ' '
    while strMenu != 'X':

        print('*************************************************')
        print('*                 Popcorn Sales                 *')
        print('*************************************************')
        print('\n' *3)
        print('D: Display Sales')
        print('C: Calculate Totals')
        print('X: Exit Application')
        print()
        strMenu = (str(input('Enter your Menu Selection: '))).upper()

        if strMenu == 'D': 
            DisplaySales()
        elif strMenu == 'C':
            fltTotal, fltAverage = CalcTotal()
            print(' ')
            print('*************************************')
            print('Popcorn Totals                 ')
            print('*************************************')
            print(' ')
            print('Total popcorn sales: $' + str(format(fltTotal, '.2f')))
            print('Average popcorn sales: $' + str(format(fltAverage, '.2f')))
            print(' ')
            input('Press enter to continue...')



def DisplaySales():

    print(' ')
    print('*************************************')
    print('Popcorn Sales                 ')
    print('*************************************')
    print(' ')


    try:
        intListNumber = 0
        SalesFile = open('saledata.txt', 'r')   
        strRead = '1'

        intListNumber = 0

        while strRead != '':

            intListNumber += 1
            strRead = SalesFile.readline()
            if strRead != '':
                print(str(intListNumber) + ': $' + strRead)

    except IOError:
        print('An error occurred')
    print(' ')
    input('Press enter to continue...')

def CalcTotal():

    try:
        intListNumber = 0
        SalesFile = open('saledata.txt', 'r')   
        strRead = '1'
        fltTotal = 0


        while strRead != '':
            strRead = SalesFile.readline()
            intListNumber += 1
            fltTotal += float(strRead)
        fltAverage = fltTotal / intListNumber




    except IOError:
        print('An error occurred')
    return fltTotal, fltAverage

main()

数据文件:

50

17.32

32.99

51.02

15.61

23.94

5.99

12.1

62.74

105.59

16.50

32.99

23.71

54.90

19

17.52

48.6

102

99.99

Tags: to代码deffloatprintsaleswhilestr
1条回答
网友
1楼 · 发布于 2024-09-30 16:22:36

这里有一个小补丁为您的代码

while strRead != '':
    strRead = SalesFile.readline()
    if len(strRead)!=0:
        intListNumber += 1
        fltTotal += float(strRead)
fltAverage = fltTotal / intListNumber

你必须检查你读到的东西是否有效并且不是空的。 还有很多其他的方法,比如你正在用try做什么,期望验证条目并避免这样的问题。 由于这种方式实际上无法读取整个文件,而且只是文件格式的第一个元素,因此建议重写如下函数:

def CalcTotal():

    try:
        intListNumber = 0
        SalesFile = open('saledata.txt', 'r')   
        strRead = '1'
        fltTotal = 0

        with open('saledata.txt', 'r') as openfileobject:
            for line in openfileobject:
                try:
                    print(line)
                    fltTotal += float(line)
                    intListNumber += 1
                except: pass
        fltAverage = fltTotal / intListNumber

我用print(line)向您展示了它的工作原理。你知道吗

相关问题 更多 >