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

Crossin的编程教室

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

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

[复制链接]

1

主题

0

好友

23

积分

新手上路

Rank: 1

发表于 2016-4-12 17:33:40 |显示全部楼层
本帖最后由 fishpanchax 于 2016-4-12 17:37 编辑

请问为什么我点Run Module没有任何反应呢,连保存都没法保存

from random import randint

name = raw_input('请输入你的名字:')


f = file('game.txt')
lines = f.readlines()
f.close()

scores = {}
for l in lines:
   s = l.split()
   scores[s[0]] = s[1:]
score = scores.get(name)
if score is None:
   score = [0, 0, 0]

game_times = int(score[0])
min_times = int(score[1])
total_times = int(score[2])
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')
a = 0
while a== 0:
    answer = input('Your answer is:')
    times += 1
    if answer < num:
        print'too small'
    if answer > num:
        print'too large'
    if answer == num:
        print'BINGO!!!'
        a = 1

if game_times == 0 or times < min_times:
    min_times = times
total_times +=times
game_times += 1


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


f = file('game.txt','w')
f.write(result)
f.close()
回复

使用道具 举报

1

主题

0

好友

23

积分

新手上路

Rank: 1

发表于 2016-4-12 21:13:42 |显示全部楼层
fishpanchax 发表于 2016-4-12 17:33
请问为什么我点Run Module没有任何反应呢,连保存都没法保存

from random import randint

自己解决了,百度了一下,在前面加一行#coding=gbk
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

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

使用道具 举报

0

主题

0

好友

80

积分

注册会员

Rank: 2

发表于 2016-5-11 18:39:43 |显示全部楼层
jill188
jill199
jill199
leon155
leon188
jill166
3521
crossin老师,由于没法发图片,我就把txt记录的文档复制给你哈,为什么我的相同名字的数据是一条一条的?还有我运行程序的时候一直是0,0,0.我用的python3,请问是为什么啊?
回复

使用道具 举报

0

主题

0

好友

80

积分

注册会员

Rank: 2

发表于 2016-5-12 00:18:47 |显示全部楼层
crossin老师,现在有图片了,就是我的程序输入的名字,在文档里无论重复还是不重复的都是新的数据,无法叠加,请问一下,问题出在哪里了?怎么解决啊?谢谢~~
2.png
1.png

结果

结果
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

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

使用道具 举报

0

主题

0

好友

80

积分

注册会员

Rank: 2

发表于 2016-5-12 12:06:21 |显示全部楼层
crossin先生 发表于 2016-5-12 11:22
这里两个引号中间是空格,是用空格把数据连起来的。这样用split的时候才能分开成list。
你现在连在一起, ...

十分感谢~~~crossin老师~我还要加强对语法的使用。谢谢老师
回复

使用道具 举报

0

主题

0

好友

20

积分

新手上路

Rank: 1

发表于 2016-8-5 15:19:54 |显示全部楼层
aa 5 3 0
kk 5 2 0
打卡
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

发表于 2016-8-5 20:16:37 |显示全部楼层
39.40.41断断续续看了一个星期,终于看完了,虽然不是很熟,但代码总算是都能看懂了,按照课程抄下来运行出一些小问题也都能找到问题出在哪里并且自己解决。
  1. from random import randint

  2. name=raw_input('请输入姓名:')
  3. f=file('text1.txt')
  4. lines=f.readlines()
  5. f.close()
  6. scores={}
  7. for l in lines:
  8.     s=l.split()
  9.     scores[s[0]]=s[1:] #s[0]是姓名,在score中是KEY,为键赋值.
  10. score=scores.get(name) #socre等于在字典scores查找的键
  11. if score is None:
  12.     score=[0, 0, 0] #给不存在的用户赋值创建一个新的字典项
  13.    
  14. game_times=int(score[0])
  15. min_times=int(score[1])
  16. total_times=int(score[2])
  17. if game_times>0:
  18.     avg_times=float(total_times)/game_times
  19. else:
  20.     avg_times=0
  21. print'%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案'%(name,game_times,min_times,\
  22.         avg_times)

  23. num=randint(1,100)
  24. times=0
  25. print'Guess what i think?'
  26. bingo=False
  27. while bingo==False:
  28.     times+=1
  29.     answer = input()
  30.     if num<answer:
  31.         print'too big'
  32.     if num>answer:
  33.         print'too small'
  34.     if num==answer:
  35.         print'bingo'
  36.         bingo=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=''
  43. for n in scores: #遍历键
  44.     line=n+' '+' '.join(scores[n])+'\n' #姓名+空格+合并字典值为一个字符串要加空格+换行
  45.     result+=line #把成绩作为一个字符串赋值给result
  46. f=file('text1.txt','w')
  47. f.write(result)
  48. f.close()
复制代码
回复

使用道具 举报

0

主题

0

好友

96

积分

注册会员

Rank: 2

发表于 2016-12-15 15:38:28 |显示全部楼层
  1. #-*-coding:utf-8-*-
  2. a = 1
  3. while a == 1:
  4.     from random import randint
  5.     name = raw_input('请输入你的名字')#输入名字
  6.    
  7.     f = open('jifen.txt')
  8.     lines = f.readlines()#读取文件内容并制成list
  9.     f.close()
  10.     scores = {}#建立一个字典
  11.     for i in lines:#遍历lines
  12.         s = i.split()#通过空格隔开制成list
  13.         scores[s[0]] = s[1:]#从list提出元素并在字典里赋值,名字是KEY,数据是VALUE


  14.     score = scores.get(name)#在字典中查找输入的名字
  15.     if score is None:
  16.         score = [0, 0, 0]
  17.    
  18.     game_times = int(score[0])#总游戏数
  19.     min_times = int(score[1])#最少轮数
  20.     total_times = int(score[2])#总轮数
  21.     if game_times > 0:
  22.         avg_times = float(total_times)/game_times
  23.     else:
  24.         avg_times = 0
  25.     print ' 你已经玩%d了次,最少%d轮猜出答案,平均%.2f轮猜出答案 '%(game_times,min_times,avg_times)

  26.     num = randint(1 , 100)
  27.     times = 0
  28.     print ' 请猜一个100以内的数字'
  29.     bingo = False
  30.     while bingo == False:
  31.         times += 1
  32.         answer = input()
  33.         if answer < num:
  34.             print 'too small'
  35.         if answer > num:
  36.             print 'too big'
  37.         if answer == num:
  38.             print 'bingo'
  39.             bingo = True
  40.    
  41.     if game_times == 0 or times < min_times:
  42.         min_times = times
  43.     total_times += times
  44.    
  45.     game_times += 1


  46.     scores[name] = [str(game_times),str(min_times),str(total_times)]#由于是新玩家 没有数据 给新玩家赋值
  47.     result = ' '
  48.     for n in scores:#遍历scores的KEY
  49.         line = n + ' ' +' '.join(scores[n]) + '\n'
  50.         #n是scores中的key也就是名字 scores[n] 是value 也就是数据

  51.         result += line#将遍历出来的元素加进result字符组

  52.         f = open ('jifen.txt','w')
  53.         f.write(result)
  54.         f.close
  55.         
复制代码
老师,请帮我看下后面的注解对不对,想了好长时间
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 07:58 , Processed in 0.026066 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部