文章目录

  • 前言
  • 一、猜数字1.0
  • 二、猜数字2.0
  • 三、猜数字2.2
  • 四、猜数字3.0
  • 五、猜数字3.8
  • 感谢您的阅读,祝您生活愉快,事事顺意!!

前言

新高一学生一枚,这几天网课时自学了下Python(就是那些最简单的输出输入),写了个猜数字,又认识到CSDN这个平台,发个贴纪念下
如果有啥错了的,还请各位大佬指教,感激不尽!!!


一、猜数字1.0

在小学的时候,我们一群小孩子拿着纸写数字让别人猜,那时还觉得很带劲(当然现在不玩了),当我学了print和if后,寻思着貌似理论上应该可以拿Python复原一个出来,于是就开始慢慢摸索

在小学时,有人会在纸上写一个数字,同理,我们需要随机生成一个数字,所以就有了

from random import randintnum = randint(0,500)print('''Guess which number I'm thinking ?     Tips:The range is between 0 and 500''')bingo = Falsewhile bingo == False:answer = int(input() )if answer < num:print('%s is too small'% answer)if answer == num:print('''Bingo!You are right! Print the number you have printed for a half might be a good choice to finish this game puickly
''')bingo = Trueif answer > num:print('%s is too big'% answer)

我承认,因为是第一次写这种程序,更多的是从网上一步一步看着写下来的,所以出来print的内容,其它的都不是原创。但是当它真正运行起来的时候,喜悦之情难以言表,就和最初成功print出“hello world”时的心情,很好奇,很兴奋。

二、猜数字2.0

写2.0版的时候有了个奇思妙想,既然if可以判断输入,那有没有可能,可以加一个步骤,让游戏者可以选择难易程度呢?
抱着试一试的想法,我试着在from random import randint前加上判断的选项,于是:

print('''Which level do you want to choose:
Easy: print 1
Difficult :print 2''')
a = int(input() )
if a == 1:....................
if a == 2:....................

结果一运行,真的能行,而且还没报错!而唯一的缺点就是重复的代码太多了(强迫症震怒),尤其是在判断大小那一块,要是能用一个东西表示就好了,像数学里的换元法一样。

三、猜数字2.2

略过2.1版本,和2.2差别不大,主要是bug修复

在写2.2的时候,我遇见了Pycharm,真就一见钟情,太好用了,最喜欢它的换行和代码检查功能,就是没法撤回很难受(或者说我不知道咋撤回?)

进入正题,因为需要是简化代码,重复执行,我学习到了函数这个东西,函数和数学里的意思差不多,但使用更加灵活,以至于我理解了好长时间。搞出来了个这玩意:

def f(x, y):if x < y:print('%s is too small' % x)return Falseif x == y:print('''Bingo!You are right!"二分法"might be a good choice to finish this game quickly
''')print('Do you want to try again?')print('''print "0" to play again''')m = int(input())if m == 0:g()return Trueif x > y:print('%s is too big' % x)return Falseprint('''Which level do you want to choose(取值范围不同):
简单 请输入1
困难 请输入2''')
a = int(input())
if a == 1:from random import randintnum = randint(0, 500)print('''Guess which number I'm thinking ?     Tips:The range is between 0 and 500''')win = Falsecount = 0while win == False:count += 1answer = int(input())win = f(answer, num)if a == 2:from random import randintnum = randint(0, 2000)print('''Guess which number I'm thinking ?     Tips:The range is between 0 and 2000''')win = Falsecount = 0while win == False:count += 1answer = int(input())win = f(answer, num)

感觉困难的是在理解函数后面括号的值啥意思。我把它理解成一个“需要我去定义的一个东西”,这样在后续使用的时候,可以自行计算。

好比数学里的f(x)=x+1。此时令x = 1,则f(x) = 2,一个思路

这个版本中还加入了计分设置,也是从网上学的,却没想到坑了2.3版本

2.3版本,我试着加入另一个函数,从而更加简化代码,但是,两个函数的count没法共用,就一个问题一个问题的冒出,最后一不小心又全删了【微笑】,没办法,从头再来吧!

这里的主体的代码还是从网上学习,一字一句码下来的,但是在一些小地方已经有自己的思路了,所以就给我了继续更新下去的动力。此时的目的倒不是说为了玩游戏,更多的是在写这个程序中练习Python的语法。

四、猜数字3.0

上文说到,我把猜数字的2.3代码不小心删了,2.2的代码也不知道放哪去了,于是只得重写一份。

查找问题的原因,我就学习到了global,这家伙能让一个变量全局使用(我这么理解的),的亏了它,让整个程序得以成功运行。

global count

在运行时,我又觉得在后面的显示太突兀了,瞬间来几条print,眼睛看不过来,于是学习到了如何让程序停止几秒钟

import time
time.sleep(1)

此时我还发现…Python3.10.8好似可以直接输入中文(2.2的时候还没注意到),所以全部汉化了。

于是,猜数字3.0长这样:

import timecount = 0def g():print('''您想体验哪个难度的游戏 :简单 请输入1  困难 请输入2   ''')a = int(input())if a == 1:print('您可以输入2来获得取值范围,如果不想知道取值范围,请输入1')b = int(input())if b == 2:print('0到800之间')from random import randintnum = randint(0, 800)print('''猜猜我在想哪个数字 ?  ''')bingo = Falsewhile bingo == False:global countcount += 1answer = int(input())bingo = f(answer, num)if b == 1:from random import randintnum = randint(0, 800)print('''猜猜我在想哪个数字 ?  ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)if a == 2:print('您可以输入2来获得取值范围,如果不想知道取值范围,请输入1')c = int(input())if c == 1:from random import randintnum = randint(0, 2400)print('''这是困难模式,猜猜我在想哪个数字 ? ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)if c == 2:print('取值范围是0到2400')from random import randintnum = randint(0, 2400)print('''这是困难模式,猜猜我在想哪个数字 ? ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)def f(x, y):global countif x < y:print('%s 太小了,试着猜大一点' % x)return Falseif x == y:print('''恭喜你,猜对了! 不妨试一下“二分法”,这可以加快猜数字的速度''')time.sleep(1)print('''您输入了 %d 次''' % count)print('想再来一次吗?')time.sleep(0.7)print('''输入“0”再来一局''')m = int(input())if m == 0:g()return Trueif x > y:print('%s 太大了,不妨猜小一点试试' % x)return Falseg()

(所以这个程序只有一个g(),在运行是吧)

五、猜数字3.8

没错直接从3.0跑到了3.8,其原因是因为没时间上CSDN,学习任务还是有点多的。

进入正题,我改进的第一个方向就是加了一个自定义范围的模式,长这样:

if a == 3:print('您可以自定义取值范围')j = int(input('请输入最小范围:'))k = int(input('请输入最大范围:'))h = ('%s ,%s' % (j, k))y(j, k)print('猜猜我在想你规定范围内的哪个数字')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)

之所以有这个灵感,是因为我每次调试新功能时,都要一个个去猜,耗费时间还没准报错,在
pycharm代码检查时还查不出来,所以加上这个功能后,调试会舒服很多。

这个功能加上去后就鸽了好一段时间了,不得不感叹啊,高中生活实在是超出了我在初中的想象,直到我某个中午睡觉起来,突然想到能不能给它加一个记录战绩的功能,于是一番学习,就有了:

        if w == 1:q = datetime.datetime.now()file = open('E:\\猜数字战绩.txt', 'a')file.write('%s\n%s 在 (%s) 范围下 输入了 %d 次 最终答案是%s\n\n ' % (q, name, h, count, num))file.close()print('战绩已保存至E盘')time.sleep(0.7)print('想再来一次吗?')time.sleep(0.7)print('''输入“0”再来一局''')m = int(input())if m == 0:g()return Trueif w == 2:print('想再来一次吗?')time.sleep(0.7)print('''输入“0”再来一局''')m = int(input())if m == 0:g()return True

###这一大堆代码是最终的结果,里面有些内容是还没交代的,我在后文中会说

是的,在这个保存战绩的代码里面,我加入了保存玩家名字,保存玩的时间的功能,虽然不得不承认,我发布这个程序到我们班同学群里,没几个人下载(其实我也不怎么玩),但是这让游戏的可玩性增强了,还有更多我自己的点子。嗯……到这里代码基本上都是我自己写出来的了,也让我有了更大的自信继续下去。

之后呢,我在学校发的书上看见了清屏的功能,就是这玩意:

import os
os.system("cls")

这波,灵感不就来了吗,我在先前代码,就是那个g()上面加上了这行代码,这样再来一次时会更加简洁。

但是,在我第一次测试的时候(没错,我鸽了大概2周才测试最新的游戏),直接报错,试了无数个global,但是就是没法展现分数,在那一栏是空白的。

经过我大概2个小时的摸索,干脆在新建一个函数,让他来代替保存战绩中“保存值域”的功能,这可不容易哦,一个全局变量折腾好久,报错好多次,最后结果是这样:

def y(ka, kb):global numnum = randint(ka, kb)..................h = ('%d ,%d' % (m, n))

解决方案就是:把那个h给global了四五次,因为不知道哪里该用哪里不该用,好在最后成了。

再就是加入了音效,这个没啥好说的,增强游戏体验?感觉没有GUI来的快,但是我还不会搞GUI界面,没办法先放一下咯。

最后展现一下3.8的全部代码:

import os
import time
import datetimecount = 0
global num, h  # h为取值范围def y(ka, kb):global numnum = randint(ka, kb)def g():global num, count, hprint('''您想体验哪个难度的游戏 :简单 请输入1   困难 请输入2  自定义 请输入3''')a = int(input())if a == 1:m = 0n = 800h = ('%d ,%d' % (m, n))y(m, n)print('您可以输入2来获得取值范围,如果不想知道取值范围,请输入1')b = int(input())if b == 2:print('%d 到 %d 之间' % (m, n))print('''猜猜我在想哪个数字 ?  ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)if b == 1:from random import randintnum = randint(m, n)print('''猜猜我在想哪个数字 ?  ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)if a == 2:ma = 0mb = 2400y(ma, mb)h = ('%d ,%d' % (ma, mb))print('您可以输入2来获得取值范围,如果不想知道取值范围,请输入1')c = int(input())if c == 1:print('''这是困难模式,猜猜我在想哪个数字 ? ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)if c == 2:print('%d 到 %d 之间' % (ma, mb))print('''这是困难模式,猜猜我在想哪个数字 ? ''')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)if a == 3:print('您可以自定义取值范围')j = int(input('请输入最小范围:'))k = int(input('请输入最大范围:'))h = ('%s ,%s' % (j, k))y(j, k)print('猜猜我在想你规定范围内的哪个数字')bingo = Falsewhile bingo == False:count += 1answer = int(input())bingo = f(answer, num)def f(x, y):global count, name, num, hif x < y:playsound('Windows Default.wav')print('%s 太小了,试着猜大一点' % x)return Falseif x == y:playsound('tada.wav')print('''恭喜 %s ,猜对了! 不妨试一下“二分法”,这可以加快猜数字的速度''' % name)print('''您输入了 %d 次''' % count)print('您是否想保存记录至E盘 1 保存 2 不保存')w = int(input())if w == 1:q = datetime.datetime.now()file = open('E:\\猜数字战绩.txt', 'a')file.write('%s\n%s 在 (%s) 范围下 输入了 %d 次 最终答案是%s\n\n ' % (q, name, h, count, num))file.close()print('战绩已保存至E盘')time.sleep(0.7)print('想再来一次吗?')time.sleep(0.7)print('''输入“0”再来一局''')m = int(input())if m == 0:os.system("cls")g()return Trueif w == 2:print('想再来一次吗?')time.sleep(0.7)print('''输入“0”再来一局''')m = int(input())if m == 0:os.system("cls")g()return Trueif x > y:playsound('Windows Default.wav')print('%s 太大了,不妨猜小一点试试' % x)return Falsename = input('您的游戏名是 :')
from random import randint
from playsound import playsoundg()

OK,这就是3.8更新的内容了,主要就是功能更新,希望下次能有更多好功能加进去吧!!!
更新日志:
1.增加自定义难度模式,玩家可以自己选择范围
2.新定义函数 h(ka,kb),方便简化后续代码
3.新增了保存战绩功能
4.增加了猜错与猜对音效
5.增加了os函数,使“再来一次”时可以删除之前操作的过程,使界面更简洁
6.加强了全局函数的引用
7.优化了部分代码和中文,删除了无效代码
8.修复了一大堆bug

感谢您的阅读,祝您生活愉快,事事顺意!!

纪念我的第一个Python程序:猜数字相关推荐

  1. 第一个Python代码-猜数字

    第一个Python代码--猜数字 最近有打算学习Python,今天看了看Python编程从入门到实践的前两章,动手编了一下书前言中作者Eric Matthes在儿童时期编写的猜数字的程序 number ...

  2. python游戏最简单代码-如何利用Python开发一个简单的猜数字游戏

    前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(high)&q ...

  3. 苹果笔记本python开发第一个程序_第一个Python程序【文章来自老男孩】

    首先我们打开python 交互式解释器, 执行如下命令: Python 3.5.1+ (default, Mar 30 2016, 22:46:26) [GCC 5.3.1 20160330] on ...

  4. c语言字符串用for语句去重,python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...

    也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...

  5. python简介、第一个python程序、变量、字符编码、用户交互程序、if...else、while、for...

    也愿大家永葆初心-- 已识乾坤大,犹怜草木青. 一.python简介 首先,我们普及一下编程语言的基础知识.用任何编程语言来开发程序,都是为了让计算机干活,比如下载一个MP3,编写一个文档等等,而计算 ...

  6. python猜数字游戏编程入门_如何利用Python开发一个简单的猜数字游戏

    导读热词 前言 本文介绍如何使用Python制作一个简单的猜数字游戏. 游戏规则 玩家将猜测一个数字.如果猜测是正确的,玩家赢.如果不正确,程序会提示玩家所猜的数字与实际数字相比是"大(hi ...

  7. python实现简单小游戏_用python开发一个有趣的猜数字小游戏(实现简单的GUI界面学习)...

    文章目录 用python开发一个有趣的猜数字小游戏 用于字符串的格式化,通过 {} 和 : 来代替以前的 % 1. python的GUI编程 1.1 pythonGUI常用库对比 Python 提供了 ...

  8. 用pycharm写python_使用Pycharm编写第一个python程序

    1.打开 Pycharm,选择 Create New Project,创建一个新项目 2.选择Pure Python表示创建一个纯Python程序项目, Location 表示该项目保存的路径,Int ...

  9. 第一个Python程序

    第一个Python程序 第一个Python程序 在写代码之前,请千万不要用"复制"-"粘贴"把代码从页面粘贴到你自己的电脑上.写程序也讲究一个感觉,你需要一个字 ...

最新文章

  1. 关于outlook2010帐户设置
  2. JVM调优:基本垃圾回收算法
  3. 对话国际农民丰收节贸易会-万祥军:雀巢全球谋定农民合作
  4. 阅读类APP体验好不好?可从这些指标衡量
  5. 关于捕获键盘信息的processDialogkey方法2--具体应用
  6. Java 中的List动态转Map集合
  7. 每周更新学习进度表--第九周
  8. IDEA搭建Maven Web(SSM)项目(二)——jar包引入、jetty服务器配置和ssm配置
  9. 通过几种方式来查看windows vista的激活状态
  10. 计算机自定义桌面设置在哪里设置,桌面显示日历设置方法
  11. 达梦DM7数据库服务启动异常,管道文件已存在,DmAPService dead but pid file exists
  12. 规模化敏捷转型中,哪些问题会被经常问到?
  13. 服务器硬盘灯不亮 阵列是正常的,服务器磁盘阵列出现故障有哪些解决办法?...
  14. Unity API通读 CustomEditor
  15. 讲讲React中的State和Props
  16. System.Globalization.CultureInfo.InvariantCulture失效
  17. 老闪创业那些事儿(外传)——教人与用人的撕裂
  18. 2021 icpc 沈阳 J-Luggage Lock
  19. supercharge快充_华为Mate 10超级快充SuperCharge那些事儿
  20. CSDN展现量和阅读量的规则

热门文章

  1. css中的伪元素、基线对齐、盒子模型
  2. 如何在不丢失游戏数据的情况下重置Nintendo Switch
  3. 天载股票资讯白酒等抱团股反攻
  4. 点到直线的距离计算原理及MATLAB程序
  5. Activiti7工作流入门和基本使用-工作流引擎介绍
  6. 不思议迷宫 服务器维护,不思议迷宫精英服为什么进不去了 不思议迷宫精英服12月1日更新内容详解...
  7. 数字麦克风PDM信号采集与STM32 I2S接口应用(一)
  8. 大恒工业相机搭建双目相机(软件)
  9. 快速去除图标斜线水印
  10. Fedora14 Samba 配置