设为首页收藏本站

Crossin的编程教室

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

乱码问题

[复制链接]

1

主题

0

好友

29

积分

新手上路

Rank: 1

跳转到指定楼层
楼主
发表于 2017-3-6 10:22:09 |只看该作者 |倒序浏览
一篇中文文章用read()就正常,用readlines()就乱码,怎么解决?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2017-3-6 14:45:39 |只看该作者
请附上完整代码、报错等必要信息。

我觉得你说的大概不是乱码,而是因为你直接输出了一个 list。py2的列表整体输出时,不会解码其中的中文字符。你输出其中的每一行就没问题了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

29

积分

新手上路

Rank: 1

板凳
发表于 2017-3-9 09:58:39 |只看该作者
crossin先生 发表于 2017-3-6 14:45
请附上完整代码、报错等必要信息。

我觉得你说的大概不是乱码,而是因为你直接输出了一个 list。py2的列表 ...

额,明白了,就是想要中文输出就只能搞个for循环一行行输出吧

另外我现在是想把一大段文字通过标点来分段,比如:

汉皇重色思倾国, 御宇多年求不得。杨家有女初长成, 养在深闺人未识。天生丽质难自弃, 一朝选在君王侧。回眸一笑百媚生, 六宫粉黛无颜色。春寒赐浴华清池, 温泉水滑洗凝脂。侍儿扶起娇无力, 始是新承恩泽时。云鬓花颜金步摇, 芙蓉帐暖度春宵。春宵苦短日高起, 从此君王不早朝。

做成:

汉皇重色思倾国,
御宇多年求不得。
杨家有女初长成,
养在深闺人未识。
天生丽质难自弃,
一朝选在君王侧。
回眸一笑百媚生,
六宫粉黛无颜色。
春寒赐浴华清池,
温泉水滑洗凝脂。
侍儿扶起娇无力,
始是新承恩泽时。
云鬓花颜金步摇,
芙蓉帐暖度春宵。
春宵苦短日高起,
从此君王不早朝。



但是用

f=open('chg.txt','r')
line=f.read().split(',')
for i in line:
    f.replace(',',',\n')
这个一直提示AttributeError: 'file' object has no attribute 'replace'
那我应该怎么改,或者有什么更好的方法?
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2017-3-9 15:08:32 |只看该作者
疾风魔狼剑 发表于 2017-3-9 09:58
额,明白了,就是想要中文输出就只能搞个for循环一行行输出吧

另外我现在是想把一大段文字通过标点来分 ...

难道不应该是 i.replace 吗?为啥写 f.replace

另外,你这里逗号句号应该是中文的吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

29

积分

新手上路

Rank: 1

5#
发表于 2017-3-9 16:43:54 |只看该作者
crossin先生 发表于 2017-3-9 15:08
难道不应该是 i.replace 吗?为啥写 f.replace

另外,你这里逗号句号应该是中文的吧 ...

嗯嗯,明白了
回复

使用道具 举报

1

主题

0

好友

29

积分

新手上路

Rank: 1

6#
发表于 2017-3-13 15:15:29 |只看该作者
本帖最后由 疾风魔狼剑 于 2017-3-13 15:37 编辑
crossin先生 发表于 2017-3-9 15:08
难道不应该是 i.replace 吗?为啥写 f.replace

另外,你这里逗号句号应该是中文的吧 ...

from  random import randint
import linecache
score=0
f=open('chg.txt')   #文本内容就是上面格式化以后的长恨歌
count=0
while count>=0:
    r=randint(1,120)
    x=linecache.getlines('.\chg.txt')[r]#随机取一行
    print x      #打印这一行
    t=len(x)
    h=x[t-3:t-1] #取每行最后的标点
    if h==',':   #如果是‘,’ 则要求回答下阙
        answer=linecache.getlines('.\chg.txt')[r+1]
        answer=answer[:-1]
    else:     #否则回答上阙
        answer=linecache.getlines('.\chg.txt')[r-1]
        answer=answer[:-1]
    quest=raw_input()
    if quest==answer:
        print '恭喜回答正确'
        score=score+1
    elif quest=='exit':
        print '已退出程序'
        break
    else:
        print '很遗憾你做错了,正确答案是'
        print answer
        print '\n\n'
f.close()



现在有2个问题:
1这么写可以正常运行,但是偶尔会出错就是比如抽到某句应该回答下阙的,程序给的答案反而是上阙,不知道问题在哪。
2 我想在里面加个判断
if h==‘,’:
……
elif h=='。':
……
else
……

但是一改程序就错了

Traceback (most recent call last):
  File "C:\Python27\替换3.py", line 19, in <module>
    if quest==answer:
NameError: name 'answer' is not defined


能帮我看看问题出在哪好么?

刚才改了下程序,把所有的中文标点换成英文的,貌似就不会错了,怀疑问题是在标点那里。
但是具体是什么原因导致的程序判断错误呢?

quest.JPG (64.23 KB, 下载次数: 213)

quest.JPG

回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2017-3-13 20:59:04 |只看该作者
疾风魔狼剑 发表于 2017-3-13 15:15
from  random import randint
import linecache
score=0

answer没有初始化就被使用。在你改后的else里,没有给answer赋值吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

29

积分

新手上路

Rank: 1

8#
发表于 2017-3-14 08:34:58 |只看该作者
crossin先生 发表于 2017-3-13 20:59
answer没有初始化就被使用。在你改后的else里,没有给answer赋值吧

本来觉得是提示有问题,被您提醒了一下觉得应该是字符问题导致的:
如果只有if 和else,那么answer一定会有一个值
加了 elif以后 出现了既不是‘,’也不是‘。’的情况(按理来说不应该的)answer就没被赋上值
现在让我郁闷的就是这个中文标点的问题了h=x[t-3:t-1]应该是没有问题,print出来也是','或者'。',为什么一运行就跑偏
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2017-3-14 23:29:10 |只看该作者
疾风魔狼剑 发表于 2017-3-14 08:34
本来觉得是提示有问题,被您提醒了一下觉得应该是字符问题导致的:
如果只有if 和else,那么answer一定会 ...

代码里多加些 print 输出,看看运行过程中的值和你想象的是否一致
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-5-2 13:19 , Processed in 0.020622 second(s), 24 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部