请选择 进入手机版 | 继续访问电脑版
设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: mty1111

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

[复制链接]

174

主题

45

好友

10万

积分

管理员

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
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2015-10-5 14:20:26 |显示全部楼层
本帖最后由 zhangxw 于 2015-10-5 15:28 编辑
  1. from random import randint

  2. name = raw_input('Please input your name:')

  3. f = open('G:\PL\game.txt')
  4. lines=f.readlines()
  5. f.close()

  6. scores= {}
  7. for I in lines:
  8.     s = I.split()
  9.     scores[s[0]] = s[1:]
  10. score = scores.get(name)
  11. if score is None:
  12.     score = [0,0,0]

  13. game_times = int(score[0])
  14. min_times = int(score[1])
  15. total_times = int(score[2])

  16. if game_times>0:
  17.     avg_times = float(total_times)/game_times
  18. else:
  19.     avg_times = 0
  20. print '%s,you have played %d times,at least take %d times guess the answer,the \
  21. average time to guess the answer is %.2f'%(name,game_times,min_times,avg_times)
  22. #game process

  23. num = randint(1,100)
  24. times = 0
  25. print 'Guesss what I think?'
  26. bingo = False
  27. while bingo == False:
  28.     times += 1
  29.     answer = input()
  30.     if answer < num:
  31.         print 'Too small'
  32.     if answer > num:
  33.         print 'Too big'
  34.     if answer == num:
  35.         print 'bingo'
  36.         False = True

  37. if game_times == 0 or times < min_times:
  38.     min_times = times
  39. total_times += times
  40. game_times += 1

  41. scores[name] = [str[(game_times),str(min_times),str(total_times)]
  42. result = ''   #这一行报错 SyntaxError: invalid syntax 仔细看了  没错啊
  43. for n in scores:
  44.     line = n+''+''.join(scores[n])+'\n'
  45.     result += line
  46. f = open('G:\PL\game.txt','w')
  47. f.write(result)
  48. f.close()
复制代码
百思不得啊  明明没有错误  还是我有什么不知道的
python2.7
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 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
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2015-10-7 15:58:32 |显示全部楼层
crossin先生 发表于 2015-10-6 11:11
scores[name] = [str[(game_times),str(min_times),str(total_times)]
这里括号对不上吧

居然是犯了这个错误  他一直报错下一行  我就没有检查上一行

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

多谢先生
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

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

使用道具 举报

0

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2015-11-5 10:35:08 |显示全部楼层
请教下,game1.txt中原来有两条记录,但是只要加上最后一段的写文件(f.write),game1.txt就被清空了,一片空白,原来的记录没有了。哪里出问题了?(python3.3;PyScripter V2.6 x86). 谢谢~
from random import randint
name = input('Input Your Name:')
f = open('C:\Documents and Settings\Administrator\My Documents\game1.txt')
lines = f.readlines()
#print (lines)
f.close()
scores = {}
for l in lines:
#    print(l)
    s = l.split()
#    print (s)
    scores[s[0]] = s[1:]
#    print (scores)

score = scores.get(name)
#print(score)
if score is None:
    score = [0,0,0]

game_times = int(score[0]) + 1
min_times = int(score[1]) + 2
total_times = int(score[2]) + 3
if game_times > 0:
    avg_times = float(total_times) / game_times
else:
    avg_times = 0

print ('%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案' % (
    name, game_times, min_times, avg_times))

num = randint(1,100)
times = 0 #记录本次游戏轮数
print ('Guess what i think')

scores[name] = [str(game_times), str(min_times), str(total_times)]
#print(scores[name])
#print(scores)
result = ''
for n in scores:
    line = n + ' ' + ' '.join(scores[n]) + '\n'
#    print(n)
#    print(scores[n])
#    print (' '.join(scores[n]))
    result += line
#    print (line)
#    print(result)
print (result)

f = open('C:\Documents and Settings\Administrator\My Documents\game1.txt','w')
f.write (result)
#print(result)
f.close

回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 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
回复

使用道具 举报

0

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2015-11-6 10:01:03 |显示全部楼层
crossin先生 发表于 2015-11-5 16:27
你去看下 open的打开模式
'w'模式就是重新写文件

'w'的确是重写,改成‘a’就不清空了,但是问题不在这里。而是不管w还是a,数据都没有写进到文件里面。
比如,print (result),在屏幕上显示的是:
czy 4 5 6
cy 1 2 3
xxm 1 2 3
想要写到文件里:f = open('C:\Documents and Settings\Administrator\My Documents\game1.txt','a')
                        f.write (result)
再次打开文件,显示的还是:
czy 4 5 6
cy 1 2 3
完全没有变化!为什么数据没有被写进文件呢?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

0

主题

0

好友

50

积分

注册会员

Rank: 2

发表于 2015-11-9 09:38:50 |显示全部楼层
crossin先生 发表于 2015-11-6 21:18
你没有close,你那个close没有加括号,就不是调用方法

的确是这样,修改后就正常了。原来怎么也想不明白,还以为是版本问题。原来写文件时一定要关闭,拿掉f.close()也不行。非常感谢~。
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 23:42 , Processed in 0.026256 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部