Python基础语法:运算练习题及答案解析
输出格式化
十六进制转十进制
描述
BoBo写了一个十六进制整数ABCDEF,他问KiKi对应的十进制整数是多少。
输入描述:
无
输出描述:
十六进制整数ABCDEF对应的十进制整数,所占域宽为15。
备注:
printf可以使用使用格式控制串“%md”输出域宽为m的十进制整数。
num='ABCDEF'
num=int(num,16)
print(f'{num:15d}')
• int(x, base) 能将特定进制的字符串转为十进制整数(base=16 就是十六进制转十进制)。
• f-string 中 {num:15d} 表示十进制输出,总宽度15,右对齐,不够补空格。
• Python 变量无固定类型,num 从字符串被重新赋值为整数,类型动态改变。
缩短二进制
描述
我们处理的整数通常用十进制表示,在计算机内存中是以二进制补码形式存储,但通常二进制表示的整数比较长,为了便于在程序设计过程中理解和处理数据,通常采用八进制和十六进制,缩短了二进制补码表示的整数,但保持了二进制数的表达特点。请输出十进制整数1234对应的八进制和十六进制。
输入描述:
无
输出描述:
十进制整数1234对应的八进制和十六进制(字母大写),用空格分开,并且要求,在八进制前显示前导0,在十六进制数前显示前导0X。
备注:
printf可以使用使用格式控制串“%o”、“%X”分别输出八进制整数和十六进制整数,并使用修饰符“#”控制前导显示
print('{} {}'.format(oct(1234).replace('o',''),hex(1234).upper()))
1. 一句话人话概括
这段代码把十进制数 1234 分别转成八进制和十六进制字符串,手动去掉八进制前缀中的字母 'o',并把十六进制前缀中的字母转成大写,最后用 format() 拼成一行打印出来。
2. 逐行/分块白话拆解
oct(1234):将整数1234转为八进制字符串,结果是'0o2322'(前缀0o表示八进制,数字部分是2322)。.replace('o',''):把字符串中所有小写字母o替换为空(删掉)。'0o2322'→'02322'(注意:前面的数字0保留,只删了字母o)。hex(1234):将整数1234转为十六进制字符串,结果是'0x4d2'(前缀0x表示十六进制,数字字母是4d2)。.upper():把字符串中所有小写字母转为大写。'0x4d2'→'0X4D2'(前缀和字母都大写了)。'{} {}'.format(...):用占位符{}接收两个处理好的字符串,中间用空格隔开,最终打印02322 0X4D2。
3. 精华知识点总结(小白复制版)
• oct() 和 hex() 自带进制前缀(0o / 0x),用 replace() 或切片 [2:] 可去掉。
• upper() 只影响英文字母,数字和符号 0x 中的 x 也会被转成大写 X。
• str.format() 是早期 Python 主流格式化方式,用 {} 做占位符,按顺序传参。
4. 工程避坑指南(防崩溃手册)
- 替换不严谨:
replace('o','')会删掉所有字母o。虽然八进制数字里不含o,但这是“有隐患的写法”。更推荐用removeprefix('0o')(Python 3.9+)或[2:]切片去前缀,更安全直观。 upper()的作用范围:它会连前缀0x里的x也变大写,变成0X。如果你只想要数字字母大写而保留小写前缀(如0x4D2),需要单独处理(如'0x' + hex(1234)[2:].upper())。- 参数数量匹配:
format()里写了两个{},就必须恰好传两个参数,否则报IndexError。
牛牛的空格分隔
a = input()
b = int(input())
c = float(input())
print(f"{a} {b} {c:6f}")
• input() 读的全是字符串,int() 和 float() 负责转换成数值类型。
• f-string 中直接写 " " 空格,输出时就会带空格,这是最简单的拼接方式。
• 致命混淆点:{c:6f} 是“总宽度6,精度默认6位小数”的意思,想保留2位小数必须写成 {c:.2f}(带点号)。
• 若实际数字长度超过设定的最小宽度,宽度限制会直接失效。
牛牛的对齐
描述
读入 3 个整数,牛牛尝试以后两个数字占 8 个空格的宽度靠右对齐输出。
输入描述:
输入三个整数,用空格隔开。
输出描述:
输出 3 个整数以第二三个数字占 8 个空格靠右对齐输出
示例1
输入:
2 7 5
输出:
2 7 5
a,b,c= map(int,input().split())
print(f"{a:<8d}{b:<8d}{c:<8d}")
精华知识点总结
• map(函数, 可迭代对象) 可批量对每个元素执行相同操作,省去手写循环。
• map(int, input().split()) 是处理“一行多个整数”的标准写法,简洁高效。
• f-string 中 {:<8d} 表示左对齐、最小宽度8、十进制整数(右侧补空格)。
• 解包时数量必须严格匹配,多一个少一个都会报 ValueError。
• map 返回的是迭代器,解包后即消耗完毕,不能重复使用。
进制A+B
描述
输入一个十六进制数a,和一个八进制数b,输出a+b的十进制结果(范围-231~231-1)。
输入描述:
一行,一个十六进制数a,和一个八进制数b,中间间隔一个空格。
输出描述:
一行,a+b的十进制结果。
示例1
输入:
0x12 05
输出:
23
num=input().split()
num=[int(num[0],16),int(num[1],8)]
print(sum(num))
基本运算符
加法

a, b = map(int,input().split())
print(a + b)
除法
输入:5 2
输出:2
a,b = map(int,input().split())
print(a//b)
• map(int, input().split()) 是读取"一行多个整数"的标准极简写法。
• // 叫地板除,结果永远是整数,但遵循"向下取整"规则(对负数极其重要)。
• 解包赋值 a,b = … 要求右侧元素个数严格等于左侧变量数。
• map 返回的是迭代器,解包后即耗尽,不可重复使用。
余数
a,b = map(int,input().split())
print(a%b)
% 在 Python 中叫取模(Modulo),结果的正负号永远与除数 b 一致。
在其他编程语言(如 C/Java)中 % 叫取余(Remainder),结果符号与被除数一致(向零截断)。Python 的 % 是取模(Modulo),结果符号与除数一致(向下取整)。例如:
-10 % 3:Python 输出 2(因为 -10 = (-4)*3 + 2);而 C/Java 输出 -1(-10 / 3 = -3 向零取整,余数 -1)。
10 % -3:Python 输出 -2(结果与除数 -3 同号);C/Java 输出 1。
浮点数的个位数字
输入:13.141
输出:3
a = float(input())
print(int(a)%10)
运算
整数的十位

a = int(input())
print(a//10%10)
精华知识点总结
• //10 相当于“右移一位删除个位”,%10 相当于“取最后一位”。
• 组合 a//10%10 就是提取整数的十位数字。
• 运算符优先级:// 和 % 同级,从左到右计算(先 //10,后 %10)。
• 提取百位就写 a//100%10,千位就 a//1000%10,规律是“先砍后取”。
日期的计算

x,n = map(int,input().split())
if(x+n)%7 == 0:
print(7)
else:
print((x+n)%7)
x, n = map(int, (input().split())):读取一行两个整数(如 “5 3”),批量转成 int 后解包赋值给 x 和 n。
if (x + n) % 7 == 0::先求两数之和,再对 7 取模。如果余数等于 0,走 if 分支。
print(7):当余数为 0 时,输出 7(把“整除”映射为最大值)。
else: print((x + n) % 7):如果余数不是 0(即 1~6),就直接输出这个余数。
更多推荐
所有评论(0)