设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: mty1111
打印 上一主题 下一主题

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

[复制链接]

0

主题

0

好友

10

积分

新手上路

Rank: 1

61#
发表于 2018-2-18 17:34:28 |只看该作者
老师,过年好,我是新手
scores={}
for i in lines:
    #print(i)
    s=i.split()
    print(s)
    scores[s[0]]=s[1:]
    print(scores)
score = scores.get(name)
print(score)
if name is None:
    score=[0,0,0]
game_times=int(score[0])
最后输出有错误
输入名字a
['0', '0', '0']
{'0': ['0', '0']}
None
Traceback (most recent call last):
  File "e:\vscod\a8.py", line 18, in <module>
    game_times=int(score[0])
TypeError: 'NoneType' object is not subscriptable
通过退出代码 1 终止的终端进程
老师,为何新名字添加不进去,txt文件是0 0 0,名字为空,程序就停了,
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

62#
发表于 2018-2-19 10:42:05 |只看该作者
t111222333 发表于 2018-2-18 17:34
老师,过年好,我是新手
scores={}
for i in lines:

代码里有空行
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

10

积分

新手上路

Rank: 1

63#
发表于 2018-2-20 19:51:51 |只看该作者
老师,我去掉所有空行,还是这个问题,程序里显示score还是NoneType,而scores显示是class,我在txt文件里先把人名加上,输入这个名程序能运行,输入新名字就不行了
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

64#
发表于 2018-2-21 12:45:13 |只看该作者
这个你得调试啊,看中间哪一步的数据不对,不然我也帮不上忙
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

65#
发表于 2018-3-1 20:02:13 |只看该作者
我的报错了,求指导。
  1. from random import randint

  2. name=input('请输入你的名字:')    #输入玩家的名字

  3. f=open('c:\Python36\00-Practice\game.txt')
  4. lines=f.readlines()
  5. f.close()

  6. scores={}                   #初始化一个空字典
  7. for l in lines:
  8.     s=l.split()             #把每一行的数据拆分为List
  9.     scores[s[0]]=s[1:]      #第一项作为key,剩下的作为value
  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.     #加上显示玩家的名字
  21.    
  22. print('%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案'%(name,game_times,min_times,avg_times))

  23. num=randint(1,100)
  24. times=0
  25. print('Guess What I am Think?')
  26. bingo=False
  27. while bingo==False:
  28.       times+=1          #记录本次游戏轮数
  29.       answer=int(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.           bingo=True
  37.       
  38. #如果是第一次玩,或者轮数比最小轮数少,则用最小轮数
  39.       
  40. if game_times==0 or times<min_times:
  41.       min_times=times
  42. total_times+=times
  43. game_times+=1


  44. #把成绩更新到对应的玩家数据中
  45. #加str转成字符串,为后面的格式化做准备
  46. scores[name]=[str(game_times),str(min_times),str(total_times)]
  47. result=''       #初始化一个空字符串,用来存储数据
  48. for n in scores:
  49.       line=n+''+''.join(scores[n])+'\n'
  50.       result+=line                      #添加到result中

  51. f=open('c:\Python36\00-Practice\game.txt','+w')
  52. f.write(result)
  53. f.close()
  54.       
复制代码
报错如下:

QQ图片20180301200133.png (24.71 KB, 下载次数: 327)

报错图片

报错图片

回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

66#
发表于 2018-3-1 20:46:00 |只看该作者
找到了,一个是绝对地址,取消绝对地址引用就行了。
第二个是‘ ‘引号里面要有空格。
以上,供各位同学参考。
至于为什么绝对地址会报错,现在还没搞清楚。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

67#
发表于 2018-3-2 13:56:58 |只看该作者
Frank.Lin 发表于 2018-3-1 20:46
找到了,一个是绝对地址,取消绝对地址引用就行了。
第二个是‘ ‘引号里面要有空格。
以上,供各位同学参 ...

字符串中的 \0 被转义了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

68#
发表于 2018-3-2 14:41:22 |只看该作者
crossin先生 发表于 2018-3-2 13:56
字符串中的 \0 被转义了

哦,谢谢老师!怪不得很多文件的安装地址要求纯英文地址安装。
回复

使用道具 举报

0

主题

0

好友

88

积分

注册会员

Rank: 2

69#
发表于 2018-3-14 16:03:01 |只看该作者
from random import randint
name=input('输入你的名字:')

f=open('d:\Others\\text.txt')
line=f.readlines()
f.close()

scores={}
for l in scores:
    s=l.split()    #s是每一列,带有每个玩家的信息(姓名,成绩)
    scores[s[0]]=s[1:]
score=scores.get(name)
if score is None:
    score=[0,0,0]

cishu=int(score[0])
lunshu=int(score[1])
zong=int(score[2])
if cishu>0:
    avg=float(zong)/cishu
else:
    avg=0
print('%s:你的成绩为:游戏次数:%d,猜出所用的轮数:%d,平均每次所用轮数:%.2f'%(
    name,cishu,lunshu,avg))
num=randint(1,50)
print('猜一个1到50之间的数:')
Bingo=False
time=0
while Bingo==False:
      time+=1
      answer=int(input())
      if answer>num:
          print('大了')
          Bingo==True
      if answer<num:
          print('小了')
          Bingo==True
      if answer==num:
          print('Bingo')
          Bingo==False
if cishu==0 or time<lunshu:
    lunshu=time
cishu=cishu+1
zong+=time
scores[name]=[str(cishu),str(lunshu),str(zong)]
result=''
for n in scores:
    line=n+' '+' '.join(scores[n])+'\n'
    result+=line
   
f=open('d:\Others\\text.txt','w')
f.write(result)
f.clsoe()
麻烦老师看下代码了,程序能运行,游戏也能玩,就是没法写入成绩,
自查不出来问题了。。。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

70#
发表于 2018-3-15 17:18:26 |只看该作者
yamika 发表于 2018-3-14 16:03
from random import randint
name=input('输入你的名字:')

f.close()
最近好像好多人犯这个错啊……
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-11-22 07:42 , Processed in 0.016989 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部