基础加强练习题(附示例代码)

选自GitHub-jack···(点击跳转)

练习:华氏温度转换为摄氏温度。

提示:华氏温度到摄氏温度的转换公式为:C=(F−32)÷1.8C=(F - 32) \div 1.8C=(F−32)÷1.8。

参考答案:

f = float(input('请输入华氏温度: '))
c = (f - 32) / 1.8
print('%.1f华氏度 = %.1f摄氏度' % (f, c))

练习:输入圆的半径计算计算周长和面积。

参考答案:

radius = float(input('请输入圆的半径: '))
perimeter = 2 * 3.1416 * radius
area = 3.1416 * radius * radius
print('周长: %.2f' % perimeter)
print('面积: %.2f' % area)

练习:输入年份判断是不是闰年。

参考答案:


year = int(input('请输入年份: '))
# 如果代码太长写成一行不便于阅读 可以使用\对代码进行折行
is_leap = year % 4 == 0 and year % 100 != 0 or \year % 400 == 0
print(is_leap)

练习:英制单位英寸与公制单位厘米互换。

参考答案:

""
value = float(input('请输入长度: '))
unit = input('请输入单位: ')
if unit == 'in' or unit == '英寸':print('%f英寸 = %f厘米' % (value, value * 2.54))
elif unit == 'cm' or unit == '厘米':print('%f厘米 = %f英寸' % (value, value / 2.54))
else:print('请输入有效的单位')

练习:百分制成绩转换为等级制成绩。

要求:如果输入的成绩在90分以上(含90分)输出A;80分-90分(不含90分)输出B;70分-80分(不含80分)输出C;60分-70分(不含70分)输出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)

练习:输入三条边长,如果能构成三角形就计算周长和面积。

参考答案:


a = float(input('a = '))
b = float(input('b = '))
c = float(input('c = '))
if a + b > c and a + c > b and b + c > a:print('周长: %f' % (a + b + c))p = (a + b + c) / 2area = (p * (p - a) * (p - b) * (p - c)) ** 0.5print('面积: %f' % (area))
else:print('不能构成三角形')

练习:输入一个正整数判断是不是素数。

提示:素数指的是只能被1和自身整除的大于1的整数。

参考答案:

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)

练习:输入两个正整数,计算它们的最大公约数和最小公倍数。

提示:两个数的最大公约数是两个数的公共因子中最大的那个数;两个数的最小公倍数则是能够同时被两个数整除的最小的那个数。

参考答案:


x = int(input('x = '))
y = int(input('y = '))
# 如果x大于y就交换x和y的值
if x > y:# 通过下面的操作将y的值赋给x, 将x的值赋给yx, 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

练习:打印如下所示的三角形图案。

*
**
***
****
*****
    **********
*****
    ****************
*********

参考答案:


row = int(input('请输入行数: '))
for i in range(row):for _ in range(i + 1):print('*', end='')print()for i in range(row):for j in range(row):if j < row - i - 1:print(' ', end='')else:print('*', end='')print()for i in range(row):for _ in range(row - i - 1):print(' ', end='')for _ in range(2 * i + 1):print('*', end='')print()

练习:寻找水仙花数。

说明:水仙花数也被称为超完全数字不变数、自恋数、自幂数、阿姆斯特朗数,它是一个3位数,该数字每个位上数字的立方之和正好等于它本身,例如:13+53+33=1531^3 + 5^3+ 3^3=15313+53+33=153。

for num in range(100, 1000):low = num % 10mid = num // 10 % 10high = num // 100if num == low ** 3 + mid ** 3 + high ** 3:print(num)

练习:实现计算求最大公约数和最小公倍数的函数。

参考答案:

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)

练习:实现判断一个数是不是回文数的函数。

参考答案:

def is_palindrome(num):"""判断一个数是不是回文数"""temp = numtotal = 0while temp > 0:total = total * 10 + temp % 10temp //= 10return total == num

练习:实现判断一个数是不是素数的函数。

参考答案:

def is_prime(num):"""判断一个数是不是素数"""for factor in range(2, int(num ** 0.5) + 1):if num % factor == 0:return Falsereturn True if num != 1 else False

练习:写一个程序判断输入的正整数是不是回文素数。

参考答案:

if __name__ == '__main__':num = int(input('请输入正整数: '))if is_palindrome(num) and is_prime(num):print('%d是回文素数' % num)

注意:通过上面的程序可以看出,当我们将代码中重复出现的和相对独立的功能抽取成函数后,我们可以组合使用这些函数来解决更为复杂的问题,这也是我们为什么要定义和使用函数的一个非常重要的原因。

练习:在屏幕上显示跑马灯文字。

参考答案:

import os
import timedef main():content = '北京欢迎你为你开天辟地…………'while True:# 清理屏幕上的输出os.system('cls')  # os.system('clear')print(content)# 休眠200毫秒time.sleep(0.2)content = content[1:] + content[0]if __name__ == '__main__':main()

练习:设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成。

参考答案:

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

练习:设计一个函数返回给定文件名的后缀名。

参考答案:

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 ''

练习:设计一个函数返回传入的列表中最大和第二大的元素的值。

参考答案:

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

练习:计算指定的年月日是这一年的第几天。

参考答案:

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 main():num = int(input('Number of rows: '))yh = [[]] * numfor row in range(len(yh)):yh[row] = [None] * (row + 1)for col in range(len(yh[row])):if col == 0 or col == row:yh[row][col] = 1else:yh[row][col] = yh[row - 1][col] + yh[row - 1][col - 1]print(yh[row][col], end='\t')print()if __name__ == '__main__':main()

练习1:定义一个类描述数字时钟。

参考答案:

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:定义一个类描述平面上的点并提供移动点和计算到另一个点距离的方法。

参考答案:

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()

案例1:奥特曼打小怪兽。

from abc import ABCMeta, abstractmethod
from random import randint, randrangeclass Fighter(object, metaclass=ABCMeta):"""战斗者"""# 通过__slots__魔法限定对象可以绑定的成员变量__slots__ = ('_name', '_hp')def __init__(self, name, hp):"""初始化方法:param name: 名字:param hp: 生命值"""self._name = nameself._hp = hp@propertydef name(self):return self._name@propertydef hp(self):return self._hp@hp.setterdef hp(self, hp):self._hp = hp if hp >= 0 else 0@propertydef alive(self):return self._hp > 0@abstractmethoddef attack(self, other):"""攻击:param other: 被攻击的对象"""passclass Ultraman(Fighter):"""奥特曼"""__slots__ = ('_name', '_hp', '_mp')def __init__(self, name, hp, mp):"""初始化方法:param name: 名字:param hp: 生命值:param mp: 魔法值"""super().__init__(name, hp)self._mp = mpdef attack(self, other):other.hp -= randint(15, 25)def huge_attack(self, other):"""究极必杀技(打掉对方至少50点或四分之三的血):param other: 被攻击的对象:return: 使用成功返回True否则返回False"""if self._mp >= 50:self._mp -= 50injury = other.hp * 3 // 4injury = injury if injury >= 50 else 50other.hp -= injuryreturn Trueelse:self.attack(other)return Falsedef magic_attack(self, others):"""魔法攻击:param others: 被攻击的群体:return: 使用魔法成功返回True否则返回False"""if self._mp >= 20:self._mp -= 20for temp in others:if temp.alive:temp.hp -= randint(10, 15)return Trueelse:return Falsedef resume(self):"""恢复魔法值"""incr_point = randint(1, 10)self._mp += incr_pointreturn incr_pointdef __str__(self):return '~~~%s奥特曼~~~\n' % self._name + \'生命值: %d\n' % self._hp + \'魔法值: %d\n' % self._mpclass Monster(Fighter):"""小怪兽"""__slots__ = ('_name', '_hp')def attack(self, other):other.hp -= randint(10, 20)def __str__(self):return '~~~%s小怪兽~~~\n' % self._name + \'生命值: %d\n' % self._hpdef is_any_alive(monsters):"""判断有没有小怪兽是活着的"""for monster in monsters:if monster.alive > 0:return Truereturn Falsedef select_alive_one(monsters):"""选中一只活着的小怪兽"""monsters_len = len(monsters)while True:index = randrange(monsters_len)monster = monsters[index]if monster.alive > 0:return monsterdef display_info(ultraman, monsters):"""显示奥特曼和小怪兽的信息"""print(ultraman)for monster in monsters:print(monster, end='')def main():u = Ultraman('骆昊', 1000, 120)m1 = Monster('狄仁杰', 250)m2 = Monster('白元芳', 500)m3 = Monster('王大锤', 750)ms = [m1, m2, m3]fight_round = 1while u.alive and is_any_alive(ms):print('========第%02d回合========' % fight_round)m = select_alive_one(ms)  # 选中一只小怪兽skill = randint(1, 10)   # 通过随机数选择使用哪种技能if skill <= 6:  # 60%的概率使用普通攻击print('%s使用普通攻击打了%s.' % (u.name, m.name))u.attack(m)print('%s的魔法值恢复了%d点.' % (u.name, u.resume()))elif skill <= 9:  # 30%的概率使用魔法攻击(可能因魔法值不足而失败)if u.magic_attack(ms):print('%s使用了魔法攻击.' % u.name)else:print('%s使用魔法失败.' % u.name)else:  # 10%的概率使用究极必杀技(如果魔法值不足则使用普通攻击)if u.huge_attack(m):print('%s使用究极必杀技虐了%s.' % (u.name, m.name))else:print('%s使用普通攻击打了%s.' % (u.name, m.name))print('%s的魔法值恢复了%d点.' % (u.name, u.resume()))if m.alive > 0:  # 如果选中的小怪兽没有死就回击奥特曼print('%s回击了%s.' % (m.name, u.name))m.attack(u)display_info(u, ms)  # 每个回合结束后显示奥特曼和小怪兽的信息fight_round += 1print('\n========战斗结束!========\n')if u.alive > 0:print('%s奥特曼胜利!' % u.name)else:print('小怪兽胜利!')if __name__ == '__main__':main()

案例2:扑克游戏。

import randomclass Card(object):"""一张牌"""def __init__(self, suite, face):self._suite = suiteself._face = face@propertydef face(self):return self._face@propertydef suite(self):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()

说明: 大家可以自己尝试在上面代码的基础上写一个简单的扑克游戏,例如21点(Black Jack),游戏的规则可以自己在网上找一找。

案例3:工资结算系统。

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

虽然到Day9,很多东西都没办法吃透,希望坚持学下去能有突破现阶段的瓶颈时期。
感谢学习资料···

关于Python的基础练习题相关推荐

  1. Python之基础练习题

    1.执行Python脚本的两种方式 # python3 hello.py Hello World! 你好# cat hello.py |python Hello World! 你好 2.简述位.字节的 ...

  2. Python入门基础练习题

    1Python程序文件扩展名主要有 和 两种,其中后者常用于GUI程序. 答案第一空: py 第二空: pyw 2查看变量类型的Python内置函数是 . 答案第一空: type()3表达式 65 & ...

  3. python 语法基础练习题

    1. 分别解释"=","==","+="的含义(口述) =为赋值语句,把一个变量值赋予另一个值 == 为条件判断,判断两个值是否相等 += ...

  4. Python练习——基础练习题1

    因为控制台会让不断输入,索性就把input放到注释里了. 这一篇主要练习input和if判断 初级: 1.判断下面标识符是否合法并说明不合法的原因 @abc.com 123ok xiaoming Xi ...

  5. python字典经典例题_Python小白--------基础练习题(列表,元组,字典)

    Python小白--------基础练习题(列表,元组,字典) 发布时间:2018-05-16 18:12, 浏览次数:1167 , 标签: Python 今天总结了这几天所学的基础知识,做了一些练习 ...

  6. python猜数字游戏、在程序中预设一个_python 语法基础练习题

    python 语法基础练习题 1. 分别解释"=","==","+="的含义(口述) 2.两个变量值的关系?(口述) n1 = 123456 ...

  7. python给定字符串显示奇数_字符串基础练习题80+道(原文及代码见文尾链接)

    Python 字符串基础练习题80+道 1.编写一个Python程序来计算字符串的长度. 2.编写一个Python程序来计算字符串中的字符数(字符频率). Sample String:google.c ...

  8. 这些Python基础练习题你会几个?

    在人工智能大火的当今,Python 作为人工智能时代的首选语言已经越来越收到追捧:但是许多非科班.零基础的小伙伴常常苦于没有合适的入门 Python 的教程而感到苦恼:本人是一名资深Python开发, ...

  9. python集合例题_python基础练习题、集合的讲解、一些公关方法

    1.求100(含100)以内所有偶数的和 range(start,end,step)这个序列生成器,和那个切片的语法一样,含头不含尾,step是步长,这里就不需要在对j进行判断了,对于这些简单求奇数和 ...

最新文章

  1. CBV 验证装饰器的使用
  2. httpClient3.1 笔记
  3. 北斗导航 | 卫星导航发展史
  4. LINUX IRC使用
  5. 我的世界java版游戏崩溃_我的世界全攻略之-游戏崩溃的解决方法
  6. bmon:一个强大的网络带宽监视和调试工具
  7. swift for循环_Swift | 实战一个简单的素数计算器demo
  8. 数据结构实验之二叉树四:还原二叉树
  9. python乘法表运算_Python入门教程(三):史上最全的Numpy计算函数总结,建议收藏!...
  10. 初创公司要严控会议时长,日会5-15分钟,周会不超30分钟
  11. python比较两个列表不同部分_Python实现比较两个列表(list)范围
  12. [应用代码] android 自动接听电话和挂断 (适合目前所有版本)
  13. Hibernate的配置文件配置
  14. 2021-2027全球与中国微机械角速率传感器市场现状及未来发展趋势
  15. 爬取豆瓣音乐Top250详细教程
  16. 分享几个写英文论文的网页和软件
  17. STM32上电启动代码详解(转自安富莱电子)
  18. MySQL 服务无法打开的解决方法
  19. Python pip 修改镜像源为豆瓣源的两种方法
  20. 图扑软件携数字孪生产品与解决方案亮相高交会

热门文章

  1. Adobe Flash Player 官方离线最新版下载地址
  2. 武大学生用python敲出樱花开放 | 附源码
  3. Backdoor.Win32.Rbot病毒防治
  4. tensorflow代码全解析 -3- seq2seq 自动生成文本
  5. 基于STM32的智能风扇的制作
  6. 6-1 设计一个动物声音模拟器
  7. 软件下载站【xing.isgreat.org】
  8. IOS Safari浏览器添加桌面图标
  9. 虚拟机文件远程拷贝或发送命令scp
  10. 计算机组成原理各章测试错题