鱼C论坛

 找回密码
 立即注册
查看: 1512|回复: 2

[已解决]写入的结果为什么是输入的和排序好的第一个混在了一起

[复制链接]
发表于 2022-10-3 16:57:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
a = []
def select(a):
    try:
        fobj = open("wjy.txt", "wt")

        for i in range(len(a) - 1):
            print("第" + str(i+1) + "次")

            index = i
            for j in range(i + 1, len(a)):
                if a[index] < a[j]:
                    index = j
            if index != i:
                key = a[i]
                a[i] = a[index]
                a[index] = key
            fobj.write("\n" + "第" + str(i + 1) + "次" + str(a) + "\n")
            print(a)

        fobj.close()
        return a

    except Exception as err:
        print(err)
        return None


def select2(a):
    try:

        m = int(input("输出几个数字:"))
        if a:
            c = []
            count = 1
            if m <= len(a) and count <= m:
                for k in range(m):
                    b = a[k]
                    c.append(b)
                    count = count + 1
            print(c)
            return c

    except Exception as err:
        print(err)
        return None

if __name__ == "__main__":
    try:
        fobj=open("wjy.txt","wt")
        count = 1
        while count <= 4:
            n = int(input("请输入数字"))
            fobj.write(str(n) + " ")
            a.append(n)
            count = count + 1
            if count > 4:
                n = input("是否继续输入:y/n:")
                if n == "y":
                    count = 4
                else:
                     break
        select(a)
        select2(a)
        fobj.close()

    except Exception as err:
        print(err)


最佳答案
2022-10-4 21:55:45
这是你的代码:
a = []
def select(a):
    try:
        fobj = open("wjy.txt", "wt")

        for i in range(len(a) - 1):
            print("第" + str(i+1) + "次")

            index = i
            for j in range(i + 1, len(a)):
                if a[index] < a[j]:
                    index = j
            if index != i:
                key = a[i]
                a[i] = a[index]
                a[index] = key
            fobj.write("\n" + "第" + str(i + 1) + "次" + str(a) + "\n")
            print(a)

        fobj.close()
        return a

    except Exception as err:
        print(err)
        return None


def select2(a):
    try:

        m = int(input("输出几个数字:"))
        if a:
            c = []
            count = 1
            if m <= len(a) and count <= m:
                for k in range(m):
                    b = a[k]
                    c.append(b)
                    count = count + 1
            print(c)
            return c

    except Exception as err:
        print(err)
        return None

if __name__ == "__main__":
    try:
        fobj=open("wjy.txt","wt")
        count = 1
        while count <= 4:
            n = int(input("请输入数字"))
            fobj.write(str(n) + " ")
            a.append(n)
            count = count + 1
            if count > 4:
                n = input("是否继续输入:y/n:")
                if n == "y":
                    count = 4
                else:
                     break
        select(a)
        select2(a)
        fobj.close()

    except Exception as err:
        print(err)
程序从第48行开始真正执行代码,第49行,你打开了一个名为wjy.txt的文件,接下来就是让用户输入数字准备用来排序。在while循环中,你使用了write把每次输入的数字都写入了wjy.txt这个文件中。可是循环结束后你就调用了select函数对列表进行排序,而且此时打开的文件对象fobj还未关闭,特别注意这点,文件还没关闭。
由于文件没有关闭,所以用户输入的数字其实并没有真正写入文件。在此过程中另外一个名为select的函数再次打开wjy.txt这个文件并且写入数据,这就相当于在原来的文件对象基础上继续追加写入数据。由于select是在中途插入的,原来的fobj还没关闭,所以就算select函数执行完了wjy.txt这个文件还是空的,等到select2(a)后面的fobj.close()函数执行完毕后你才会看到完整的文件内容。
综上所述,你在while count <= 4这个循环中让用户输入完数字之后没有及时关闭前面打开的文件对象fobj,导致后面select函数继续追加写入,所以才出现了用户输入的数字和排序好的结果混合在一起的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-10-4 21:55:45 | 显示全部楼层    本楼为最佳答案   
这是你的代码:
a = []
def select(a):
    try:
        fobj = open("wjy.txt", "wt")

        for i in range(len(a) - 1):
            print("第" + str(i+1) + "次")

            index = i
            for j in range(i + 1, len(a)):
                if a[index] < a[j]:
                    index = j
            if index != i:
                key = a[i]
                a[i] = a[index]
                a[index] = key
            fobj.write("\n" + "第" + str(i + 1) + "次" + str(a) + "\n")
            print(a)

        fobj.close()
        return a

    except Exception as err:
        print(err)
        return None


def select2(a):
    try:

        m = int(input("输出几个数字:"))
        if a:
            c = []
            count = 1
            if m <= len(a) and count <= m:
                for k in range(m):
                    b = a[k]
                    c.append(b)
                    count = count + 1
            print(c)
            return c

    except Exception as err:
        print(err)
        return None

if __name__ == "__main__":
    try:
        fobj=open("wjy.txt","wt")
        count = 1
        while count <= 4:
            n = int(input("请输入数字"))
            fobj.write(str(n) + " ")
            a.append(n)
            count = count + 1
            if count > 4:
                n = input("是否继续输入:y/n:")
                if n == "y":
                    count = 4
                else:
                     break
        select(a)
        select2(a)
        fobj.close()

    except Exception as err:
        print(err)
程序从第48行开始真正执行代码,第49行,你打开了一个名为wjy.txt的文件,接下来就是让用户输入数字准备用来排序。在while循环中,你使用了write把每次输入的数字都写入了wjy.txt这个文件中。可是循环结束后你就调用了select函数对列表进行排序,而且此时打开的文件对象fobj还未关闭,特别注意这点,文件还没关闭。
由于文件没有关闭,所以用户输入的数字其实并没有真正写入文件。在此过程中另外一个名为select的函数再次打开wjy.txt这个文件并且写入数据,这就相当于在原来的文件对象基础上继续追加写入数据。由于select是在中途插入的,原来的fobj还没关闭,所以就算select函数执行完了wjy.txt这个文件还是空的,等到select2(a)后面的fobj.close()函数执行完毕后你才会看到完整的文件内容。
综上所述,你在while count <= 4这个循环中让用户输入完数字之后没有及时关闭前面打开的文件对象fobj,导致后面select函数继续追加写入,所以才出现了用户输入的数字和排序好的结果混合在一起的情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-10-5 13:39:06 | 显示全部楼层
Brick_Porter 发表于 2022-10-4 21:55
这是你的代码:
程序从第48行开始真正执行代码,第49行,你打开了一个名为wjy.txt的文件,接下来就是让用 ...

可以了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 23:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表