2020-04-12

之前跟着Crossin的编程教室上的教程学习了一点python的入门知识教程,下面是几个总结了学习内容的游戏代码和其他小程序:

  1. 猜数字的小游戏:

    from random import randint
    num=randint(1,100)
    name=input('请输入你的名字:')
    scores={}
    f=open('game.txt')
    oneuser=f.readlines()
    f.close()
    for el in oneuser:
        s=el.split()
        scores[s[0]]=s[1:]
    score=scores.get(name)
    if score==None:
        scores[name]=[0,0,0]
        score=scores.get(name)
    game_time=int(score[0])
    min_time=int(score[1])
    total_time=int(score[2])
    if game_time>0:
        avg_time=total_time/game_time
    else:
        avg_time=0
    print ('你已经玩了%d次,最少%d轮猜出答案,平均%.2f轮猜出答案' % (
        game_time, min_time, avg_time))
    print('Guess what I am thinking of?')
    answer=int(input())
    time=1
    while answer!=num:
        if answer<num:
            print('%d is too small!'%answer)
        else:
            print('%d is too big'%answer)
        print('Guess again')
        answer=int(input())
        time+=1
    print('bingo, %d is the right answer!'%num)
    if game_time==0 or time<min_time:
        min_time=time
    total_time+=time
    game_time+=1
    scores[name]=[str(game_time),str(min_time),str(total_time)]
    result=''
    for n in scores:
        line=n+' '+' '.join(scores[n])+'\n'
        result+=line
    f=open('game.txt','w')
    f.write(result)
    f.close()
    

    运行该程序需要在.py文件所在子目录创建一个名称为game的txt的文件以储存用户数据。

  2. 点球大战:

    import random
    back=False
    while back==False:              #判断是否再来一局游戏
        direct = ['左', '中', '右']
        score=[0,0]
        rest1=5
        rest2=5                      #rest用于判断游戏是否需要中止
        def kick():                 #将踢球过程写成一个函数
            global rest1,rest2
            # 攻
            print('\n')
            print('=====轮到你踢球了=====')
            print('请选择一个方向攻击:')
            print('左,中,右')
            you = input()
            print('你选择的攻击方向为%s' % you)
            com = random.choice(direct)
            print('你的对手选择防守方向为%s' % com)
            if com != you:
                print('====恭喜你,进球成功!====')
                score[0] += 1
            else:
                print('====很遗憾,对方防守成功……====')
            print('\n')
            #判断是否需要提前终止游戏
            if rest1>0:
                rest1-=1
                if score[0]<score[1] and score[0]+rest1<score[1]:
                    print('===对不起,你已经无法力挽狂澜===')
                    return True
                if score[1]<score[0] and score[1]+rest2<score[0]:
                    print('===守门员已经无法阻挡你了!===')
                    return True
                #判断逻辑为,rest储存剩余局数,每局最多得一分。如果在某一局结束后,自己的得分小于电脑的得分,并且当前得分
                #加上剩余的局数仍小于电脑的得分,则比赛无需继续进行。之后定义一个end变量用于终止游戏,将返回值赋值给end
    
            # 守
            print('=====轮到你防守了=====')
            print('请选择一个方向防守:')
            print('左,中,右')
            you = input()
            print('你选择的防守方向为%s' % you)
            com = random.choice(direct)
            print('你的对手选择攻击方向为%s' % com)
            if com != you:
                print('====很遗憾,对方攻击成功……====')
                score[1] += 1
            else:
                print('====恭喜你,防守成功!====')
            print('\n')
            # 判断是否需要提前终止游戏
            if rest2 > 0:
                rest2-= 1
                if score[0] < score[1] and score[0] + rest1 < score[1]:
                    print('===对不起,你已经无法力挽狂澜===')
                    return True
                if score[1] < score[0] and score[1] + rest2 < score[0]:
                    print('===守门员已经无法阻挡你了!===')
                    return True
                # 判断逻辑为,rest储存剩余局数,每局最多得一分。如果在某一局结束后,自己的得分小于电脑的得分,并且当前得分
                # 加上剩余的局数仍小于电脑的得分,则比赛无需继续进行。之后定义一个end变量用于终止游戏,将返回值赋值给end
    
            return False
        i=0                         #计比赛轮数
        end=False                   #与kick函数内部结构配合用于判断是否终止游戏
        while i<5 and not end:      #游戏的主体
            print('\n')
            print('=====第%d轮比赛=====' % (i + 1))
            end=kick()
            i+=1
        # 比赛结束,计算得分
        print('\n')
        print('比赛结束,得分情况为%d :%d' % (score[0], score[1]))
        # 判断输赢
        if score[0] > score[1]:
            print('======你赢啦!!======')
        else:
            if score[0] < score[1]:
                print('======你输了……======')
            else:
                print('======是平局哟======')
                #加时赛
                count = 1
                jiashi = True
                while jiashi == True:
                    print('\n')
                    print('=====加时赛%d=====' % count)
                    kick()
                    #加时赛判断输赢
                    if score[0] > score[1]:
                        print('五轮比赛及加时赛结束,得分情况为%d :%d' % (score[0], score[1]))
                        print('======你赢啦!!======')
                        jiashi = False
                    else:
                        if score[0] == score[1]:
                            print('======继续加时赛======')
                            jiashi = True
                            count += 1
                        else:
                            print('五轮比赛及加时赛结束,得分情况为%d :%d' % (score[0], score[1]))
                            print('======你输了……======')
                            jiashi=False
        print('想再来一局比赛吗?(回答是或否)')
        answer = input()
        if answer == '是':
            back = False
        else:
            back = True
    
  3. 判断坐标所在象限:

    back=False
    while back==False:
        x=int(input('x='))
        y=int(input('y='))
        if x>0:
            if y>0:
                print('坐标(%d,%d)位于第一象限'%(x,y))
            else:
                if y<0:
                    print('坐标(%d,%d)位于第四象限'%(x,y))
                else:
                    print('坐标(%d,%d)位于x轴上'%(x,y))
        else:
            if x<0:
                if y>0:
                    print('坐标(%d,%d)位于第二象限'%(x,y))
                else:
                    if y<0:
                        print('坐标(%d,%d)位于第三象限'%(x,y))
                    else:
                        print('坐标(%d,%d)位于x轴上'%(x,y))
            else:
                if y!=0:
                    print('坐标(%d,%d)位于y轴上'%(x,y))
                else:
                    print('坐标(%d,%d)是原点O'%(x,y))
        print('你想再输入一次吗?(回答是或否)')
        answer=input()
        if answer=='是':
            back=False
        else:
            back=True
    
  4. 天气查询小程序:

    import requests
    try: #若try内部的程序报错,则执行except语句
        while True:  
            city = input('请输入要查询的城市名:\n')
            if not city:
                break
            req = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=%s' % city)
            dic_city = req.json()    #将从天气查询接口得到的json文件转化为一个字典
            city_data = dic_city.get('data')
            if city_data:
                forecast = city_data.get('forecast')[0]
                print(forecast.get('date'))
                print(forecast.get('type'))
                print(forecast.get('high'))
                print(forecast.get('low'))
            else:
                print('未获得')
    except:
        print('查询失败')
    
  5. 面向对象的程序设计:

    class Vehicle:
        def __init__(self, speed):
            self.speed = speed
            
        def drive(self, distance):
            print ('need %f hour(s)' % (distance / self.speed))
            
    class Bike(Vehicle):
        pass
        
    class Car(Vehicle):
        def __init__(self, speed, fuel):
            Vehicle.__init__(self, speed)
            self.fuel = fuel
            
        def drive(self, distance):
            Vehicle.drive(self, distance)
            print ('need %f fuels' % (distance * self.fuel))
    
    b = Bike(15.0)
    c = Car(80.0, 0.012)
    b.drive(100.0)
    c.drive(100.0)
    
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,192评论 6 511
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,858评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,517评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,148评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,162评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,905评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,537评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,439评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,956评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,083评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,218评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,899评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,565评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,093评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,201评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,539评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,215评论 2 358

推荐阅读更多精彩内容

  • 基础1.r''表示''内部的字符串默认不转义2.'''...'''表示多行内容3. 布尔值:True、False(...
    neo已经被使用阅读 1,686评论 0 5
  • 8月22日-----字符串相关 2-3 个性化消息: 将用户的姓名存到一个变量中,并向该用户显示一条消息。显示的消...
    future_d180阅读 976评论 0 1
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,034评论 0 2
  • Cyber-dojo.org是编程操练者的乐园。下面是这个网站上的43个编程操练题目,供编程操练爱好者参考。 10...
    程序员吾真本阅读 1,872评论 1 2
  • 这群女人是真的强,比男人还厉害,我这每天过的心惊胆战的 不敢有半点松弛,一天没有状态 就一直是倒数,努力了好几...
    阿飞Fineyoga阅读 185评论 0 8