设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
查看: 9446|回复: 2
打印 上一主题 下一主题

求助:使用print(f.read())之后f.read()的bool值发生了变化

[复制链接]

1

主题

0

好友

17

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2018-11-16 00:41:29 |只看该作者 |倒序浏览
本帖最后由 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()


回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2018-11-16 13:46:48 |只看该作者
read只能一次,你要重新read的话,需要 f.seek(0) ,或者重新打开文件
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

17

积分

新手上路

Rank: 1

板凳
发表于 2018-11-16 19:12:24 |只看该作者
本帖最后由 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再读的时候就为空了。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-11-25 23:09 , Processed in 0.023780 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部