python 练习题目

article/2025/10/15 6:10:37

练习题目

一、语言元素

练习1:华氏温度转摄氏温度。

摄氏温度©与华氏温度(F)的换算式是:C = 5×(F- 32)/9,F = 9×C /5+32。

# 华氏温度转摄氏温度
# 输入华氏温度,通过转化公式,输出摄氏温度F = float(input("请输入华氏温度:"))
C = (5/9)*(F-32)
print("摄氏温度为:%.2f" %C)

总结:

  1. 字符串类型不能和数字相加减,然后使用了int()函数,又发现问题了,如果是输入小数时又会报错,然后就应该换成float()函数。
练习2:输入圆的半径计算计算周长和面积。
# 输入圆的半径计算计算周长和面积。
import math
r = float(input("输入圆的半径:"))
L = 2*(math.pi)*r
S = (math.pi)*r**2
print("周长为:%.2f"% L)
print("面积为:%.2f"% S)

总结:

π \pi π的表达方式

import math
math.pi
import numpy as np
np.pi

平方的表达方式

r**2pow(r,2)
import numpy as np
np.power(r,2)
练习3:输入年份判断是不是闰年。
# 输入年份判断是不是闰年。y = int(input("请输入年份:"))
if (y%4 == 0 and y%100!=0) or y%400==0:print("%d年是闰年" %y)
else:print("%d年不是闰年" %y)

总结 and or not 表示与或非逻辑运算符

​ & | 表示位运算符 ,按位运算符是把数字看作二进制来进行计算的

二、分支结构

练习1:英制单位与公制单位互换
# 英制单位与公制单位互换'''
长度单位: 1 英 寸=2.5400 厘 米   1 英 尺 =12 英 寸 =0.3048 米   1 码 =3 英 尺 =0.9144 米    1 英 里 =1760 码 =1.6093 千 米 
'''L = float(input("输入长度:"))
d = input('输入英制长度单位:')if d=='英寸':print( '%f英寸=%f厘米'%(L,L*2.54))
elif d=="英尺":print(L ,"英尺=" ,L * 0.3048,"米")
elif d=="码":print(str(L) + "码=" + str(L * 0.9144) + "米")
elif d=="英里":print(str(L) + "英里=" + str(L * 1.6093) + "千米")
else:print("输入单位错误,请重新输入")

**总结:**三种输出方式:

​ 格式化输出

​ 字符串拼接使用+,输出时没有空格,

​ 多变量输出使用“,”有空格

​ 浮点数和字符串不能用+拼接

练习2:掷骰子决定做什么
from random import randintface = randint(1, 6)
if face == 1:result = '唱首歌'
elif face == 2:result = '跳个舞'
elif face == 3:result = '学狗叫'
elif face == 4:result = '做俯卧撑'
elif face == 5:result = '念绕口令'
else:result = '讲冷笑话'
print(result)
练习3:百分制成绩转等级制
"""
百分制成绩转等级制成绩
90分以上    --> A
80分~89分    --> B
70分~79分	   --> C
60分~69分    --> D
60分以下    --> E"""score = float(input('请输入成绩: '))
if score >= 90:grade = 'A'
elif score >= 80:grade = 'B'
elif score >= 70:grade = 'C'
elif score >= 60:grade = 'D'
else:grade = 'E'
print('对应的等级是:', grade)
练习4:输入三条边长如果能构成三角形就计算周长和面积
#  输入三条边长如果能构成三角形就计算周长和面积
import math
a = float(input("输入三角形第一条边长:"))
b = float(input("输入三角形第二条边长:"))
c = float(input("输入三角形第三条边长:"))if a+b>c and a+c>b and b+c>a:L = a+b+cprint("三角形周长为:%f" % L)p = L/2s = math.sqrt(p*(p-a)*(p-b)*(p-c)) # 海伦公式:使用三条边长计算三角形面积print("三角形的面积为:%f" % s)
else:print("对不起,这三条边不能构成三角形,请重新输入")

开根号

import math
math.sqrt()
import numpy as np
np.sqrt()
练习5:个人所得税计算器。

在这里插入图片描述

# 个人所得税计算器。
# 个人所得税(应发工资-五险一金-起征税额)*对应的税率-对应的速算扣除数a = float(input("应发工资:"))
b = float(input("五险一金:"))k = a-b-5000if k <3000:diff = 0.03s = 0
elif k<12000:diff = 0.1s = 210
elif k<25000:diff = 0.2s = 1410
elif k<35000:diff = 0.25s = 2660
elif k<55000:diff = 0.3s = 4410
elif k<80000:diff = 0.35s = 7160
else:diff = 0.45s = 15160w = k*diff-sprint("个人所得税额为:%.2f" % w)# ------------------------------------------------------------a = float(input("应发工资:"))
b = float(input("五险一金:"))k = a-b-5000money = [80000,55000,35000,25000,12000,3000,0]
rate = [0.45,0.35,0.3,0.25,0.2,0.1,0.03]
deduction = [15160,7160,4410,2660,1410,210,0]
for i in range(len(money)):if k > money[i]:w = k*rate[i]-deduction[i]break
print("个人所得税额为:%.2f" % w)

三、循环结构

1.用for循环实现1~100求和

sum = 0
for i in range(1,101):sum += iprint(sum)
# 下面这种更方便---------------------
sum = sum(i for i in range(1,101))
print(sum)

2.用for循环实现1~100之间的偶数求和

sum = sum(i for i in range(2,101,2))
print(sum)

3.猜数字游戏
计算机出一个1~100之间的随机数由人来猜
计算机根据人猜的数字分别给出提示大一点/小一点/猜对了

# 猜数字游戏
# 计算机出一个1~100之间的随机数由人来猜
# 计算机根据人猜的数字分别给出提示大一点/小一点/猜对了import random
random.seed(0)
a = random.randint(1,100)b = int(input("请输入数字:"))
k = 1
while k:  if a > b:print("再大一点")b = int(input("请再次输入:"))elif a<b:print("再小一点")b = int(input("请再次输入:"))else:k = 0print("猜对了")# ----------------------------------------------------------------import randomanswer = random.randint(1, 100)
counter = 0
while True:counter += 1number = int(input('请输入: '))if number < answer:print('大一点')elif number > answer:print('小一点')else:print('恭喜你猜对了!')break
print('你总共猜了%d次' % counter)
if counter > 7:print('你的智商余额明显不足')

说明: 上面的代码中使用了break关键字来提前终止循环,需要注意的是break只能终止它所在的那个循环,这一点在使用嵌套的循环结构(下面会讲到)需要引起注意。除了break之外,还有另一个关键字是continue,它可以用来放弃本次循环后续的代码直接让循环进入下一轮。

4.输出乘法口诀表(九九表)

#  输出乘法口诀表(九九表)for i in range(1,10):for j in range(1,i+1):print(str(j)+"*"+str(i)+"="+str(i*j),end='  ')print()
# ---------------------------------------------------------------for i in range(1, 10):for j in range(1, i + 1):print('%d*%d=%d' % (j, i, i * j), end='\t')print()
# -------------------------------------------------------------------    row = 1        # 行数,九九乘法表有九行,因此row从1开始到9结束
while row <= 9:   col = 1    #列数,while col <= row:    # 第一行有一次输出,第二行有两次输出,...col < row正好符合该条件print("%d * %d = %d\t" % (col,row,row*col),end="")  # print() 默认每次输出都会换行,是因为默认有一个换行符\n,使用end="",就可以不让他换行 col += 1print()     # 内层循环每循环一次都强制换行,开始下一行的输出row += 1

5.输入一个正整数判断它是不是素数

# 输入一个正整数判断它是不是素数
# 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数a = int(input("输入一个正整数:"))k=0
for j in range(2,a):if a%j ==0:print("%d 不是素数" %a)breakelse:k +=1
if k==a-2:print("%d 是素数" %a)from math import sqrtnum = int(input('请输入一个正整数: '))
end = int(sqrt(num))
is_prime = True
for x in range(2, end + 1):if num % x == 0:is_prime = Falsebreak
if is_prime and num != 1:print('%d是素数' % num)
else:print('%d不是素数' % num)

6.输入两个正整数计算最大公约数和最小公倍数

img

img

# 输入两个正整数计算最大公约数和最小公倍数# x = int(input("输入第一个正整数:"))
# y = int(input("输入第二个正整数:"))
x,y = eval(input("输入两个正整数 需要用逗号隔开:"))
# x,y = map(int,input("输入两个正整数:").split())
a,b =x,yr= 1
while r :r = a % ba = bb = rprint("最大公约数:%d" %a)print("最小公倍数:%d" %(x*y/a))# ------------------------------
x = int(input('x = '))
y = int(input('y = '))
if x > y:x, y = y, x
for factor in range(x, 0, -1):if x % factor == 0 and y % factor == 0:print('%d和%d的最大公约数是%d' % (x, y, factor))print('%d和%d的最小公倍数是%d' % (x, y, x * y // factor))break

四、构造程序逻辑

1.寻找“水仙花数”。

n = int(input("输入位数:"))
# a ='1'
# x,y = int(a+'0'*(n-1)),int(a+'0'*n)
x,y = pow(10,n-1),pow(10,n)for num in range(x,y):Num = str(num)list = [int(Num[i])**n for i in range(n)]Sum = sum( j for j in list)if Sum == num:print("%d 是水仙花数" %num)
#------------------------------------------------------------------for num in range(100, 1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)

2.寻找“完美数”。

n = int(input("输入位数:"))
x,y = pow(10,n-1),pow(10,n)for i in range(x,y):num = 1list = []while num <= i:if i % num == 0:list.append(num)num = num + 1list.pop()Sum = sum(j for j in list)if Sum == i:print("%d是完美数" % i)# -----------------------------------------------------
import mathfor num in range(1, 10000):result = 0for factor in range(1, int(math.sqrt(num)) + 1):if num % factor == 0:result += factorif factor > 1 and num // factor != factor:result += num // factorif result == num:print(num)

3.“百钱百鸡”问题。

# 百钱百鸡问题
# 公鸡一只五块钱,母鸡一只三块钱,小鸡三只一块钱,现在要用一百块钱买一百只鸡,问公鸡、母鸡、小鸡各多少只?for x in range(101):for y in range(101):if 5*x+3*y+(100-x-y)/3 ==100:print("公鸡%d只,母鸡%d只,小鸡%d只" %(x,y,100-x-y))

4.生成“斐波拉切数列”。

# 4.生成“斐波拉切数列”
# 1、1、2、3、5、8、13、21、34、……
# F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)list = [1,1]for i in range(2,100):list.append(list[i-1]+list[i-2])print(list)# ---------------------------------------------------
a = 0
b = 1
for _ in range(20):a, b = b, a + bprint(a, end=' ')# --------------------------------------------------------------
def fib(n):a, b = 0, 1for _ in range(n):a, b = b, a + byield adef main():for val in fib(20):print(val)if __name__ == '__main__':main()

5.Craps赌博游戏。

在这里插入图片描述

'''
Craps赌博游戏
玩家摇两颗色子 如果第一次摇出7点或11点 玩家胜
如果摇出2点 3点 12点 庄家胜 其他情况游戏继续
玩家再次要色子 如果摇出7点 庄家胜
如果摇出第一次摇的点数 玩家胜
否则游戏继续 玩家继续摇色子
玩家进入游戏时有1000元的赌注 全部输光游戏结束
'''import randommoney = 1000
# debt = int(input("请下注:"))
while money>0:debt = int(input("请下注:"))x1 = random.randint(1,6)x2 = random.randint(1,6)X = x1+x2print("X",X)if X in (7,11):print("*玩家胜")money += debtprint("还剩%d元" % money)elif X in (2,3,12):print("*庄家胜")money -= debtprint("还剩%d元" % money)else:print("*请继续游戏")while money>0:debt = int(input("请下注:"))x3 = random.randint(1, 6)x4 = random.randint(1, 6)Y = x3 + x4print("Y",Y)if Y == X:print("**玩家胜")money += debtprint("还剩%d元" % money)elif Y ==7:print("**庄家胜")money -= debtprint("还剩%d元" % money)breakelse:print("**请继续游戏")# --------------------------------------------------------------------------
from random import randintmoney = 1000
while money > 0:print('你的总资产为:', money)needs_go_on = Falsewhile True:debt = int(input('请下注: '))if 0 < debt <= money:breakfirst = randint(1, 6) + randint(1, 6)print('玩家摇出了%d点' % first)if first == 7 or first == 11:print('玩家胜!')money += debtelif first == 2 or first == 3 or first == 12:print('庄家胜!')money -= debtelse:needs_go_on = Truewhile needs_go_on:current = randint(1, 6) + randint(1, 6)print('玩家摇出了%d点' % current)if current == 7:print('庄家胜')money -= debtneeds_go_on = Falseelif current == first:print('玩家胜')money += debtneeds_go_on = Falseprint('你破产了, 游戏结束!')

区别:

import numpy as np
np.random.randint(a,b) # 不包括bimport random
random.randint(a,b) # 包括b

五、函数和模块的使用

练习1:实现计算求最大公约数和最小公倍数的函数。
def gcd(x, y):(x, y) = (y, x) if x > y else (x, y)for factor in range(x, 0, -1):if x % factor == 0 and y % factor == 0:return factordef lcm(x, y):return x * y // gcd(x, y)
练习2:实现判断一个数是不是回文数的函数。
def is_palindrome(num):temp = numtotal = 0while temp > 0:total = total * 10 + temp % 10temp //= 10return total == num
练习3:实现判断一个数是不是素数的函数。
def is_prime(num):for factor in range(2, num):if num % factor == 0:return Falsereturn True if num != 1 else False
练习4:写一个程序判断输入的正整数是不是回文素数。
if __name__ == '__main__':num = int(input('请输入正整数: '))if is_palindrome(num) and is_prime(num):print('%d是回文素数' % num)

六、字符串和常用数据结构

练习1:在屏幕上显示跑马灯文字
import os
import timecontent = "我爱你,中国!---我为你歌唱---"while True:os.system('cls')print(content)time.sleep(0.2)content = content[1:]+content[0]
练习2:设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成。
# 设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成。
# (1)看到验证码,肯定要用random()随机函数
#
# (2)随机生成数字:randint(0,9)
#
#           注意:要把数字转换成字符串
#
# (3)随机生成字母:不区分大小写
#
#           在ASC码中找到A:65,Z:90 a:97  z:122
#
#           randint(65,90):在65~90中随机产生一个数字
#
#          把随机产生的数字转换成字母:chr()函数
#
#  (4)在字母和数字中随机选一个:choice()import random
def yanzhengma(n):x = 0while x<n:s = random.choice(range(1,4))if s == 1:a = random.randint(0,10)print(a,end='')x+=1if s == 2:a = random.randint(65,90)print(chr(a),end='')x+=1if s == 3:a = random.randint(97, 122)print(chr(a), end='')x += 1n = int(input("请输入验证码位数:"))
yanzhengma(n)# ---------------------------------------------------------------------------
import randomdef generate_code(code_len=4):"""生成指定长度的验证码:param code_len: 验证码的长度(默认4个字符):return: 由大小写英文字母和数字构成的随机验证码"""all_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'last_pos = len(all_chars) - 1code = ''for _ in range(code_len):index = random.randint(0, last_pos)code += all_chars[index]return code
  • chr():将整数转换成该编码对应的字符串(一个字符)。
  • ord():将字符串(一个字符)转换成对应的编码(整数)。
练习3:设计一个函数返回给定文件名的后缀名。
 def hzm():"""获取文件名的后缀名:return:文件名后缀"""a = input("输入文件名:")list = a.split('.')# print(list[-1])# print('.'+list[-1])return list[-1]
hzm()# --------------------------------------------------------------------------
def get_suffix(filename, has_dot=False):"""获取文件名的后缀名:param filename: 文件名:param has_dot: 返回的后缀名是否需要带点:return: 文件的后缀名"""pos = filename.rfind('.')if 0 < pos < len(filename) - 1:index = pos if has_dot else pos + 1return filename[index:]else:return ''
练习4:设计一个函数返回传入的列表中最大和第二大的元素的值。
# 设计一个函数返回传入的列表中最大和第二大的元素的值。
def zuida(list):a = max(list)list.remove(a)b = max(list)return a,b
list = [1,2,3,4,5,6,9,8]
a,b = zuida(list)
print("列表中最大的元素是%d,第二大元素是%d" %(a,b))# -----------------------------------------------------------------------
def zuida(list):list.sort(reverse=True)a = list[0]b = list[1]return a,b
list = [1,2,3,4,5,6,9,8]
a,b = zuida(list)
print("列表中最大的元素是%d,第二大元素是%d" %(a,b))# ---------------------------------------------------------------
def max2(x):m1, m2 = (x[0], x[1]) if x[0] > x[1] else (x[1], x[0])for index in range(2, len(x)):if x[index] > m1:m2 = m1m1 = x[index]elif x[index] > m2:m2 = x[index]return m1, m2
练习5:计算指定的年月日是这一年的第几天
# 计算指定的年月日是这一年的第几天
# 先判断年份是闰年还是普通年份
# 再判断是一年中的第几个月份
# 然后根据号数计算天数def runnian(y):if (y % 4 == 0 and y % 100 != 0) or y % 400 == 0:return Trueelse:return Falsedef main(y,m,d):a = runnian(y)if (a == True):list1 = [31,29,31,30,31,30,31,31,30,31,30,31]d1 = sum(list1[i] for i in range(0,m-1))d2 = d1+dprint("%d年%d月%d日是这一年的第%d天" %(y,m,d,d2))return d2if (a == False):list2 = [31,28,31,30,31,30,31,31,30,31,30,31]d1 = sum(list2[i] for i in range(0,m-1))d2 = d1+dprint("%d年%d月%d日是这一年的第%d天" % (y, m, d, d2))return d2y = int(input("请输入年份:"))
m = int(input("请输入月份:"))
d = int(input("请输入几号:"))main(y,m,d)# ------------------------------------------------
# 简化版本def runnian(y):return (y % 4 == 0 and y % 100 != 0) or y % 400 == 0def main(y,m,d):list = [[31,28,31,30,31,30,31,31,30,31,30,31],[31,29,31,30,31,30,31,31,30,31,30,31]][runnian(y)]d1 = sum(list[i] for i in range(0,m-1))d2 = d1+dprint("%d年%d月%d日是这一年的第%d天" %(y,m,d,d2))return d2y = int(input("请输入年份:"))
m = int(input("请输入月份:"))
d = int(input("请输入几号:"))main(y,m,d)# --------------------------------------------------------------------def is_leap_year(year):"""判断指定的年份是不是闰年:param year: 年份:return: 闰年返回True平年返回False"""return year % 4 == 0 and year % 100 != 0 or year % 400 == 0def which_day(year, month, date):"""计算传入的日期是这一年的第几天:param year: 年:param month: 月:param date: 日:return: 第几天"""days_of_month = [[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31],[31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]][is_leap_year(year)]total = 0for index in range(month - 1):total += days_of_month[index]return total + datedef main():print(which_day(1980, 11, 28))print(which_day(1981, 12, 31))print(which_day(2018, 1, 1))print(which_day(2016, 3, 1))if __name__ == '__main__':main()# ---------------------------------------------------------------
def tm004():'''【个人备注】:知道python有时间元组这一概念,这道题完全不需要计算。时间元组包含九个属性tm_year     年tm_mon      月(1~12)tm_mday     日(1~31)tm_hour     时(0~23)tm_min      分(0~59)tm_sec      秒(0~61, 60或61是闰秒)tm_wday     星期(0~6, 0是周一)tm_yday     第几天(1~366, 366是儒略历)tm_isdst    夏令时(平时用不到)'''import timedate = input('输入时间(例如2018-01-23):')st = time.strptime(date,'%Y-%m-%d') # 时间文本转化成时间元祖num = st.tm_ydayprint(num)
练习6:打印杨辉三角。
def YangHui(n=16,r=80):"""打印杨辉三角:param n: 打印的行数:param r: 居中的范围:return: 打印出来的杨辉三角"""line = [1,1]LL = [[1]]for i in range(2,n+1):linei = [1]+[(line[j]+line[j+1]) for j in range(i-2)]+[1]line = lineiLL.append(linei)for i in range(n):linei = [str(j) for j in LL[i]]stri = " ".join(linei)print(stri.center(r))YangHui()# --------------------------------------------------------------------
def YangHui(n,r):"""打印杨辉三角:param n: 打印的行数:param r: 居中的范围:return: 打印出来的杨辉三角"""line1 = [1]print((" ".join([str(j) for j in line1])).center(r))line = [1,1]for i in range(2,n+1):linei = [1]+[(line[j]+line[j+1]) for j in range(i-2)]+[1]line = lineiprint((" ".join([str(j) for j in linei])).center(r))YangHui(n=16,r=80)
案例1:双色球选号
from random import randrange, randint, sampledef display(balls):"""输出列表中的双色球号码"""for index, ball in enumerate(balls):if index == len(balls) - 1:print('|', end=' ')print('%02d' % ball, end=' ')print()def random_select():"""随机选择一组号码"""red_balls = [x for x in range(1, 34)]selected_balls = []selected_balls = sample(red_balls, 6)selected_balls.sort()selected_balls.append(randint(1, 16))return selected_ballsdef main():n = int(input('机选几注: '))for _ in range(n):display(random_select())if __name__ == '__main__':main()

random模块的用法

Python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序

列中的一个元素,打乱一组数据等。

random中的一些重要函数的用法:

1 )、random() 返回0<=n<1之间的随机实数n;
2 )、choice(seq) 从序列seq中返回随机的元素;
3 )、getrandbits(n) 以长整型形式返回n个随机位;
4 )、shuffle(seq[, random]) 原地指定seq序列;
5 )、sample(seq, n) 从序列seq中选择n个随机且独立的元素;

详细介绍:

**random.random()**函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。

**random.uniform()**正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。

**random.randint()**随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,python random.randint。

**random.choice()**可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。

**random.shuffle()**如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。

**random.sample()**可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。

综合案例2:约瑟夫环问题

《幸运的基督徒》
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。

def main():persons = [True]*30counter,index,number = 0,0,0while counter<15:if persons[index]:number += 1if number ==9:persons[index]=Falsecounter += 1number = 0index +=1index %=30for person in persons:print("基" if person else "非" , end=' ')if __name__ == '__main__':main()
综合案例3:井字棋游戏
import osdef print_board(board):print(board['TL'] + '|' + board['TM'] + '|' + board['TR'])print('-+-+-')print(board['ML'] + '|' + board['MM'] + '|' + board['MR'])print('-+-+-')print(board['BL'] + '|' + board['BM'] + '|' + board['BR'])def main():init_board = {'TL': ' ', 'TM': ' ', 'TR': ' ','ML': ' ', 'MM': ' ', 'MR': ' ','BL': ' ', 'BM': ' ', 'BR': ' '}begin = Truewhile begin:curr_board = init_board.copy()begin = Falseturn = 'x'counter = 0os.system('clear')print_board(curr_board)while counter < 9:move = input('轮到%s走棋, 请输入位置: ' % turn)if curr_board[move] == ' ':counter += 1curr_board[move] = turnif turn == 'x':turn = 'o'else:turn = 'x'os.system('clear')print_board(curr_board)choice = input('再玩一局?(yes|no)')begin = choice == 'yes'if __name__ == '__main__':main()

面向对象编程基础

练习1:定义一个类描述数字时钟
class Clock:def __init__(self, hour, miniter, seconds):self.hour = hourself.miniter = miniterself.seconds = secondsdef baoshi(self):print('%s点%s分%s秒' % (self.hour, self.miniter, self.seconds))print('现在的时间为:',datetime.datetime.now())import datetimetime1 = Clock('10','27','30')time1.baoshi()# ---------------------------------------------------------------------
from time import sleepclass Clock(object):"""数字时钟"""def __init__(self, hour=0, minute=0, second=0):"""初始化方法:param hour: 时:param minute: 分:param second: 秒"""self._hour = hourself._minute = minuteself._second = seconddef run(self):"""走字"""self._second += 1if self._second == 60:self._second = 0self._minute += 1if self._minute == 60:self._minute = 0self._hour += 1if self._hour == 24:self._hour = 0def show(self):"""显示时间"""return '%02d:%02d:%02d' % \(self._hour, self._minute, self._second)def main():clock = Clock(23, 59, 58)while True:print(clock.show())sleep(1)clock.run()if __name__ == '__main__':main()
练习2:定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。
# 定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。class Point:def __init__(self,x,y):self.x = xself.y = ydef move(self,a,b):self.x += aself.y += breturn (self.x,self.y)def distence(self,x1,y1):distence = sqrt((self.x - x1)**2 + (self.y - y1)**2)return distencefrom math import sqrt
p = Point(2,6)print(p.x)
print(p.y)print(p.move(4,-3))print(p.x)
print(p.y)print(p.distence(4,6))
print(sqrt(13))# --------------------------------------------------------------from math import sqrtclass Point(object):def __init__(self, x=0, y=0):"""初始化方法:param x: 横坐标:param y: 纵坐标"""self.x = xself.y = ydef move_to(self, x, y):"""移动到指定位置:param x: 新的横坐标"param y: 新的纵坐标"""self.x = xself.y = ydef move_by(self, dx, dy):"""移动指定的增量:param dx: 横坐标的增量"param dy: 纵坐标的增量"""self.x += dxself.y += dydef distance_to(self, other):"""计算与另一个点的距离:param other: 另一个点"""dx = self.x - other.xdy = self.y - other.yreturn sqrt(dx ** 2 + dy ** 2)def __str__(self):return '(%s, %s)' % (str(self.x), str(self.y))def main():p1 = Point(3, 5)p2 = Point()print(p1)print(p2)p2.move_by(-1, 2)print(p2)print(p1.distance_to(p2))if __name__ == '__main__':main()
案例3:工资结算系统

某公司有三种类型的员工 分别是部门经理、程序员和销售员
需要设计一个工资结算系统 根据提供的员工信息来计算月薪
部门经理的月薪是每月固定15000元
程序员的月薪按本月工作时间计算 每小时150元
销售员的月薪是1200元的底薪加上销售额5%的提成

class Manager:def __init__(self,name):self.name = name@propertydef salary(self):return 15000class Iter:def __init__(self,name,time):self.name = nameself.time = time@propertydef salary(self):return self.time * 150class Saler:def __init__(self,name,sale_money):self.name = nameself.sale_money = sale_money@propertydef salary(self):return 1200 + self.sale_money * 0.05m = Manager('晓明')i = Iter('Jarrod',8*5*4)s = Saler('gg',100000)print('部门经理%s的月薪是%d' %(m.name,m.salary))
print('程序员%s的月薪是%d' %(i.name,i.salary))
print('销售员%s的月薪是%d' %(s.name,s.salary))# --------------------------------------------------------from abc import ABCMeta, abstractmethodclass Employee(object, metaclass=ABCMeta):"""员工"""def __init__(self, name):"""初始化方法:param name: 姓名"""self._name = name@propertydef name(self):return self._name@abstractmethoddef get_salary(self):"""获得月薪:return: 月薪"""passclass Manager(Employee):"""部门经理"""def get_salary(self):return 15000.0class Programmer(Employee):"""程序员"""def __init__(self, name, working_hour=0):super().__init__(name)self._working_hour = working_hour@propertydef working_hour(self):return self._working_hour@working_hour.setterdef working_hour(self, working_hour):self._working_hour = working_hour if working_hour > 0 else 0def get_salary(self):return 150.0 * self._working_hourclass Salesman(Employee):"""销售员"""def __init__(self, name, sales=0):super().__init__(name)self._sales = sales@propertydef sales(self):return self._sales@sales.setterdef sales(self, sales):self._sales = sales if sales > 0 else 0def get_salary(self):return 1200.0 + self._sales * 0.05def main():emps = [Manager('刘备'), Programmer('诸葛亮'),Manager('曹操'), Salesman('荀彧'),Salesman('吕布'), Programmer('张辽'),Programmer('赵云')]for emp in emps:if isinstance(emp, Programmer):emp.working_hour = int(input('请输入%s本月工作时间: ' % emp.name))elif isinstance(emp, Salesman):emp.sales = float(input('请输入%s本月销售额: ' % emp.name))# 同样是接收get_salary这个消息但是不同的员工表现出了不同的行为(多态)print('%s本月工资为: ¥%s元' %(emp.name, emp.get_salary()))if __name__ == '__main__':main()
扑克牌
import randomclass Card(object):"""一张牌"""def __init__(self, suite, face):self._suite = suite   # 设置成私有属性self._face = face@propertydef face(self):         # 可以通过 对象.face 访问到 face属性return self._face@propertydef suite(self):       # 可以通过 对象.suite 访问到 suite属性return self._suitedef __str__(self):     # 内置方法if self._face == 1:face_str = 'A'elif self._face == 11:face_str = 'J'elif self._face == 12:face_str = 'Q'elif self._face == 13:face_str = 'K'else:face_str = str(self._face)return '%s%s' % (self._suite, face_str)def __repr__(self):return self.__str__()class Poker(object):"""一副牌"""def __init__(self):self._cards = [Card(suite, face) for suite in '♠♥♣♦'for face in range(1, 14)]self._current = 0@propertydef cards(self):return self._cardsdef shuffle(self):"""洗牌(随机乱序)"""self._current = 0random.shuffle(self._cards)@propertydef next(self):"""发牌"""card = self._cards[self._current]self._current += 1return card@propertydef has_next(self):"""还有没有牌"""return self._current < len(self._cards)class Player(object):"""玩家"""def __init__(self, name):self._name = nameself._cards_on_hand = []@propertydef name(self):return self._name@propertydef cards_on_hand(self):return self._cards_on_handdef get(self, card):"""摸牌"""self._cards_on_hand.append(card)def arrange(self, card_key):"""玩家整理手上的牌"""self._cards_on_hand.sort(key=card_key)# 排序规则-先根据花色再根据点数排序
def get_key(card):return (card.suite, card.face)def main():p = Poker()p.shuffle()players = [Player('东邪'), Player('西毒'), Player('南帝'), Player('北丐')]for _ in range(13):for player in players:player.get(p.next)for player in players:print(player.name + ':', end=' ')player.arrange(get_key)print(player.cards_on_hand)if __name__ == '__main__':main()

http://chatgpt.dhexx.cn/article/qfyVkgkK.shtml

相关文章

Linux磁盘挂载详细步骤

步骤一&#xff1a;为数据盘创建MBR分区 1、查看实例上的数据盘信息 fdisk -l2、创建分区&#xff0c;根据提示创建 fdisk -u /dev/vdb3、查看新分区信息 fdisk -lu /dev/vdb步骤二&#xff1a;为分区创建文件系统 创建一个xfs文件系统 mkfs -t xfs /dev/vdb1步骤三&#x…

linux查看系统未被挂载的磁盘空间的方法

解决AWS 挂载、解决挂载完重启就消失等问题 linux上的盘和window的有区别&#xff0c;磁盘空间必须挂载在目录上&#xff0c;要不然没用 对与新增的硬盘、SSD固态硬盘、挂载到linux上的操作如下&#xff1a; df -h     #显示目前在Linux系统上的文件系统的磁盘使用情况统…

Linux系统如何挂载硬盘

查看所有设备挂载情况 基本语法&#xff1a;lsblk 或者lsblk -f 硬盘说明 2.1Linux硬盘分IDE硬盘和SCS硬盘&#xff0c;目前基本上是SCSI硬盘 2.2对于IDE硬盘&#xff0c;驱动器标识符为"hdx~"&#xff0c;其中"hd"表明分区所在设备的类型&#xff0c;这里…

linux服务器挂载磁盘的两种方式

一、挂载方法简单&#xff0c;但只能挂载一个&#xff0c;挂载两个以上磁盘重启后会出现混淆情况。 lsblk Fdisk -l /*因为IBM是默认的安装目录&#xff0c;所以将/vdb目录下的磁盘挂载到/IBM目录下*/ /*格式化将被挂载的磁盘&#xff0c;根目录下的dev目录存放着所有的设备文…

Linunx系统挂载新磁盘的四种方式

目前常用的磁盘挂载方式主要有两种&#xff0c;一种是传统的标准分区方式&#xff0c;另一种是采用可以动态调整容量的LVM逻辑卷的方式挂载磁盘&#xff1b; 两种分区方式对比 ​ 传统标准分区方式&#xff1a;数据写在磁盘的分区中&#xff0c;系统故障后可以直接挂载到其他运…

linux挂载硬盘步骤(简单易用,直接上手,无废话)

1.查看硬盘挂载情况 fdisk -l 2.查看当前分区情况 df -l 发现新硬盘没有分区 3.给新硬盘添加新分区 fdisk /dev/vdb 按照下面步骤依次输入指令 4.分区完成&#xff0c;查询所有设备的文件系统类型 blkid 发现新分区并没有文件系统类型&#xff08;type为文件系统具体类型…

Linux重新挂载磁盘,如何把磁盘挂载到已有目录上面

本文为joshua317原创文章,转载请注明&#xff1a;转载自joshua317博客 Linux重新挂载磁盘&#xff0c;如何把磁盘挂载到已有目录上面 - joshua317的博客 Linux重新挂载磁盘&#xff0c;如何把磁盘挂载到已有目录上面 一、问题背景 由于随着数据的增多&#xff0c;原有的磁盘…

linux系统挂载磁盘

一、如何确认当前系统还有磁盘未挂载。 su root 输入密码后&#xff0c;切换到root账号 1、输入 fdisk -l 查看是否有磁盘未挂载&#xff0c;如下图所示 如上图所示&#xff0c;若没有显示后半部分时&#xff0c;可以确定未挂载磁盘为 /dev/vdb 。 2、输入 df -h …

Linux服务器磁盘挂载

具体操作是&#xff1a;先对磁盘进行格式化&#xff0c;格式化后挂载到需要的挂载点&#xff0c;最后添加分区启动表&#xff0c;以便下次系统启动随机自动挂载。 1、首先查看系统中磁盘信息&#xff0c;命令为&#xff1a;fdisk -l; 2、找到未使用的磁盘&#xff0c;对其进行…

linux如何挂载硬盘linux服务器上挂载磁盘(图文详解)

博主最近在研究服务器运维&#xff0c;由于Linux服务器相对比较困难&#xff0c;所以博主对她情有独钟。而window服务器几乎跟我们平常使用的电脑一样&#xff0c;相对简单感觉索然无味。下面正式进入主题教大家linux如何挂载硬盘。 首先解答一个新手朋友都会问的问题&#xf…

linux上挂载磁盘(包括新增磁盘)

linux上挂载磁盘&#xff08;包括新增磁盘&#xff09; 正式开始挂载磁盘&#xff08;/dev/sdb&#xff09;1&#xff1a;创建分区 fdisk /dev/sdb2&#xff1a;格式化 mkfs.ext4 /dev/sdb13&#xff1a;新建挂载点 mkdir /usermount 、mount /dev/sdb1 /usermount4&#xff1a…

《Oracle编程自学与面试指南》17-01:标量子查询(Scalar subquery)

内容导航 单列子查询,又叫标量子查询。标量(Scalar subquery)是只返回一个值的查询:一行一列。 案例代码: /* 作者:AT阿宝哥 日期:2016年9月18日 愿景:参考官方资料,做最好的课程,成就更多职业人! 邮箱:12264104@qq.com CSDN:https://blog.csdn.net/goldentec 简书…

《Oracle编程自学与面试指南》14:表达式(Expressions)

内容导航 1、定义2、使用场景3、表达式的分类1、定义 表达式(Expressions)是一个或多个值、运算符和SQL函数的组合,计算结果为一个值,表达式的数据类型通常取决于其组件。 比如,这个简单的表达式2 * 2计算结果为4,并具有数据类型NUMBER(与其组件相同的数据类型): SEL…

《Oracle编程自学与面试指南》14-03:CASE表达式(CASE Expressions)

内容导航 1、定义2、分类3、简单CASE表达式3.1、示例13.2、示例23.3、案例33.4、案例43.5、案例53.6、独立案例:1、定义 CASE表达式让我们使用IF ... THEN ... ELSE逻辑,而不必调用过程。

用mui索引实现动态数据仿通讯录的功能

前言 用mui索引实现动态数据仿通讯录的功能 mui demo mui给的demo如图所示&#xff0c;是静态数据的&#xff0c;可以模糊搜索、字母导航 动态赋值 html修改部分主要是<ul class"mui-table-view"></ul>里面的 列表部分 <li data-group"T&qu…

MySQL数据库学习笔记(一)

1、什么是数据库&#xff1f;什么是数据库管理系统&#xff1f;什么是SQL&#xff1f;他们之间有什么关系&#xff1f; 学习源https://www.bilibili.com/video/BV1Vy4y1z7EX?p25 链接&#xff1a;https://pan.baidu.com/s/1yB9DwzykigPvPYJ6wOMVBg 提取码&#xff1a;1234 复…

网络地图服务种类、防火墙出站入站规则、ArcGIS Enterprise部署

网络地图服务&#xff08;地理信息服务&#xff09;种类 网络地图服务种类多种多样&#xff1a; 1、按照厂商分&#xff1a;0SM地图服务、天地图地图服务、谷歌地图服务、百度地图服务、高德地图服务。。。。。。。 2、按照OGC标准分&#xff1a;WMS服务、WMTS服务、WFS服务…

JDBC PreparedStatement,工具类封装,悲观锁【JDBC实例 --- 模拟用户登录】

JDBC学习 内容导航 注册驱动的第二种方式执行静态代码块的几种情况 使用配置文件来存放信息模拟用户登录在sql语句中如何使用动态的变量 SQL注入【随意的用户名&#xff0c;考究的密码登录成功】解决sql注入问题PreparedStatement的使用使用Statement场景 使用PreparedStatemen…

大数据-玩转数据-MaxCompute SQL

一、说明 本文为您介绍MaxCompute SQL常见使用场景&#xff0c;让您快速掌握SQL的写法。 二、准备数据集 本文以emp表和dept表为示例数据集。您可以自行在MaxCompute项目上创建表并上传数据。数据导入请参见概述。 下载emp表数据文件和dept表数据文件。 创建emp表。 CREATE…

全网首发!如何停止莫名其妙的软件下载?终于被我找到了!

文章目录 导读问题发现问题定位问题解决&#xff08;粗暴&#xff09;下面是2021.4.2更新内容同归于尽解决法丢弃尊严解决法 导读 如果是金山忠实用户&#xff0c;似乎并不怎么发现这个问题。但是作为一个常年裸奔以最大化电脑效率的穷小子&#xff0c;经常看到自己好好的Chro…