主题色

Python HDUF-字符串/列表

头歌 Educoder 在线实训 · 共 5 关

第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!")
行号代码白话解释
1s = input().strip()读取第一行,去掉首尾空白,得到类似 "58$" 的字符串。
2float(input())读取第二行的汇率并转为浮点数。
4s[:-1]切片:取除最后一个字符外的所有字符,即金额数值部分。
5s[-1]取最后一个字符,即货币符号 $
8~9if symbol == '$'美元转人民币:乘以汇率。
10~11elif symbol == '¥'人民币转美元:除以汇率。
12~13else: print("Data error!")货币符号既不是 $ 也不是 ,报错。
7amount > 0 and r > 0金额和汇率必须都是正数。

第2关 车牌尾号

给定一个车牌字符串,输出车牌中最后一位数字字符

输入样例输出样例
川A 3TY6B6
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)
行号代码白话解释
3for i in range(len(s) - 1, -1, -1):从最后一个字符开始,倒序遍历字符串。
4s[i].isdigit()判断当前字符是否为数字字符。
5~6last_digit = s[i]; break找到数字后立即保存并跳出循环,只取最后一位
9print(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")
行号代码白话解释
1float(input())读取判定阈值。
2~3input().strip()读取两条 DNA 序列字符串。
7~9for i in range(n)逐个位置比对两条序列的碱基。
8a[i] == b[i]若同一位置碱基相同,计数器加 1。
11same / n相同碱基数 ÷ 总长度 = 相似比例。
12"{ratio:.3f}"保留 3 位小数输出比例。
14~17if 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)
行号代码白话解释
1int(input()) + 30读取最大高度,加上板凳的 30 厘米,得到实际能够到的最高高度。
2input().split()读取所有苹果高度,按空格分割成字符串列表。
5~7for x in heights逐个苹果判断:如果高度 ≤ 能够到的最高高度,计数加 1。
6int(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~2heights = []准备一个空列表收集所有身高。
4while True:无限循环读取输入,直到遇到 -1。
6if x == -1: break-1 是结束标志,跳出循环。
7~8heights.append(x); total += x把身高加入列表,同时累加总和。
11total / len(heights)总和 ÷ 人数 = 平均身高。
13~15for h in heights再次遍历列表,输出所有超过平均值的身高。