第1关 货币转换
编写一个美元与人民币转换的程序,用户输入金额和汇率,输出转换为另一种货币表示的金额。(美元用符号 $ 表示,人民币用 ¥ 表示)
| 输入样例1 | 输出样例1 |
58$
6.75 | 391.50¥ |
| 输入样例2 | 输出样例2 |
100¥
6.85 | 14.60$ |
s = input().strip()
r = float(input())
amount_str = s[:-1]
symbol = s[-1]
amount = float(amount_str)
if amount > 0 and r > 0:
if symbol == '$':
result = amount * r
print(f"{result:.2f}¥")
elif symbol == '¥':
result = amount / r
print(f"{result:.2f}$")
else:
print("Data error!")
else:
print("Data error!")
| 行号 | 代码 | 白话解释 |
| 1 | s = input().strip() | 读取第一行,去掉首尾空白,得到类似 "58$" 的字符串。 |
| 2 | float(input()) | 读取第二行的汇率并转为浮点数。 |
| 4 | s[:-1] | 切片:取除最后一个字符外的所有字符,即金额数值部分。 |
| 5 | s[-1] | 取最后一个字符,即货币符号 $ 或 ¥。 |
| 8~9 | if symbol == '$' | 美元转人民币:乘以汇率。 |
| 10~11 | elif symbol == '¥' | 人民币转美元:除以汇率。 |
| 12~13 | else: print("Data error!") | 货币符号既不是 $ 也不是 ¥,报错。 |
| 7 | amount > 0 and r > 0 | 金额和汇率必须都是正数。 |
第2关 车牌尾号
给定一个车牌字符串,输出车牌中最后一位数字字符。
s = input().strip()
last_digit = ''
for i in range(len(s) - 1, -1, -1):
if s[i].isdigit():
last_digit = s[i]
break
print(last_digit)
| 行号 | 代码 | 白话解释 |
| 3 | for i in range(len(s) - 1, -1, -1): | 从最后一个字符开始,倒序遍历字符串。 |
| 4 | s[i].isdigit() | 判断当前字符是否为数字字符。 |
| 5~6 | last_digit = s[i]; break | 找到数字后立即保存并跳出循环,只取最后一位。 |
| 9 | print(last_digit) | 输出找到的数字字符。 |
第3关 基因相似性
比对两条长度相同的 DNA 序列。相同位置的碱基若相同则称为相同碱基对。计算相同碱基对占总碱基对数量的比例,若该比例大于等于给定阈值则判定两条 DNA 序列相关,输出 yes,否则输出 no。
| 输入样例 | 输出样例 |
0.85
ATCGCCGTAAGTAACGGTTTTAAATAGGCC
ATCGCCGGAAGTAACGGTCTTAAATAGGCC | 0.933
yes |
t = float(input())
a = input().strip()
b = input().strip()
n = len(a)
same = 0
for i in range(n):
if a[i] == b[i]:
same += 1
ratio = same / n
print(f"{ratio:.3f}")
if ratio >= t:
print("yes")
else:
print("no")
| 行号 | 代码 | 白话解释 |
| 1 | float(input()) | 读取判定阈值。 |
| 2~3 | input().strip() | 读取两条 DNA 序列字符串。 |
| 7~9 | for i in range(n) | 逐个位置比对两条序列的碱基。 |
| 8 | a[i] == b[i] | 若同一位置碱基相同,计数器加 1。 |
| 11 | same / n | 相同碱基数 ÷ 总长度 = 相似比例。 |
| 12 | "{ratio:.3f}" | 保留 3 位小数输出比例。 |
| 14~17 | if ratio >= t | 比例达到阈值输出 yes,否则 no。 |
第4关 摘苹果
小鲁有个 30 厘米高的板凳,已知每个苹果到地面的高度以及小鲁把手伸直能够达到的最大高度,计算他能摘到的苹果数目。踩上板凳后总高度 = 最大高度 + 30。
| 输入样例 | 输出样例 |
110
100 200 150 128 210 | 2 |
h = int(input()) + 30
heights = input().split()
count = 0
for x in heights:
if int(x) <= h:
count += 1
print(count)
| 行号 | 代码 | 白话解释 |
| 1 | int(input()) + 30 | 读取最大高度,加上板凳的 30 厘米,得到实际能够到的最高高度。 |
| 2 | input().split() | 读取所有苹果高度,按空格分割成字符串列表。 |
| 5~7 | for x in heights | 逐个苹果判断:如果高度 ≤ 能够到的最高高度,计数加 1。 |
| 6 | int(x) <= h | 将字符串转为整数后再比较。 |
第5关 超过平均的身高
输入若干行整数表示同学的身高,最后一行为 -1 表示输入结束。输出其中超过平均身高的那些身高,每行一个。
| 输入样例 | 输出样例 |
143
174
119
127
117
164
110
128
-1 | 143
174
164 |
heights = []
total = 0
while True:
x = int(input())
if x == -1:
break
heights.append(x)
total += x
avg = total / len(heights)
for h in heights:
if h > avg:
print(h)
| 行号 | 代码 | 白话解释 |
| 1~2 | heights = [] | 准备一个空列表收集所有身高。 |
| 4 | while True: | 无限循环读取输入,直到遇到 -1。 |
| 6 | if x == -1: break | -1 是结束标志,跳出循环。 |
| 7~8 | heights.append(x); total += x | 把身高加入列表,同时累加总和。 |
| 11 | total / len(heights) | 总和 ÷ 人数 = 平均身高。 |
| 13~15 | for h in heights | 再次遍历列表,输出所有超过平均值的身高。 |