非计算机相关专业,个人爱好,此帖为学习记录贴。初学水平有限,期待各位大佬指点^ ^
3月15日随堂练习
A:
print('Hello, World!')
B:
a, b = map(int, input().split())
print(a+b)
C:
pi = 3.14159265
r = int(input())
print(round((2*r*pi), 2))
print(round((r**2*pi), 2))
D:
a, b, c = map(int, input().split())
result = (a+b+c)/3
print("%.3f"%result)
E:
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:
import math
r = float(input())
pi = 3.14159
area = pi * r * r
print("%.4f"%area)
G:
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:
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:
pi = 3.14159
r = float(input())
v = (4/3)*pi*r**3
print("VOLUME =", "%.3f"%v)
J:
l = int(input())
time = int((l/30)*60)
print(time, "minutos")
K:
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:
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日随堂练习
A:
n = int(input())
if n%2 == 0:
print("EVEN")
else:
print("ODD")
B:
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:
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:
似乎是想用逻辑运算,但是直接被我排序了
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:
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:
a, b = map(int, input().split())
if a%b==0 or b%a==0:
print("Sao Multiplos")
else:
print("Nao sao Multiplos")
G:
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:
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:
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:
# @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:
R, r = map(int, input().split())
if R-r >= 4 * r:
print("Yes")
else:
print("No")
先手的人只要第一次把硬币放在桌子正中央,然后后手放在哪,先手放在它对角线的地方就是必胜的。
因此在这里只需要考虑桌子比硬币小的情况。想了半天,有点神金。
X月X日随堂练习
A:
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:
n = int(input())
while n:
digit = n % 10
n = n//10
print(digit,end=' ')
C:
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:
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:
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:
翻译一下题目:
现在有方程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:
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:
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:
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:
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:
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日随堂测试
A:
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:
# @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:
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日随堂练习:
着急去和男朋友约会,先更一点一会继续。今天题挺好的,有什么想问的可以留言。
A:
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:
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:
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:
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:
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:
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:
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:
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:
# @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:
第一遍用二分查找反正没过,换了这个方法之后过了
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:
此题需要先跑出一个表然后直接查找值,这样可以让循环次数少一点。否则会超时
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:
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日随堂测试
应群内助教要求不放出此次题目和答案。大家懂的都懂。如果需要答案的话可以私信我。