7-1 西安距离 (10 分)

小明来到了古都西安,想去参观大唐西市!
西安的道路可以看做是与x轴或y轴垂直的直线,小明位于(a,b),而目的地位于(c,d),问最少几步可以到达。

输入格式:
一行中四个整数,a,b,c,d,表示坐标为(a,b)与(c,d),这里0<=a,b,c,d<=1000
输出格式:
输出这两个点的西安距离。
输入样例:

0 0 3 4

结尾无空行

输出样例:

7

结尾无空行

解题思路:
求横坐标两点的的距离和纵坐标两点的距离,相加求和并输出。

代码样例

a, b, c, d = map(int, input().split(" "))
distance = abs((a - c)) + abs((b - d))
print(distance, end="")

7-2 jmu-python-回文数判断(5位数字) (10 分)

本题目要求输入一个5位自然数n,如果n的各位数字反向排列所得的自然数与n相等,则输出‘yes’,否则输出‘no’。
输入格式:
13531
输出格式:
yes
输入样例1:

13531

结尾无空行

输出样例1:

yes

结尾无空行

输入样例2:

13530

结尾无空行

输出样例2:

no

结尾无空行

解题思路:
第一种
比对第一位和第五位、第二位和第四位是否相同
需要注意,python 字符串索引从 0 开始
第二种
利用循环将字符串倒置并与原字符串进行比对

代码样例

参考答案1

a = input()
if a[0] == a[4] and a[1] == a[3]:
    print("yes")
else:
    print("no")

参考答案2

in_str = input()
new_str = ""
for s in in_str:
    new_str = s + new_str
print("yes" if in_str == new_str else "no", end="")

7-3 jmu-python-判断是否构成三角形 (10 分)

输入三角形的三边,判断是否能构成三角形。若能构成输出yes,否则输出no。
输入格式:
在一行中直接输入3个整数,3个整数之间各用一个空格间隔,没有其他任何附加字符。
输出格式:
直接输出yes或no,没有其他任何附加字符。
输入样例1:

3 4 5

结尾无空行

输出样例1:

yes

结尾无空行

输入样例2:

1 2 3

结尾无空行

输出样例2:

no

结尾无空行

解题思路:
三角形任意两条边大于第三边,可使用大于或小于的写法
需要注意,用小于的写法需要加绝对值符号

代码样例

参考答案1

a, b, c = map(float, input().split(" "))
if abs(a - b) < c and abs(a - c) < b and abs(b - c) < a:
    print("yes")
else:
    print("no")

参考答案2

a, b, c = map(int, input().split(" "))
if a + b > c and a + c > b and b + c > a:
    print("yes", end="")
else:
    print("no", end="")

7-4 jmu_python_最大公约数&最小公倍数 (10 分)

本题要求从键盘输入两个整数(以逗号间隔),编程求出这两个数的最大公约数和最小公倍数
提示:求最大公约数可用辗转相除法,最小公倍数用两数的积除以最大公约数
输入格式:
在一行中输入两个整数,以逗号间隔
输出格式:
输出“GCD:a, LCM:b",其中a为求出的最大公约数,b为求出的最小公倍数
注意:在逗号后面有个空格
输入样例:

12,14

结尾无空行

输出样例:

GCD:2, LCM:84

结尾无空行

解题思路:
先求最大公约数,可使用质因数分解法、短除法、辗转相除法
最大公倍数=输入的两个整数相乘/最大公约数

代码样例

参考答案1

a, b = map(int, input().split(","))
c, d = a, b
if a < b:
    a, b = b, a
while b:
    a, b = b, a % b
e = int(c * d / a)
print("GCD:{}, LCM:{}".format(a, e))

参考答案2

def gcd_lcm(a, b):
    m, n = (a, b) if a >= b else (b, a)
    while n:
        m, n = n, m % n
    n = int(a * b / m)
    return m, n


x, y = map(int, input().split(","))
gcd, lcm = gcd_lcm(x, y)
print("GCD:{}, LCM:{}".format(gcd, lcm), end="")

7-5 计算 21+22+23+...+m (30 分)

输入一个正整数m(30<=m<=100),计算表达式 21+22+23+...+m 的值。
输入格式:
在一行输入一个正整数m
输出格式:
在一行中按照格式“sum = S”输出对应的和S
输入样例:
在这里给出一组输入。例如:

90

结尾无空行

输出样例:
在这里给出相应的输出。例如:

sum = 3885

结尾无空行

解题思路:
简单的循环题,主要考察对 for i in range(n) 的理解

代码样例

m = eval(input())
s = 0
for i in range(21, m + 1):
    s += i
print("sum = {}".format(s), end="")

7-6 jmu-python-凯撒密码加密算法 (10 分)

编写一个凯撒密码加密程序,接收用户输入的文本和密钥k,对明文中的字母a-z和字母A-Z替换为其后第k个字母。
输入格式:
接收两行输入,第一行为待加密的明文,第二行为密钥k。
输出格式:
输出加密后的密文。
输入样例:
在这里给出一组输入。例如:

Hello World!
3

结尾无空行

输出样例:
在这里给出相应的输出。例如:

Khoor Zruog!

结尾无空行

解题思路:
先后读入字符串和偏移位并初始化一个新变量,用于存储转换后的字符。进入循环,遍历字符串中的所有字母,判断字符是否为字母,如果是字母则转换成对应的 ASCII 数值存入新变量并进行偏移,判断是否溢出 ASCII 数值的范围,如果溢出则将数值减26,然后将数值转换回字母加入转换后的字符;不是字母则直接加入转换后的字符,循环结束后直接输出转换的字符。

代码样例

string = input()
offset = int(input())
new_string = ""
for s in string:
    if s.isalpha():
        temp = ord(s) + offset
        if chr(temp).isalpha():
            new_string += chr(temp)
        else:
            new_string += chr(temp - 26)
    else:
        new_string += s
print(new_string, end="")

7-7 jmu-python-素数 (20 分)

输入一个数,判断其是否素数。素数是大于1的自然数中,除了1和它本身以外不再有其他因数。
输入格式:
输入一个整数
输出格式:
输出是否素数。
输入样例:

12

结尾无空行

输出样例:

12 is not prime

结尾无空行

输入样例:

7

结尾无空行

输出样例:

7 is prime

结尾无空行

解题思路:
题干限定整数,因此输入的除了非一正整数也有可能是 0 / 1 / 负数,首层先判断是否大于 1,如果不是则直接返回假。之后进入循环,从 2 一直除到数值本身,期间如果能够被整除则标记为素数。样例使用了一个变量 temp 进行标记,有助于代码的简化。
需要注意,1 不是素数也不是合数。

代码样例

参考答案1

a = int(input())
temp = False
if a > 1:
    for i in range(2, a):
        if (a % i) == 0:
            temp = True
            break
if temp:
    print(f"{a} is prime")
else:
    print(f"{a} is not prime")

参考答案2

n = eval(input())
if n > 1:
    for i in range(2, n):
        if (n % i) == 0:
            print(n, "is not prime", end="")
            break
    else:
        print(n, "is prime", end="")
else:
    print(n, "is not prime", end="")