设为首页收藏本站

Crossin的编程教室

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

【Python 第41课】 用文件保存游戏(3)

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

楼主
发表于 2013-9-1 22:50:22 |显示全部楼层
林夕_信仰 发表于 2013-9-1 15:51
结果保存在txt的时候,是按什么顺序来的呢?我发现有时候新建的玩家数据在最上面,有时候又在中间行@crossi ...

字典是无序,所以你不能依赖它来排序
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

沙发
发表于 2013-9-17 01:07:23 |显示全部楼层
今天发现一个Mac下IDLE的问题,折腾了很久才大约搞清楚了。
mac下的IDLE里raw_input读进来的字符串是unicode字符串,和我们平常的用的str是不一样的
如果print出包含它们的list就会发现,是u'abc'和'abc'的区别

unicode和str相加会出问题,也不能作为参数被writelines调用。而文件读出来的内容是str,还会导致输入相同的字符却无法匹配

所以如果mac下遇见奇怪的编码问题,类似
UnicodeDecodeError: 'ascii' codec can't decode byte 0xba in position 0: ordinal not in range(128)

试试把一开始的输入改为
name = raw_input('请输入你的名字:').encode('utf-8')

在windows下没这个问题,因为输入被默认编码了。Terminal好像也没问题
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

板凳
发表于 2015-3-25 10:35:08 |显示全部楼层
Envy 发表于 2015-3-24 23:41
报错了。。。
Traceback (most recent call last):
  File "C:\Users\Desktop\4.py", line 14, in

不是 in,是 is 吧?
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

地板
发表于 2015-3-25 20:39:54 |显示全部楼层
Envy 发表于 2015-3-25 16:30
你好,那个scores和score这块不太明白是什么意思,就是readlines得到的应该是一个list吧,如果最开始game ...

得到了一个3项的list
s[0]是第一项也就是name,s[1:]就是后面剩下的组成的list
scores[s[0]] = s[1:] 是以 name 为key 存储这组数据
scores.get(name)则是按名字查找数据
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

5#
发表于 2015-10-6 11:11:51 |显示全部楼层
zhangxw 发表于 2015-10-5 14:20
百思不得啊  明明没有错误  还是我有什么不知道的
python2.7

scores[name] = [str[(game_times),str(min_times),str(total_times)]
这里括号对不上吧
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

6#
发表于 2015-10-8 11:05:52 |显示全部楼层
zhangxw 发表于 2015-10-7 15:58
居然是犯了这个错误  他一直报错下一行  我就没有检查上一行

看样子以后报错的那一行以及上面一行都要看 ...

因为它在等你的右括号,但没等到你就换行了,所以它认为这个新的一行不符合语法
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

7#
发表于 2015-11-5 16:27:00 |显示全部楼层
cyueclone 发表于 2015-11-5 10:35
请教下,game1.txt中原来有两条记录,但是只要加上最后一段的写文件(f.write),game1.txt就被清空了,一片 ...

你去看下 open的打开模式
'w'模式就是重新写文件
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

8#
发表于 2015-11-6 21:18:57 |显示全部楼层
cyueclone 发表于 2015-11-6 10:01
'w'的确是重写,改成‘a’就不清空了,但是问题不在这里。而是不管w还是a,数据都没有写进到文件里面。
...

你没有close,你那个close没有加括号,就不是调用方法
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

9#
发表于 2016-4-12 22:50:24 |显示全部楼层
fishpanchax 发表于 2016-4-12 21:13
自己解决了,百度了一下,在前面加一行#coding=gbk

嗯,有中文的代码要设置编码
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

10#
发表于 2016-5-12 11:22:42 |显示全部楼层
mengnanlong 发表于 2016-5-12 00:18
crossin老师,现在有图片了,就是我的程序输入的名字,在文档里无论重复还是不重复的都是新的数据,无法叠 ...
  1. line = n + ' ' + ' '.join(scores[n]) + '\n'
复制代码
这里两个引号中间是空格,是用空格把数据连起来的。这样用split的时候才能分开成list。
你现在连在一起,split是分不开的,你在程序中间增加print,把name都打出来看一下就知道了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-5-2 08:42 , Processed in 0.031267 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部