西北工业大学23-24春季学期pythonOJ写题记录

非计算机相关专业,个人爱好,此帖为学习记录贴。初学水平有限,期待各位大佬指点^ ^

3月15日随堂练习

45b78bf93b514ac48c5a4dcc01e3307a.png

A:

57f6025b6320410aa425c004b3013447.png

print('Hello, World!')

B:

f89ac982b2734231b2121f1848f1dff5.png

a, b = map(int, input().split())
print(a+b)

 C:

a346dd3a759444db860fed0f1e131bf8.png

pi = 3.14159265
r = int(input())
print(round((2*r*pi), 2))
print(round((r**2*pi), 2))

D: 

a74f02e754dd42dc82829bbcfe32a1b6.png

a, b, c = map(int, input().split())
result = (a+b+c)/3
print("%.3f"%result)

E:

b01687e6878d4bb19e1a82800b205647.png

import math

a, b, c = map(int, input().split( ))
average = (a+b+c)/2
s = math.sqrt( average * (average - a) * (average - b) * (average - c) )
print("%.3f"%s)

F:

97afc0f88964449aa0a5510ec3695eee.png

import math

r = float(input())
pi = 3.14159
area = pi * r * r
print("%.4f"%area)

G:

fb347b00ad3c48afb3124e3fbb3f2307.png

import math
p1x, p1y = map(float, input().split())
p2x, p2y = map(float, input().split())
dist = math.sqrt((p1x - p2x)**2 + (p1y - p2y)**2)
print("%.4f"%dist)

H:

da1b1748b8af4094876e253ed41fcedb.png

n1, p1, q1 = map(float, input().split())
n2, p2, q2 = map(float, input().split())

Tp = (p1*q1) + (p2*q2)
print("VALOR A PAGAR: R$", "%.2f"%Tp)

I:c236c78d666640b1b5d950e712979d32.png

pi = 3.14159
r = float(input())
v = (4/3)*pi*r**3
print("VOLUME =", "%.3f"%v)

J:

a56b68606cfa41209c45ffde5ee055c1.png

l = int(input())
time = int((l/30)*60)
print(time, "minutos")

K:

a55b2f65e59742138a1091dd7f8a0982.png

n = int(100*float(input()))
notes = [10000, 5000, 2000, 1000, 500, 200, 100, 50, 25, 10, 5, 1]
quantities = []

for note in notes:
    count = int(n // note)
    quantities.append(count)
    n -= count * note

print("NOTAS:")
for i in range(len(notes)):
    if notes[i] > 100:
        print(quantities[i], "nota(s) de R$", '{:.2f}'.format(notes[i]/100))
    if notes[i] == 100:
        print("MOEDAS:")
        print(quantities[i], "moeda(s) de R$", '{:.2f}'.format(notes[i]/100))
    elif notes[i] <100:
        print(quantities[i], "moeda(s) de R$", '{:.2f}'.format(notes[i]/100))

浮点数计算存在精度问题,这里的做法是全部扩大一百倍(即按照分计算)后再换回去。

L:

5c29804cb9b440bbad21bfd56cf7552e.png

def convert_seconds_to_time(seconds):
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = seconds % 60
    return f"{hours}:{minutes:d}:{seconds:d}"

N = int(input())

print(convert_seconds_to_time(N))

3月22日随堂练习

f21f58bac94b4ab3bb6fa8d647feae74.png

A:

1ae6ffcc4a9e406db530ebf1f62475e5.png

n = int(input())
if n%2 == 0:
    print("EVEN")
else:
    print("ODD")

B:

5b0760e6a3fc45b3a0fd701b174bbd34.png

a, b, c = map(str, input().split())
a = float(a)
b = float(b)
if c == '+':
    print("%.2f" %(a+b))
if c == '-':
    print("%.2f" %(a-b))
if c == '*':
    print("%.2f" %(a*b))
if c == '/':
    print("%.2f" %(a/b))

C:

c4447161c73a413286db8b1d031b3620.png

score = int(input())

if score >=95:
    print("4.1")
if 95>score>=90:
    print("3.9")
if 90 > score >= 85:
    print("3.7")
if 85 > score >= 80:
    print("3.3")
if 80 > score >= 60:
    print("3")
if 60>score:
    print("2")

小声吐槽:因为和尼瓜实际不太一样还WA了几次搞得我莫名其妙 

D:

1ef86aa602fc40cea02213991afd3a6a.png

似乎是想用逻辑运算,但是直接被我排序了

x, y, z = map(int, input().split())
numbers = [x, y, z]
result = sorted(numbers)
for i in range(0,3):
    print(result[i], end=' ')

E:

63d3747249534b5ea37ac2173110a5cb.png

n = int(input())
output_format = "{}({}) {}({}) {}({}) {}({}) {}({})"

print(output_format.format(n, 4*n, n, n, n, n, n, n, n, 4*n))

# 1(4) 1(1) 1(1) 1(1) 1(4)

F:

65fbd7fcccdd484e87ee1b289e18d2f0.png

a, b = map(int, input().split())
if a%b==0 or b%a==0:
    print("Sao Multiplos")
else:
    print("Nao sao Multiplos")

G:bff1968ebc154d3b986db613713d3920.png

n = float(input(""))
z = 0

if n <= 400.00:
    z = 0.15
elif n <= 800.00:
    z = 0.12
elif n <= 1200.00:
    z = 0.10
elif n <= 2000.00:
    z = 0.07
else:
    z = 0.04
x = n * (1+z)
print("Novo salario: {:.2f}".format(x))
print("Reajuste ganho: {:.2f}".format(x-n))
print("Em percentual: {:.0%}".format(z))

H:

5f931e72a56e45f6a35da410f42c7310.png

a, b = map(int, input().split())
n = 0
if a==b:
    n = 24
if a<b:
    n = b-a
if a>b:
    n = 24-a+b
print("O JOGO DUROU {:d} HORA(S)".format(n))

I:

cdca926adf734be182f79788f04550f7.png

a, b, c, d = map(int, input().split())
if b>c and d>a and (c+d)>(b+a) and c>0 and d>0 and a%2==0:
    print("Valores aceitos")
else:
    print("Valores nao aceitos")

J:

0cf6b24e29074038aa3e54829f5090e9.png

# @Time: 2024/3/22 17:02
# @Author: AsakawaNagi
# @File: GameTimeII.py
# @Software: PyCharm

a, b, c, d = map(int, input().split())
h = 0
m = 0
if a==c and b==d:
    h = 24
if a==c and b<d:
    h =0
if a<c:
    h = c-a
if a>c:
    h = 24-a+c

if d>b:
    m = d-b
if d<b:
    h -= 1
    m = 60 + d - b

print("O JOGO DUROU {} HORA(S) E {} MINUTO(S)".format(h, m))

容易出问题的应该是在整24小时的判定上

K:

b73ee8ed213546739cc88bb42615b798.png

R, r = map(int, input().split())

if R-r >= 4 * r:
    print("Yes")
else:
    print("No")

先手的人只要第一次把硬币放在桌子正中央,然后后手放在哪,先手放在它对角线的地方就是必胜的。

因此在这里只需要考虑桌子比硬币小的情况。想了半天,有点神金。

X月X日随堂练习

085a2720302c42e08c0721a59caf0b2d.png

A:

9ad5c5ac2f7d4e5e8b60e25ab786bfb9.png

n = int(input())
a = list(map(int, input().split()))
for i in range(n):
    print("{} want to take part in NPU ACM Base!".format(a[i]))

B:

3723dcb83c7a4549b84a34004e088813.png

n = int(input())
while n:
    digit = n % 10
    n = n//10
    print(digit,end=' ')

C: 

91a32eb7ee664a1d9c1691c9d12c77e1.png

n, m = map(int, input().split())
f = [0 for i in range(55)]
f[1] = m
result = m
for i in range(2, n+1):
    f[i] = 2*f[i-1]+10
    result += f[i]
print(result)

D:

ee9902c591b74900ae5d505b0d6fe2a2.png

from decimal import Decimal, getcontext

getcontext().prec = 100

def term(i):
    return Decimal(((-1)**i) * (2*i-3) + 3*i-5) / Decimal((2*i+1) * (2*i-1))

def partial_sum(n):
    sum_terms = Decimal(0)
    for i in range(1, n+1):
        sum_terms += term(i)
    return sum_terms

n = int(input())
result = partial_sum(n)
print("%.6f" %result)

如果出错的话应该基本是在浮点数精度问题 

E:

020f87de6df04806a74c918b7354e0b1.png

n = int(input())
l = list(map(int, input().split()))
Max = float('-inf')  

for i in range(0, n - 2):
    current_sum = l[i] + l[i + 1] + l[i + 2]
    Max = max(Max, current_sum)

print(Max)

F:

390cc78d61464804b52bc0dc53d43348.png
翻译一下题目:
现在有方程p*n+x=m和q*n+y=m;p,q,x,y的值会给出(全为整数)
输出n和m的值(m>=n,n<=200,m,n均为整数)
如果答案不唯一,那么按n大小从小到大排列输出,如果无解,输出ERROR!
易错点在于整数,多个解

def find_n_and_m(p, q, x, y):
    solutions = []
    for n in range(1, 201):  # n取值范围为1到200
        m1 = p * n + x
        m2 = q * n + y
        if m1 == m2:
            solutions.append((n, m1))
    return solutions

p, q, x, y = map(int, input().split())
results = find_n_and_m(p, q, x, y)

if len(results) == 0:
    print("ERROR!")
else:
    for n, m in sorted(results):
        print(n, m)

G:

c71b2d590ffc42a99819fd83f520973d.png

p = int(input())
gai = p
ping = p
drink = p
while ping//2!=0 or gai//3!=0:
    drink+=ping//2+gai//3
    newping = ping%2 + ping//2 + gai//3
    newgai = gai%3 + gai//3 + ping//2
    ping = newping
    gai = newgai
    # print("瓶子:", ping)
    # print("盖子:", gai)
print(drink)

H:

0c5124cc0acb47e1a1597ac0a2e328e0.png

def count_super_numbers(l, r):
    count = 0
    for num in range(l, r + 1):
        if num % 2 == 0 and num % 7 == 0 and num % 3 != 0:
            count += 1
    return count

l,r = map(int, input().split())
print(count_super_numbers(l, r))

I:

136168c04fa04bf38f10fee74563bbe5.png1342c63bd77345b58ad92bebba813626.png

n = int(input())

def is_prime(num):
    if num <= 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

def digit_sum(num):
    result = num // 1000 + (num // 100) % 10 + (num // 10) % 10 + num % 10
    return result

for i in range(3000, 4000):
    if is_prime(i + n) and is_prime(digit_sum(i + n)):
        print(i)
        break
else:
    print("Game Over!")

采用了一种更简单的判断素数的方法,不然似乎会超时 

J:

8f06c78d782d4ba284dc584a146ea5ad.png

def is_perfect(n):
    result = 0
    i = 1
    while i * i <= n:
        if n % i == 0:
            result += i
            if i != n // i:  # 避免重复计算同一个因子
                result += n // i
        i += 1
    result -= n  # 减去n本身
    return result == n

n = int(input())
for i in range(1,n+1):
    m = int(input())
    if is_perfect(m):
        print("{} is perfect".format(m))
    else:
        print("{} is not perfect".format(m))

根据完美数的性质,只需要在1到sqrt(n)范围内判断即可。
因为如果n可以被i整除,那么n/i也一定能整除,并且两者的商和余数之和为n。
利用这一性质,可以减少循环的次数。

K:

abe218e9ee294982910cea05ff5284de.png

def is_prime(num):
    if num <= 1:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

n = int(input())
for i in range(1,n+1):
    num = int(input())
    if is_prime(num):
        print("{} is prime".format(num))
    else:
        print("{} is not prime".format(num))

4月12日随堂测试

b125e11885d2452e8b06abc8de985a34.png

A:

26809c42b0bf43fda7cbe174d5f8d78e.png

def jq(student1_info, student2_info):
    scores1 = list(map(int, student1_info[1:]))
    scores2 = list(map(int, student2_info[1:]))

    average1 = scores1[0] * 0.2 + scores1[1] * 0.3 + scores1[2] * 0.5
    average2 = scores2[0] * 0.2 + scores2[1] * 0.3 + scores2[2] * 0.5

    if average1 > average2:
        return student1_info[0]
    elif average1 < average2:
        return student2_info[0]
    else:
        return "Tie"


if __name__ == "__main__":
    student1_info = input().split()
    student2_info = input().split()

    print(jq(student1_info, student2_info))

B:

2a500a793b0a4d28b36a8ad9c81d0315.png

# @Time: 2024/4/12 16:04
# @Author: AsakawaNagi
# @File: djm.py
# @Software: PyCharm

hh,mm,ss=map(int,input().split(":"))
print(hh*3600+mm*60+ss)

C:

b1d27554accc4146ba8a57d8beb5cb3b.png

def validate_time(time_str):
    hours, minutes, seconds = map(int, time_str.split(':'))

    if seconds >= 60:
        minutes += seconds // 60
        seconds %= 60
    if minutes >= 60:
        hours += minutes // 60
        minutes %= 60
    if hours >= 24:
        hours %= 24

    new_time_str = f"{hours:d}:{minutes:d}:{seconds:d}"

    if new_time_str == time_str:
        return "Yes"
    else:
        return new_time_str


time_input = input()

print(validate_time(time_input))

 4月19日随堂练习:

f203ddc42f9d4da9b5c18c8953676abf.png

着急去和男朋友约会,先更一点一会继续。今天题挺好的,有什么想问的可以留言。 

A:

cf2e6767f1ad42b3986d4af8abf7bac5.png

n = int(input())
l = list(map(int, input().split()))
count = 0
maxcount=0
for i in range(1,len(l)):
    if l[i] > l[i-1]:
        count+=1
        if count>maxcount:
            maxcount=count
        continue
    else:
        count = 0
print(maxcount+1)

B:

f6f04f89e7b4494494ac30c3bb61d049.png

a, b = map(int, input().split())
primenumber = []

# 在范围 (a, b] 中进行判断
for x in range(a+1, b + 1):
    is_prime = True
    # 尝试将 x 除以 2 到 sqrt(x) 之间的数,若存在因子,则将 is_prime 置为 False
    for i in range(2, int(x**0.5) + 1):
        if x % i == 0:
            is_prime = False
            break
    if is_prime:
        primenumber.append(x)

# print(primenumber)
for i in primenumber:
    print(i, end=" ")

C:

6240ab3dde984500885e7594697922d9.png

n = int(input())
l = list(map(int, input().split()))
max = l[1]
min = l[1]

for i in range(0,n):
    if min>l[i]:
        min=l[i]
    if max<l[i]:
        max=l[i]

print(min+max)

D:

cf6c95748bc74a4eb79f58c940132338.png

a = int(input())
b,c = map(int,input().split())
d,e,f = map(int,input().split())
result = a
way1 = b+max(d,e)
way2 = c+max(e,f)
if way1>way2:
    result += way1
else:
    result += way2
print(result)

E:

21770f1e0d544c15866cb31d5746e440.png

n = int(input())

fibonacci = [1, 1]
for i in range(2, n):
    fibonacci.append((fibonacci[-1] + fibonacci[-2]) % 1000)

print(str(fibonacci[-1]).zfill(3))

F:

a484d5a606cb47adb6139bd7467362b5.png

way = [0 for i in range(13)]
way[1]=1
way[2]=2
n = int(input())
for i in range(3,n+1):
    way[i]=way[i-1]+way[i-2]
print(way[n])

G:

8e7bc36973954708bd5caf07c8ae02a1.png

def fast_e(a, b, p):
    result = 1
    a %= p

    while b > 0:
        if b % 2 == 1:
            result = (result * a) % p
        a = (a * a) % p
        b //= 2

    return result


n = int(input())

for i in range(n):
    a, b, p = map(int, input().split())
    print(fast_e(a, b, p))

怕超时直接用快速幂做的 

H:

ab609504fc7a45eab536ab38ed427b12.png

def cf(n):
    li = []
    for i in range(1, int(n**0.5) + 1):
        if n % i == 0:
            li.append(i)
            li.append(int(n/i))
    li = list(set(li))
    li.sort()
    return li
n = int(input())
for i in range(n):
    x = int(input())
    result = cf(x)
    # output_string = ' '.join(str(num) for num in result)
    # print(output_string)
    # print(result)
    for i in result:
        print(i, end=' ')
    print('')
# print(cf(int(input())))

 此题目输出格式有误,需要在最后一个输出后再加一个空格

助教说好像已经改了?大家可以自己试一试

I:

3f4c793c27e64ec38040ac798b46d9b0.png

# @Time: 2024/4/19 16:18
# @Author: AsakawaNagi
# @File: Find.py
# @Software: PyCharm

n,m = map(int ,input().split())
arr = list(map(int,input().split()))
count = 0
for i in range(0,n):
    if arr[i] == m :
        count += 1
print(count)

J:

6a4ff0e2f2844686b359d1a4801ddcab.png

第一遍用二分查找反正没过,换了这个方法之后过了

def cubic_root(n, precision=1e-9):
    x = n / 2  # 初始猜测值可以设为 n 的一半
    while abs(x**3 - n) > precision:
        x = x - (x**3 - n) / (3 * x**2)
    return round(x, 6)

x = int(input())
result = cubic_root(x)
print("{:.6f}".format(result))

K:

8cf1e0433e2c408d8e0318f6ed2a6bb7.png

此题需要先跑出一个表然后直接查找值,这样可以让循环次数少一点。否则会超时

def pre_fibonacci(n):
    fib = [0] * (n+1)
    fib[1] = 1

    for i in range(2, n+1):
        fib[i] = fib[i-1] + fib[i-2]

    return fib

def fibonacci(n):
    return arr[n]

arr = pre_fibonacci(60)

t = int(input())
for _ in range(t):
    n = int(input())
    print("Fib({:d}) = {:d}".format(n, fibonacci(n)))

L:

40bee7cce2b24b48aaa21c8b088409ab.png

c = int(input())
demand = input()

data = []
for _ in range(12):
    row = list(map(float, input().split()))
    data.append(row)

result = 0

if demand == 'S':
    for i in range(12):
        result += data[i][c]
    print("{:.1f}".format(result))
elif demand == 'M':
    column_sum = sum(data[i][c] for i in range(12))
    result = column_sum / 12
    print("{:.1f}".format(result))

4月26日随堂练习:

 因为周五下午想要陪男朋友吃饭然后送他去考试就提前写了然后准备翘掉实验课()

python写字符串是真爽啊。有几道题因为理解错了不是一遍过的,数据不太美观捏。

凌晨csdn一些页面打不开,截图也是糊糊的,是出什么问题了吗

中午更新:发现截图和题目a的代码都没传上去,然鹅现在在开会,晚上回去更新

懒得截图了,随便吧

A:

s = input()
s1 = input()
result = s.replace(s1, '#')
print(result)

B:

def insert_substring(string, substr):
    max_char = max(string)
    max_index = string.index(max_char)
    result = string[:max_index + 1] + substr + string[max_index + 1:]
    return result

for _ in range(2):
    string, substr = input().split()
    print(insert_substring(string, substr))

C:

s=input()
for i in s:
    if s.count(i)==1:
        print(i)
        exit()
print('no')

D:

def longest_consecutive_char():
    string = input()
    max_char = string[0]
    max_count = 1

    current_char = string[0]
    current_count = 1

    for char in string[1:]:
        if char == current_char:
            current_count += 1
        else:
            current_char = char
            current_count = 1

        if current_count > max_count:
            max_char = current_char
            max_count = current_count

    print(max_char, max_count)


n = int(input())
for i in range(n):
    longest_consecutive_char()

 最开始测试的时候写的代码很短一条,然后发现 abcdefghigk 会输出 g 2,于是乎老老实实写了

E:

就是这道题,错了好多遍,刚开始认为总字符串是两个的长度之和。然后才发现是一个,个人认为描述有误。

k = float(input())
a = input()
b = input()
count = 0
for i in range(len(a)):
    if a[i] == b[i]:
        count += 1

if (count / (len(a))) >= k:
    print("yes")
else:
    print("no")

F:

def encrypt_string(s):
    encrypted = ""
    for char in s:
        if char.islower():
            encrypted += chr((ord(char) - ord('a') + 1) % 26 + ord('a'))
        elif char.isupper():
            encrypted += chr((ord(char) - ord('A') + 1) % 26 + ord('A'))
        else:
            encrypted += char
    return encrypted


input_str = input()


print(encrypt_string(input_str))

G:

a, b = map(str, input().split())
if len(a) < len(b):
    a, b = b, a
# 因为没有说哪个字符串长,所以要手动判断

for i in range(len(a)):
    a = a[1:] + a[0]
    for j in range(len(a) - len(b) + 1):
        for k in range(len(b)):
            if a[j:j + len(b)] == b:
                print("true")
                exit()
else:
    print("false")

5月10日随堂测试

应群内助教要求不放出此次题目和答案。大家懂的都懂。如果需要答案的话可以私信我。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值