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

    运行该程序需要在.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] 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)
    

你可能感兴趣的:(2020-04-12)