设为首页收藏本站

Crossin的编程教室

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

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

[复制链接]

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

71#
发表于 2018-3-16 17:31:32 |只看该作者
yamika 发表于 2018-3-15 21:35
先生啊,改了close,好像还是不行游戏还是能玩,就是写不进去结果
我用的py3,是有什么影响吗?

单独把你的写入代码测一下,看看行不行。另外代码里面多加输出,观察执行情况。要调试的
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

88

积分

注册会员

Rank: 2

72#
发表于 2018-3-17 16:50:15 |只看该作者
用你说的方法,调试了半小时,终于弄清楚原因了:
while循环里,返回值bingo=True,不满足while条件了,while语句是不继续执行了,但程序也就停止了,while后面的程序都不执行了,必须在最后的if里(bingo=True)加个break,才能继续后面的程序。
可你的程序里没有break,其他都一样的,这是py3和2的差别?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

73#
发表于 2018-3-18 14:57:42 |只看该作者
yamika 发表于 2018-3-17 16:50
用你说的方法,调试了半小时,终于弄清楚原因了:
while循环里,返回值bingo=True,不满足while条件了,whi ...

不是。你描述的现象不合理,可能是其他原因。这个我无法验证
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

74#
发表于 2018-3-21 17:21:11 |只看该作者
crossin先生 发表于 2018-3-16 17:31
单独把你的写入代码测一下,看看行不行。另外代码里面多加输出,观察执行情况。要调试的 ...

先生,我这一行:scores[s[0]]=s[1:]
报错 Indexerror:list index with exit code 1
为什么啊?我的文本是

mom 3 5 31
helen 4 8 14
sara 5 18 34
jack 7 19 40

回复

使用道具 举报

0

主题

0

好友

14

积分

新手上路

Rank: 1

75#
发表于 2018-3-21 17:59:26 |只看该作者
我有一颗明珠 发表于 2017-11-2 11:58
你好,为什么我的代码运行到
scores={}
for l in lines:

请问你解决问题了吗?
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

76#
发表于 2018-3-21 23:07:44 |只看该作者
kakason 发表于 2018-3-21 17:21
先生,我这一行:scores[s[0]]=s[1:]
报错 Indexerror:list index with exit code 1
为什么啊?我的文本 ...

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

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

77#
发表于 2018-3-27 14:36:30 |只看该作者
本帖最后由 Hey_Python 于 2018-3-27 14:40 编辑

crossin老师,你好。我是萌新一个。按照老师说的去打41课的。用的是python3,但是每次我用同一个名字去玩,都没有之前记录,在文档里面又新开了一个相同的名字了。求解~~

from random import randint

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

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

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

num = randint(1,100)
times = 0     #记录本次游戏轮数
print('Guess what I think?')
bingo = False
while bingo == False:
    times += 1  #轮数+1
    answer = int(input())
    if answer < num:
      print('too small!')
    if answer > num:
      print('too big!')
    if answer == num:
      print('BINGO')
      bingo = True


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

#把成绩更新到对应的玩家数据中
#加str转成字符串,为后面的格式化作准备
scores[name] =  [str(game_times), str(min_times), str(total_times)]
result = ' '  #格式化一个空字符串,用来存储数据
for n in scores:
       #把成绩按照"name game_times min_times total_times"格式化
       #结尾要加上/n换行
       line = n + ' ' + ' '.join(scores[n]) + '/n'
       result += line  #添加到result中

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


==============================================
0 0 0/nhey 1 7 7/n/nhey 1 8 8/n/nhey 1 6 6/n
文档里面的数据
回复

使用道具 举报

174

主题

45

好友

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

78#
发表于 2018-3-27 19:42:34 |只看该作者
Hey_Python 发表于 2018-3-27 14:36
crossin老师,你好。我是萌新一个。按照老师说的去打41课的。用的是python3,但是每次我用同一个名字去玩, ...

scores.get('name')
应该是
scores.get(name)
想想为什么
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

6

积分

新手上路

Rank: 1

79#
发表于 2018-3-27 22:54:53 |只看该作者
crossin先生 发表于 2018-3-27 19:42
scores.get('name')
应该是
scores.get(name)

谢谢老师,我一开始也是写(name),之后才加了‘’,不过我发现问题了,是最后换行的那个\n打成/n了
回复

使用道具 举报

1

主题

0

好友

15

积分

新手上路

Rank: 1

80#
发表于 2018-4-1 14:55:01 |只看该作者
scores[name] = [str(game_times), str(min_times), str(total_times)]

mac pycharm 2.7  报错

list indices must be integers, not str

烦请指正
回复

使用道具 举报

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

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

GMT+8, 2024-4-27 23:31 , Processed in 0.030771 second(s), 21 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部