2020-12-16

本文介绍了多个Python编程的实践示例,包括猜数字游戏、囚徒困境、循环与数据处理、游戏开发、数学运算和面向对象编程。通过这些例子,读者可以了解到Python的基本语法、条件判断、循环控制、类和对象的运用,以及如何实现游戏逻辑和数据处理。此外,文章还展示了如何使用numpy库进行数值计算,以及如何处理异常情况。
摘要由CSDN通过智能技术生成

""" 2020.12.14 猜数字大小游戏

secret = 24

for i in range(3):

    guess = input('''guess which number is my secret:''')

    if  int(guess) ==secret:

        print('正确!你很棒哦。')  #输出结果

        break

    elif int(guess)>secret:

        print('你猜的太大了,请重新猜猜~')

    else:

        print('你猜的太小了,请重新猜猜~')

else:

    print('给你3次机会都猜不到,你失败了。')

"""

 

"""2020.12.15

假设有两名囚徒A和B因为合伙犯罪被抓捕,因没有确凿可以指认罪行的证据,审判者准备单独审判两位囚徒。

若两人都认罪,则两人各判10年;若一个认罪一个抵赖,则认罪的人判1年,抵赖的人判20年;若两人都抵赖,则各判3年。


 

while True:

    man1 = input('囚徒A,你认罪吗?(选择“是”或“否”)\n')

    man2 = input('囚徒B,你认罪吗?(选择“是”或“否”)\n')

    if (man1 == '是') and (man2 == '是'):

        print('A、B,你俩各判10年,散场!')

        break

    elif (man1 == '是') and (man2 == '否'):

        print('A,看在你诚实的面子上,判你1年;B,你这家伙不老实,判你20年!\n散场!')

        break

    elif (man2 == '是') and (man1 == '否'):

        print('B,看在你诚实的面子上,判你1年;A,你这家伙不老实,判你20年!\n散场!')

        break

    elif (man2 == '否') and (man1 == '否'):

        print('A、B,你这俩家伙都不老实,每人判3年!\n散场!')

        break

    else:

        print('输入错误,请重新输入吧!')

print('判决结束,法官要回家睡觉啦!')

"""

"""2020.12.15

上一个练习,我们将“囚徒困境”写成了代码,让程序收集两名囚犯的认罪情况,进而决定他们的判决:

两人都认罪,则各判10年;一个认罪一个抵赖,则前者判1年,后者判20年;两人都抵赖,各判3年。只有两人都不认罪,程序才会停止。

现在有一个社会学家,在不同的人群中做这个实验,一旦遇到都不认罪的情况,就停止该人群中的实验。

同时,他希望程序能记录每一对实验者的选择,以及记录第几对实验者都选择不认罪。请你帮帮他吧。

 

n = 0

list_answer = []

 

while True:

    n += 1

    a = input('A,你认罪吗?请回答认罪或者不认:')

    b = input('B,你认罪吗?请回答认罪或者不认:')

    list_answer.append([a,b])  # 用列表嵌套的方式来存放实验者的选择,也可用元组或字典。

    if a == '认罪' and b == '认罪':

        print('两人都得判10年,唉')

    elif a == '不认' and b == '认罪':

        print('A判20年,B判1年,唉')

    elif a == '认罪' and b == '不认':

        print('A判1年,B判20年')

    else:

        print('都判3年,太棒了')

        break

 

print('第' + str(n) + '对实验者选了最优解。')

 

for i in range(n):

    # 注意数据类型的转换,以及计数起点的不同(0和1)

    print('第' + str(i+1) + '对实验者的选择是:' + str(list_answer[i]))

"""

"""2020.12.15

练习目标:

通过这个练习,你会学会综合使用循环、数据提取和条件判断。

 

练习要求:

我很喜欢看电影,我回忆了一下,这两年我觉得还不错的国产电影。

下面,会将电影的影片名和主演放在字典里,如movie = {'妖猫传':['黄轩','染谷将太']}。

需要你补充一些代码,让其他人只要输入演员名,就打印出:××出演了电影××。

 

movies = {

'妖猫传':['黄轩','染谷将太'],

'无问西东':['章子怡','王力宏','祖峰'],

'超时空同居':['雷佳音','佟丽娅'],

}

actor = input('Which actor do you want to check?')

for movie in movies:                 # 用 for 遍历字典

    actors = movies[movie]           # 读取各个字典的主演表

    if actor in actors:

        print(actor+'出演了'+movie)

#print(actors)

"""

"""2020.12.15

游戏编写第一步:陈述

 

print('【玩家】\n血量:100\n攻击:50')  # 自定义玩家角色的血量和攻击,用换行符'\n'来优化视觉

print('------------------------')  # 辅助功能,起到视觉分割的作用,让代码的运行结果更清晰

 

print('【敌人】\n血量:100\n攻击:30')

print('------------------------')

 

print('你发起了攻击,【敌人】剩余血量50')  # 人工计算敌人血量:100-50=50

print('敌人向你发起了攻击,【玩家】剩余血量70')  # 人工计算玩家血量:100-30=70

print('------------------------')

 

print('你发起了攻击,【敌人】剩余血量0')  # 双方同时攻击,若血量出现小于等于0,游戏结束

print('敌人向你发起了攻击,【玩家】剩余血量40')

print('-----------------------')

 

print('敌人死翘翘了,你赢了!') # 打印结果

"""

"""2020.12.15

添加了time模块的版本,有延时作用(自定属性,人工PK,游戏版本1.0)

 

import time  #通常import语句会写到代码的开头

 

print('【玩家】\n血量:100\n攻击:50')  

print('------------------------')  

time.sleep(1.5)

#暂停1.5秒,再继续运行后面的代码

 

print('【敌人】\n血量:100\n攻击:30')

print('------------------------')

time.sleep(1.5)

#同上

 

print('你发起了攻击,【敌人】剩余血量50')  

print('敌人向你发起了攻击,【玩家】剩余血量70') 

print('------------------------')

time.sleep(1.5)

 

print('你发起了攻击,【敌人】剩余血量0')  

print('敌人向你发起了攻击,【玩家】剩余血量40')

print('-----------------------')

time.sleep(1.5)

 

print('敌人死翘翘了,你赢了!')

"""

"""2020.12.15

(随机属性,自动PK,版本2.0)

 

import time,random

 

# 生成双方角色,并生成随机属性。

player_life = random.randint(100,150)

player_attack = random.randint(30,50)

enemy_life = random.randint(100,150)

enemy_attack = random.randint(30,50)

 

# 展示双方角色的属性

print('【玩家】\n'+'血量:'+str(player_life)+'\n攻击:'+str(player_attack))

print('------------------------')

time.sleep(1)

print('【敌人】\n'+'血量:'+str(enemy_life)+'\n攻击:'+str(enemy_attack))

print('------------------------')

time.sleep(1)

 

# 双方PK

while player_life > 0 and enemy_life > 0:

    player_life = player_life - enemy_attack

    enemy_life = enemy_life - player_attack

    print('你发起了攻击,【敌人】剩余血量'+str(enemy_life))

    print('敌人向你发起了攻击,【玩家】剩余血量'+str(player_life))

    print('-----------------------')

    time.sleep(1.5)

 

# 打印战果

if player_life > 0 and enemy_life <= 0:

    print('敌人死翘翘了,你赢了')

elif player_life <= 0 and enemy_life > 0:

    print('悲催,敌人把你干掉了!')

else:

    print('哎呀,你和敌人同归于尽了!')

"""

"""2020.12.15

(打印战果,三局两胜,版本3.0)

 

import time

import random

 

player_victory = 0

enemy_victory = 0

 

for i in range(1,4):

    time.sleep(1.5)

    print('  \n——————现在是第 %s 局——————' % i)

    #对比之前:(' \n——————现在是第'+str(i)+'局——————')

    player_life = random.randint(100,150)

    player_attack = random.randint(30,50)

    enemy_life = random.randint(100,150)

    enemy_attack = random.randint(30,50)

 

    print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack))

    print('------------------------')

    time.sleep(1)

    print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack))

    print('-----------------------')

    time.sleep(1)

 

    while player_life > 0 and enemy_life > 0:

        player_life = player_life - enemy_attack 

        enemy_life = enemy_life - player_attack

        print('你发起了攻击,【敌人】剩余血量%s' % enemy_life)

        print('敌人向你发起了攻击,【玩家】的血量剩余%s' % player_life)

        print('-----------------------')

        time.sleep(1.2)

 

    if player_life > 0 and enemy_life <= 0:

        player_victory += 1

        print('敌人死翘翘了,你赢了!')

    elif player_life <= 0 and enemy_life > 0:

        enemy_victory += 1

        print('悲催,敌人把你干掉了!')

    else:

        print('哎呀,你和敌人同归于尽了!')

 

if player_victory > enemy_victory :

    time.sleep(1)

    print('\n【最终结果:你赢了!】')

elif enemy_victory > player_victory:

    print('\n【最终结果:你输了!】')

else: 

    print('\n【最终结果:平局!】')

"""

"""2020.12.15

三局两胜后继续游戏的版本

 

import time

import random

 

while True:

    player_victory=0

    enemy_victory=0     

    for i in range(1,4):

        time.sleep(2)

        print('  \n——————现在是第 %s 局——————' % i)

        player_life = random.randint(100,150)

        player_attack = random.randint(30,50)

        enemy_life = random.randint(100,150)

        enemy_attack = random.randint(30,50)

 

        print('【玩家】\n血量:%s\n攻击:%s' % (player_life,player_attack))

        print('------------------------')

        time.sleep(2)

        print('【敌人】\n血量:%s\n攻击:%s' % (enemy_life,enemy_attack))

        print('-----------------------')

        time.sleep(2)

 

        while player_life > 0 and enemy_life > 0:

            player_life = player_life - enemy_attack 

            enemy_life = enemy_life - player_attack

            print('你发起了攻击,【玩家】剩余血量%s' % player_life)

            print('敌人向你发起了攻击,【敌人】的血量剩余%s' % enemy_life)

            print('-----------------------')

            time.sleep(2)

 

        if player_life > 0 and enemy_life <= 0:

            player_victory += 1

            print('敌人死翘翘了,你赢了!')

        elif player_life <= 0 and enemy_life > 0:

            enemy_victory += 1

            print('悲催,敌人把你干掉了!')

        else:

            print('哎呀,你和敌人同归于尽了!')

 

    if player_victory > enemy_victory :

        time.sleep(2)

        print('\n【最终结果:你赢了!】')

    elif enemy_victory > player_victory:

        print('\n【最终结果:你输了!】')

    else: 

        print('\n【最终结果:平局!】')

 

    a1 = input('要继续游戏吗,请输入n退出,输入其他继续:')  # 在 while True 循环中设置跳出条件。

    if a1 == 'n':

        break

    else:

        pass

"""

"""2020.12.15

九九乘法表

 

for i in range(1,2):

    print( '%d X %d = %d' % (i,1,i*1) ,end = '  ' )

print('') 

 

for i in range(1,3):

    print( '%d X %d = %d' % (i,2,i*2) ,end = '  ' )

print('') 

 

for i in range(1,4):

    print( '%d X %d = %d' % (i,3,i*3) ,end = '  ' )

print('') 

 

for i in range(1,5):

    print( '%d X %d = %d' % (i,4,i*4) ,end = '  ' )

print('')

 

for i in range(1,6):

    print( '%d X %d = %d' % (i,5,i*5) ,end = '  ' )

print('') 

 

for i in range(1,7):

    print( '%d X %d = %d' % (i,6,i*6) ,end = '  ' )

print('')

 

for i in range(1,8):

    print( '%d X %d = %d' % (i,7,i*7) ,end = '  ' )

print('') 

 

for i in range(1,9):

    print( '%d X %d = %d' % (i,8,i*8) ,end = '  ' )

print('') 

 

for i in range(1,10):

    print( '%d X %d = %d' % (i,9,i*9) ,end = '  ' )

print('') 

"""

"""2020.12.15

九九乘法表,简洁版

 

for i in range (1,10):

    for j in range(1,10):

        print('%d X %d = %d' % (j,i,i*j),end = '  ')

        if i==j:

            print('')

            break

"""

"""2020.12.15

一次测评中,老师将 学习小组A 和 学习小组B 的测评成绩(满分 100 分)从低到高记录放进两个列表:

A = [91, 95, 97, 99],B = [92, 93, 96, 98] 。

现在,老师想将两个小组的成绩合并为一个列表,并按照从低到高的顺序排序,你能帮老师完成吗?

 

list1 =  [91, 95, 97, 99]  

list2 =  [92, 93, 96, 98]

 

# 把 A 组成绩赋值给一个新列表,用来存合并的成绩——这个细节要注意!

list1.extend(list2)

list1.sort()

print(list1)

"""

"""2020.12.15

上一个练习中,我们完成了两组成绩的合并和排序。

不过,老师有了新的需求:想知道两组的平均分,以及把低于平均分的成绩也打印出来。

所以,在这个练习中,我们会帮老师计算出两组的平均分,并挑出那些在平均分之下的成绩。

 

scores1 =  [91, 95, 97, 99, 92, 93, 96, 98]  

sum = 0

scores2 = []

 

for score in scores1:

    sum = sum + score

    average = sum/len(scores1)  

    # 上面最好不要去数有几个学生,那样的话,学生数目发生变化就要调代码。

print('平均成绩是:{}'.format(average))

 

for score in scores1:

    if score < average:

        scores2.append(score) # 少于平均分的成绩放到新建的空列表中

print(' 低于平均成绩的有:{}'.format(scores2))  # 上个关卡选做题的知识。

""""""

2020.12.15

(通过导入模块的方式,这也是python牛逼的地方,基本上用不着编写函数了)上一个练习中,我们完成了两组成绩的合并和排序。

不过,老师有了新的需求:想知道两组的平均分,以及把低于平均分的成绩也打印出来。

所以,在这个练习中,我们会帮老师计算出两组的平均分,并挑出那些在平均分之下的成绩。

 

import numpy as np  # 导入 numpy库,下面出现的 np 即 numpy库

 

scores1 =  [91, 95, 97, 99, 92, 93, 96, 98]  

scores2 = []

 

average = np.mean(scores1)  # 一行解决。

print('平均成绩是:{}'.format(average))

 

for score in scores1:

    if score < average:

        scores2.append(score) # 少于平均分的成绩放到新建的空列表中

print(' 低于平均成绩的有:{}'.format(scores2))  # 上个关卡选做题的知识。

 

# 下面展示一种NumPy数组的操作,感兴趣的同学可以自行去学习哈。

scores3 = np.array(scores1)

print(' 低于平均成绩的有:{}'.format(scores3[scores3<average]))

"""

"""____________________________________________第9关 函数_____________________________________________"""

"""2020.12.15

编写的第一个函数

def math(x):

    y = x ** 2 + x

    return y

 

a=math(10)

print(a)

""""""

2020.12.15

函数返回多个值

 

import random 

#引入random模块

 

appetizer = ['话梅花生','拍黄瓜','凉拌三丝']

def coupon(money):

    if money < 5:

        a = random.choice(appetizer)   #随机选取列表中的值

        return a

    elif 5 <= money < 10:

        b = random.choice (appetizer)

        return b, '溏心蛋'

 

print(coupon(3))

print(type(coupon(3)))

print(coupon(6))

print(type(coupon(6)))

"""

"""2020.12.15

函数的嵌套

rent = 3000

def sum_cost():

    sum = rent + cost()

    print('本月的总成本是' + str(sum))

def cost():

    utilities = int(input('请输入本月的水电费用'))

    food_cost = int(input('请输入本月的食材费用'))

    variable_cost = utilities + food_cost

    print('本月的变动成本是' + str(variable_cost))

    return variable_cost

sum_cost()

"""

"""2020.12.15

Python的一种异常处理机制,可在异常出现后及时捕捉,然后内部消化掉,让程序继续运行。

 

try:

    age = int(input('请输入一个整数:'))

except ValueError:

    print('要输入整数噢')

"""

"""

#不用修改代码,直接运行即可,尝试多输入几次非数字

while True:

    try:

        age = int(input('你今年几岁了?'))

        break

    except ValueError:

        print('你输入的不是数字!')

 

if age < 18:

    print('不可以喝酒噢')

"""

"""____________________________________________第12关 我们都是中国人(类和方法)_____________________________________________"""

 

"""2020.12.16

创建一个类Compute,并调用它

class Computer:

    screen = True

 

    def start(self):

        print('电脑正在开机中……')

 

my_computer = Computer()#类的实例化

print(my_computer.screen)

my_computer.start()

#print(dir(list))

"""

"""2020.12.16

观察其数据类型

 

class Computer:

    screen = True

 

    def start(self):     #这就是参数self的特殊之处:在定义时不能丢,在调用时要忽略。

        print('电脑正在开机中……')

 

my_computer = Computer() #类的实例化

my_computer.start()      #调用类中的方法(传参不用管self)

print(type(my_computer)) #第一行:<class '__main__.Computer'>验证了my_computer属于Computer这个类;

print(my_computer)       #第二行打印出Computer类的一个实例对象(object),后面的一串字符表示这个对象的内存地址<__main__.Computer object at 0x0000000002548F40>。

"""

"""2020.12.16

在类的内部调用其他方法,特殊参数:self,self其实代表的是类的实例本身

class Chinese:

 

    def greeting(self):

        print('很高兴遇见你')

    def say(self):

        self.greeting() 

        print('我来自中国')

 

person = Chinese()

# 创建实例person

person.say()

# 调用say()方法

"""

"""2020.12.16

特殊方法:初始化方法 def __init__(self):

利用这个特性,在编写习惯上,我们会在初始化方法内部完成类属性的创建,为类属性设置初始值,这样类中的其他方法就能直接、随时调用

 

# 阅读代码后直接运行    

class Chinese:

 

    def __init__(self): 

        print('很高兴遇见你,我是初始化方法')

 

person = Chinese() #是不是很神奇?我们只是创建了实例,还没有调用,初始化方法就自动执行了!

"""

"""2020.12.16

注释比较详细的一个

 

class Chinese:  # 类的创建

    eye = 'black'  # 类属性的创建

 

    def __init__(self,hometown):  # 类的初始化方法

        self.hometown = hometown  # 实例属性的创建

        print('程序持续更新中……')  # 初始化中的语句

    

    def born(self):  # 实例方法的创建

        print('我生在%s。'%(self.hometown))  # 方法的具体语句

 

wufeng = Chinese('广东')  # 类的实例化

print(wufeng.eye)  # 打印实例的属性(从类传递的)

wufeng.born()  # 实例方法的调用

"""

"""2020.12.16

一个比较经典的类的写法

class Chinese:

 

    def __init__(self, name, birth, region):

        self.name = name   # self.name = '吴枫' 

        self.birth = birth  # self.birth = '广东'

        self.region = region  # self.region = '深圳'

 

    def born(self):

        print(self.name + '出生在' + self.birth)

 

    def live(self):

        print(self.name + '居住在' + self.region)    

 

person = Chinese('吴枫','广东','深圳') # 传入初始化方法的参数

person.born()

person.live()

"""

"""2020.12.16

一些练习

class Chinese:

    # 初始化方法的创建,init两边双下划线。

    def __init__(self, hometown):

        self.hometown = hometown

        print('你在哪里出生?')

    

    def born(self):

        print('我生在%s。' % self.hometown)

 

wufeng = Chinese('广东') # 传给参数hometown

wufeng.born()

"""

"""2020.12.16

面向对象编程,用这种思维设计代码时,考虑的不是程序具体的执行过程(即先做什么后做什么),而是考虑先创建某个类,在类中设定好属性和方法,即是什么,和能做什么。

将面向过程编程的代码改成面向对象编程示例:

 

import math

 

class Project:

    

    def __init__(self):

        self.key = 1           #循环运行程序的开关

 

    def input(self):

        choice = input('请选择计算类型:(1-工时计算,2-人力计算)')

        if choice == '1':

            self.size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))

            self.number = int(input('请输入人力数量:(请输入整数)'))

            self.time = None

        if choice == '2':

            self.size = float(input('请输入项目大小:(1代表标准大小,请输入小数)'))

            self.number = None

            self.time = float(input('请输入工时数量:(请输入小数)'))

 

    def estimated(self):

        # 人力计算

        if (self.number == None) and (self.time != None):

            self.number = math.ceil(self.size * 80 / self.time)

            print('项目大小为%.1f个标准项目,如果需要在%.1f个工时完成,则需要人力数量为:%d人' %(self.size,self.time,self.number)) 

        # 工时计算

        elif (self.number != None) and (self.time == None):

            self.time = self.size * 80 / self.number

            print('项目大小为%.1f个标准项目,使用%d个人力完成,则需要工时数量为:%.1f个' %(self.size,self.number,self.time))  

    

    def again(self):

        a = input('是否继续计算?继续请输入y,输入其他键将结束程序。')

        if a != 'y':

            # 如果用户不输入'y',则把key赋值为0

            self.key = 0  

 

    # 主函数

    def main(self):

        print('欢迎使用工作量计算小程序!')

        while self.key == 1:

            self.input()

            self.estimated()

            self.again()

        print('感谢使用工作量计算小程序!')

        

# 创建实例

project1 = Project()

project1.main()

"""

"""

import time

class Chinese:

 

    def __init__(self,hometown,region):

        self.hometown = hometown

        self.region = region

        time.sleep(1.5)

        print('程序持续更新中')

        time.sleep(1.5)

 

    def born(self):

        print('我出生在%s' %(self.hometown))

 

    def live(self):

        print('我现在%s' %(self.region))

    

    def mains(self):

        self.born()

        self.live()

 

chinese = Chinese('广东','深圳')  #2020.12.16 20:38  我在这里Debug时耗时过多,因为没有缩进对齐

chinese.mains()

"""

"""2020.12.16

类的继承示例

 

class Chinese:

    eye = 'black'

 

    def eat(self):

        print('吃饭,选择用筷子。')

 

class Cantonese(Chinese):  

# 通过继承,Chinese类有的,Cantonese类也有

    pass               # pass表示'跳过',不执行其他操作

 

# 验证子类可以继承父类的属性和方法,进而传递给子类创建的实例

yewen = Cantonese()  

# 子类创建的实例,从子类那间接得到了父类的所有属性和方法

print(yewen.eye)  

# 子类创建的实例,可调用父类的属性

yewen.eat()  

# 子类创建的实例,可调用父类的方法

"""

"""2020.12.16

自己随意编写的一个类的继承

 

class Chinese:

 

    eyes = 'black'

 

    def __init__(self):

        print('我是初始化的那个函数')

 

    def method1(self):

        print('会用筷子')

    

    def method2(self):

        print('会说中文')

 

class Guangdongren(Chinese):

    pass

 

guangdongren = Guangdongren()

print(guangdongren.eyes)

guangdongren.method1()

guangdongren.method2()

"""

"""2020.12.16

isinstance()函数的用法

函数isinstance(),可以用来判断某个实例是否属于某个类。

具体用法是输入两个参数(第一个是实例,第二个是类或类组成的元组),输出是布尔值(True 或 False)。

"""





















 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值