如何修复函数中的while循环?

2024-10-02 02:41:20 发布

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

我的代码工作,并要求命名的文件,有多少个数字。但它只是不断地要求数字,如果我把零,然后它做它应该做的。非常感谢您的帮助。我只是不知道如何修复代码,这真的很困扰我。你知道吗

import random
def generateRandomNumber(myfile):
    try:
        fileToBeWrittenTo = open(myfile,"w")
        numberOfRandomNumbers = int(input("How many numbers" + \
                                      " should the random file hold?:" ))
    except Exception as potentialError:
        print("An error has occured:", potentialError )
    else:
        for randomNumberCount in range(1, numberOfRandomNumbers + 1 ):
            randomNumber = generateRandomNumber(myfile)
            fileToBeWrittenTo.write(str( randomNumber ) + '\n' )
        print( numberOfRandomNumbers, "numbers have been written" + \
               " to the file ")
    finally:
        fileToBeWrittenTo.close()
        print("\nEnd of program")
    displayNumber(myfile)
    randomNumber = random.randint(1,500)
    return randomNumber

def main():
    myfile = str(input("Enter file name here "))
    with open(myfile, 'w+') as f:
        generateRandomNumber(myfile)

    return f
    myfile.close    

def displayNumber(myfile):
    try:
        myfile = open(myfile,'r')
        total = 0
        NORN = 0
        Avg = 0
        line = myfile.readline()
        while line != "":
            randomNumber = int(line)
            total += randomNumber
            NORN += 1
            Avg = total / NORN
            print( randomNumber )
        line = myfile.readline()
    except IOError:
        print("Problem with file being opened")
    else:
        print("The average of the numbers is " + str(Avg))
        print("The total of all the numbers is " + str(total)+\
          "\nThere are " + str(NORN)+\
          " in the file")
        myfile.close()
    finally:
        print("End of program")

main()

Tags: ofthedeflinerandommyfilefiletotal
2条回答

generateRandomNumber函数在randomNumber = generateRandomNumber(myfile)语句中递归调用自身,如果输入0,则跳过该语句。你知道吗

另外,您的main包含一个未使用的with openmyfile.close语句既不执行也不需要。试着缩短它。你知道吗

def main():
    myfile = str(input("Enter file name here "))
    generateRandomNumber(myfile)

通过使用with open,还可以显著简化generateRandomNumberdisplayNumber函数。你知道吗

It is good practice to use the with keyword when dealing with file objects. The advantage is that the file is properly closed after its suite finishes, even if an exception is raised at some point. Using with is also much shorter than writing equivalent try-finally blocks

最后,displayNumber包含一个无限循环,请尝试将第二个line = myfile.readline()缩进一步,或者重写函数以立即读取完整文件并使用一个简单的for循环。你知道吗

with open(myfile) as myfilehandle:
    lines = myfilehandle.readlines()

for line in lines:
    # do things

使用try-except-else-finally是好的,但我发现它会让你困惑,试着先学习try-except。你知道吗

你没有结束循环

def generateRandomNumber(myfile):
    ....
            randomNumber = generateRandomNumber(myfile)

以及

while line != "":
    ....
    print( randomNumber )
line = myfile.readline()

应该是的

while line != "":
    ....
    print( randomNumber )
    line = myfile.readline()

这是你的工作代码

import random

def generateRandomNumber():
    randomNumber = random.randint(1,500)
    return randomNumber

def writeRandom(myfile):
    try:
        fileToBeWrittenTo = open(myfile, "w")
        numberOfRandomNumbers = int(input("How many numbers" + \
                                      " should the random file hold?:" ))
    except Exception as potentialError:
        print("An error has occured:", potentialError )
    else:
        for randomNumberCount in range(1, numberOfRandomNumbers + 1 ):
            randomNumber = generateRandomNumber()
            fileToBeWrittenTo.write(str( randomNumber ) + '\n' )
        print( numberOfRandomNumbers, "numbers have been written" + \
               " to the file ")
        fileToBeWrittenTo.close()
        displayNumber(myfile)
    finally:
        print("\nEnd of program")

def main():
    myfile = str(input("Enter file name here "))
    writeRandom(myfile)  

def displayNumber(myfile):
    try:
        my_file = open(myfile,'r')
        total = 0
        NORN = 0
        Avg = 0
        line = my_file.readline()
        while line != "":
            randomNumber = int(line)
            total += randomNumber
            NORN += 1
            Avg = total / NORN
            print( randomNumber )
            line = my_file.readline()
    except IOError:
        print("Problem with file being opened")
    else:
        print("The average of the numbers is " + str(Avg))
        print("The total of all the numbers is " + str(total)+\
          "\nThere are " + str(NORN)+\
          " in the file")
        my_file.close()
    finally:
        print("End of program")

main()

相关问题 更多 >

    热门问题