Crossin的编程教室

标题: 求助:使用print(f.read())之后f.read()的bool值发生了变化 [打印本页]

作者: ftnuk    时间: 2018-11-16 00:41
标题: 求助:使用print(f.read())之后f.read()的bool值发生了变化
本帖最后由 ftnuk 于 2018-11-16 00:45 编辑

我使用的是win10下运行的py3.7
我是一个初学者,看crossin公众号学习到用文件保存游戏中,完成作业后发现结果和我想的不一样,把前面代码切出来单独运行后发现这些问题,百度了没有能看懂的解释....所以跪求大神们帮忙解释一下:

使用print后bool值变了

用print(f.read())加在前面后
222.png

本来是查找为什么readlines()会返回一个空列表,结果发现了上面的情况,下面的也请解释一下
333.png



作业完整版本(不会是后面写入有问题吧...)
f = open("mark.txt")

if bool(f.read()) == False:
    print("This is a New Game")

else:
    mark = f.readlines()
    print(mark)
    a = 0
    b = 0

    for i in mark:

        if b < int(i):
            b = int(i)
        a += 1

    print("This is the %dth game,Best score is %d"%(a,b))

f.close()

def guess(num1,num2):

    if num1 < num2:
        print("%d is too small"%num1)        
        return False

    elif num1 > num2:
        print("%d is too big"%num1)
        return False

    else:
        print("Bingo")
        return True

from random import randint
num = randint (1,1000)
print("Guess whta I think?(1-1000)")
score = 0
c = False
while c == False:

    answer = int(input())

    score += 1
    c = guess(answer,num)

f = open("mark.txt","a")

d = str(score)+"\n"

f.write(d)

f.close()



作者: crossin先生    时间: 2018-11-16 13:46
read只能一次,你要重新read的话,需要 f.seek(0) ,或者重新打开文件
作者: ftnuk    时间: 2018-11-16 19:12
本帖最后由 ftnuk 于 2018-11-16 19:43 编辑
crossin先生 发表于 2018-11-16 13:46
read只能一次,你要重新read的话,需要 f.seek(0) ,或者重新打开文件

谢谢cross老师,终于搞懂了

f = open("mark.txt")

if bool(f.read()) == False:
    print("This is a New Game")

else:
    mark = f.readlines()
    a = 0
    b = 0
   
    for i in mark:
        print(i)
        if b < int(i):
            b = int(i)
        a += 1

    print("This is the %dth game,Best score is %d"%(a,b))

f.close()

上面的程序在  if bool(f.read()) == False: 的时候read已经读过一次了,所以后面else 的readlines再读的时候就为空了。





欢迎光临 Crossin的编程教室 (https://bbs.crossincode.com/) Powered by Discuz! X2.5