设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
12
返回列表 发新帖
楼主: mty1111
打印 上一主题 下一主题

【Python 第40课】 用文件保存游戏(2)

[复制链接]

0

主题

0

好友

16

积分

新手上路

Rank: 1

11#
发表于 2016-12-15 15:30:11 |只看该作者
  1. #coding=UTF8
  2. from random import randint
  3. # 读取记录
  4. f=open('f:\pycharm\learn\guessNum\saveData.txt')
  5. score=f.read().split()
  6. f.close()
  7. game_times=int(score[0])
  8. min_times=int(score[1])
  9. total_times=int(score[2])
  10. # 计算平均轮次
  11. if game_times>0:
  12.     avg_times=float(total_times)/game_times
  13. else:
  14.     avg_times = 0
  15. # 显示记录
  16. print'Welcome'
  17. print'You played %d times. Min:%d. Avg:%.2f'%(
  18.     game_times,min_times,avg_times)
  19. print'Do you want to start game?'
  20. yORn=raw_input('(y/n):')
  21. # 主程序
  22. while yORn=='y':
  23.     num = randint(1, 100)
  24.     print'Guess number 1~100'
  25.     times = 0   # 当前回合轮次
  26.     bingo = False
  27.     while bingo == False:
  28.         answer = input()
  29.         if answer < num:
  30.             print'too small'
  31.         if answer > num:
  32.             print'too big'
  33.         if answer == num:
  34.             print'bingo'
  35.             bingo = True
  36.         times+=1
  37.     # 判定是否破纪录
  38.     if game_times==0 or times<min_times:
  39.         min_times=times
  40.         print'Broke record. Only %d times'%(times)
  41.     total_times+=times
  42.     game_times+=1
  43.     avg_times = float(total_times) / game_times
  44.     print'You played %d times. Min:%d. Avg:%.2f'%(
  45.         game_times,min_times,avg_times)
  46.     print'Do you want to play again?'
  47.     yORn=raw_input('(y/n:)')
  48.     # 保存记录
  49.     result='%d %d %d'%(game_times,min_times,total_times)
  50.     f=open('f:\pycharm\learn\guessNum\saveData.txt','w')
  51.     f.write(result)
  52.     f.close()
复制代码
回复

使用道具 举报

0

主题

0

好友

56

积分

注册会员

Rank: 2

12#
发表于 2017-6-22 17:24:50 |只看该作者

老师,程序可以运行,但是无法写入成绩,肿么回事啊@Crossin

本帖最后由 jinss 于 2017-6-23 15:19 编辑

f=file("E:\python\pycharm\python\game.txt")
score=f.read().split()
f.close()
game_times=int(score[0])
min_times=int(score[1])
total_times=int(score[2])
if game_times>0:
    ave_times=float(total_times)/game_times
else:
    ave_times=0
print'you have played %d round, at least is %d try  ,avg is %.2f'%(game_times,min_times,ave_times)
from random import randint
times=0
print'guess what I think?'
num=randint(0,100)
bingo=False
while bingo==False:
    times+=1
    num1 = input()
    if num1>num:
        print'too big'
    if num1<num:
        print"too small"
    if num1==num:
        print'bingo'
        bingo=True
if game_times==0 or times<min_times:
    min_times=times
total_times+=times
game_times=game_times+1
result='%d,%d,%.2f'%(game_times,min_times,total_times)
f=file('E:\python\pycharm\python\game.txt','w')
f.write(result)
f.close()
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

13#
发表于 2017-6-23 21:41:40 |只看该作者
jinss 发表于 2017-6-22 17:24
f=file("E:\python\pycharm\python\game.txt")
score=f.read().split()
f.close()

没看出问题
你自己程序里加输出调试,看看 result 的值对不对,再看为什么没有写入
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

88

积分

注册会员

Rank: 2

14#
发表于 2018-3-13 15:48:21 |只看该作者
from random import randint
f=open('d:\Others\\text.txt')
score=f.read().split()
f.close()
cishu=int(score[0])
lunshu=int(score[1])
avg=int(score[2])
if cishu>0:
    avg=float(lunshu)/cishu
else:
    avg==0
print('游戏次数:%d,猜出所用的轮数:%d,平均每次所用轮数:%.2f'%(
    cishu,lunshu,avg))
num=randint(1,50)
print('猜一个1到50之间的数')
Biggo=False
time=0
while Biggo==False:
      time+=1
      answer=int(input())
      if answer>num:
          print('大了')
          Biggo==True
      if answer<num:
          print('小了')
          Biggo==True
      if answer==num:
          print('Biggo')
          Biggo==False
if cishu==0 or time<lunshu:
    lunshu==time
    cishu=cishu+1
    avg=float(lunshu)/cishu
data='%d,%d,%.2f'%(cishu,lunshu,avg)
f=open('d:\Others\\text.txt','w')
f.write(data)
f.clsoe()
能运行,但最后无法写入最新结果,自查半天也差不是原因,求教。。。
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

15#
发表于 2018-3-14 10:57:17 |只看该作者
最后 close() 不是 clsoe
你这个应该直接就会有报错提示的,注意看报错信息
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

16#
发表于 2018-3-19 14:52:49 |只看该作者
老师你好
运行代码提示
Traceback (most recent call last):
  File "C:/Users/chenh/PycharmProjects/untitled/1.py", line 9, in <module>
    game_times=int(score[0])
ValueError: invalid literal for int() with base 10: '\xef\xbb\xbf0'

这个报错一直出现,弄得摸不着头脑。
谢谢指教!
回复

使用道具 举报

0

主题

0

好友

18

积分

新手上路

Rank: 1

17#
发表于 2018-3-19 14:53:09 |只看该作者
#coding:utf-8
from random import randint

#load file
f=open('C:\\Users\chenh\Desktop\game.txt')
score=f.read().split()
f.close()
game_times=int(score[0])
min_times=int(score[1])
total_times=int(score[2])

#judge
if game_times>0:
    avg_times = float(total_times)/game_times
else:
    avg_times = 0
#output result
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
    answer = input()
    if answer < num:
        print "太小了!"
    if answer > num:
        print "太大了!"
    if answer == num:
        print "BINGO!"
        bingo = True
if game_times ==0 or times <= min_times:
    min_times = times
total_times +=times
game_times +=1
result = '%d %d %d'%(game_times,min_times,total_times)
f = open('C:\Users\chenh\Desktop\game.txt','w')
f.write(result)
f.close()
回复

使用道具 举报

0

主题

2

好友

72

积分

注册会员

Rank: 2

18#
发表于 2018-4-12 15:19:54 |只看该作者
  1. #读取文件中的成绩数据
  2. f=open('D:\game.txt')
  3. score=f.read().split()
  4. f.close()
  5. #分别存入变量中
  6. game_times=int(score[0])
  7. min_times=int(score[1])
  8. total_times=int(score[2])
  9. times=0
  10. #计算游戏的平均轮数,注意浮点数和避免除零错误
  11. if game_times>0:
  12.     avg_times=float(total_times)/game_times
  13. else:
  14.     avg_times=0
  15. print(game_times,min_times,avg_times)
  16. import random
  17. num=random.randint(1,5)
  18. guess=eval(input('guess what I think?'))
  19. #猜数过程
  20. def compare(x,y):
  21.     if x<y:
  22.         print('%d is too small' %x)
  23.     elif x>y:
  24.         print('%d is too big' %x)
  25.     else:
  26.         print('bingo')
  27.     return x==y

  28. #开始猜数
  29. while num!=guess:
  30.     compare(guess,num)
  31.     guess=eval(input('guess what I think?'))
  32.     times+=1
  33. print('bingo')
  34. if game_times==0 or times<min_times:
  35.     min_times=times
  36. total_times+=times
  37. game_times+=1
  38. result='%d %d %d' %(game_times,min_times,total_times)
  39. f=open('D:\game.txt','w')
  40. f.write(result)
  41. f.close()


  42.    

复制代码
回复

使用道具 举报

0

主题

0

好友

8

积分

新手上路

Rank: 1

19#
发表于 2018-10-20 15:14:25 |只看该作者
老师,用这句判断的用意何在?
if game_times == 0 or times < min_times:

我试过忽略上句直接用min_times=times一样可以达到效果
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

20#
发表于 2018-10-21 13:24:56 |只看该作者
zorro 发表于 2018-10-20 15:14
老师,用这句判断的用意何在?
if game_times == 0 or times < min_times:

当然不一样……你这个每次都会刷新最小轮数,之前的成绩就被覆盖了
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

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

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

GMT+8, 2024-11-23 00:28 , Processed in 0.023265 second(s), 22 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部