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

Crossin的编程教室

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

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

[复制链接]

0

主题

0

好友

56

积分

注册会员

Rank: 2

发表于 2017-8-18 21:46:09 |显示全部楼层
好的。我换下看看。
回复

使用道具 举报

3

主题

0

好友

64

积分

注册会员

Rank: 2

发表于 2017-10-30 00:04:56 |显示全部楼层
本帖最后由 Aquamarine 于 2017-10-30 00:09 编辑

PS:希望站长能够把整段代码放出来,方便学者可以自行步进调试。

请教3个问题:
①是不是只要score = scores.get(name)确定了名字,后面的数值就会加在这个人后面,保持对应不会错位?
②for n in scores:的循环(最后的循环)中,为什么n是名字?
③Python3的input函数是不是无法代码写入输入值的默认值,输入框只能为空?
回复

使用道具 举报

0

主题

0

好友

154

积分

注册会员

Rank: 2

发表于 2017-10-30 09:13:56 |显示全部楼层
Aquamarine 发表于 2017-10-30 00:04
PS:希望站长能够把整段代码放出来,方便学者可以自行步进调试。

请教3个问题:

额。。第一个和第三个问题表述得可以更清楚一些吗?
关于第二个问题,
for n in scores:的结果和for n in scores.keys()的结果相同,尝试从这个角度理解一下
回复

使用道具 举报

3

主题

0

好友

64

积分

注册会员

Rank: 2

发表于 2017-10-30 20:36:37 |显示全部楼层
woodumpling 发表于 2017-10-30 09:13
额。。第一个和第三个问题表述得可以更清楚一些吗?
关于第二个问题,
for n in scores:的结果和for n in ...

感谢指教。
第一个问题:
进行的游戏改变了数值,是如何对应到人名上去的?
第三个问题:
第42课讲到了函数的默认参数,input是否支持,如果支持该怎么写?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-10-31 10:51:59 |显示全部楼层
1 你用的是字典,名字相当于key,数值是这个key对应的value
3 input不是你自己定义的函数,系统给你定义好了,默认参数就是空。
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

3

主题

0

好友

64

积分

注册会员

Rank: 2

发表于 2017-10-31 20:22:54 |显示全部楼层
crossin先生 发表于 2017-10-31 10:51
1 你用的是字典,名字相当于key,数值是这个key对应的value
3 input不是你自己定义的函数,系统给你定义好 ...

谢谢指教
回复

使用道具 举报

0

主题

0

好友

4

积分

新手上路

Rank: 1

发表于 2017-11-2 11:58:03 |显示全部楼层
你好,为什么我的代码运行到
scores={}
for l in lines:
   s=l.split()
   scores[s[0]]=s[1:]
这段代码时总提示:
IndexError: list index out of range
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

发表于 2017-11-2 13:04:58 |显示全部楼层
我有一颗明珠 发表于 2017-11-2 11:58
你好,为什么我的代码运行到
scores={}
for l in lines:

把中间的变量 s 输出出来看看你的
s[0] s[1:] scores 是什么就知道了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

60

积分

注册会员

Rank: 2

发表于 2017-11-3 17:15:46 |显示全部楼层
  1. from random import randint
  2. name = input('请输入你的名字:')
  3. f = open('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] # 如果查不到score,就初始化score


  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.     avq_times = float(total_times) / game_times
  19. else:
  20.     avq_times = 0
  21. print('%s,你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案'%(
  22.     name,game_times,min_times,avq_times))  # 加了个名字name,在括号处换行.

  23. num = randint(1,10)
  24. times = 0 # 记录本次游戏轮数
  25. print('猜猜我想啥?')
  26. bingo = False
  27. while bingo == False:
  28.     times += 1   #轮数+1
  29.     answer = int(input())
  30.     if answer > num:
  31.         print('太大了')
  32.     if answer < num:
  33.         print('太小了')
  34.     if answer == num:
  35.         print('bingo')
  36.         bingo = True
  37.     if answer < 0:
  38.         print('Exit game...')
  39.         break

  40. # 如果是第一次玩,或者轮数比最小轮数少,则更新最小轮数。
  41. if game_times ==0 or times < min_times:
  42.     min_times = times
  43. total_times += times # 总游戏轮数增加
  44. game_times += 1

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

  52. f = open('game.txt','w')
  53. f.write(result)
  54. f.close()

复制代码
回复

使用道具 举报

0

主题

0

好友

60

积分

注册会员

Rank: 2

发表于 2017-11-3 17:16:46 |显示全部楼层
C老师,为啥第一行的0 0 0 不会被替换掉啊,之后生成新的
王朝_20171103171303.jpg
回复

使用道具 举报

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

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

GMT+8, 2024-3-29 15:19 , Processed in 0.027251 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部