文件目录
7-34 通讯录的录入与显示~10
通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。
本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。
输入格式:
输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。
在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。
输出格式:
对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。
输入样例:
3
Chris 1984/03/10 F +86181779452 13707010007
LaoLao 1967/11/30 F 057187951100 +8618618623333
QiaoLin 1980/01/01 M 84172333 10086
2 1 7
输出样例:
LaoLao 057187951100 +8618618623333 F 1967/11/30
Not Found
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
`代码如下:
n = eval(input()) # 将输入的值去掉字符
le = []
a = []
for i in range(n):
t = input().split()
le.append(t)
for le1 in le:
tmp = le1[1] # 存储一个值,便于交换后面的变量
le1[1] = le1[3]
le1[3] = le1[2]
le1[2] = le1[4]
le1[4] = tmp
# print(le1)
sy = tuple(map(eval, input().split()))
for i in range(sy[0]):
d = sy[i+1]
# print(d)
if 0 <= d < n:
a = le[d]
# print(a)
print(a[0], a[1], a[2], a[3], a[4])
else:
print("Not Found")
说实话,这个题虽然只是十分题,但他里面的测试题确实让人捉摸不透,本人硬是做了很久才做的完全正确。。。
7-33 有理数加法~15
本题要求编写程序,计算两个有理数的和。
输入格式:
输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。
输出格式:
在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。
输入样例1:
1/3 1/6
输出样例1:
1/2
输入样例2:
4/3 2/3
输出样例2:
2
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
·代码如下:
方法一:
from fractions import Fraction # 引入分数库
a, b = map(Fraction, input().split()) # 强制转化为分数(这里是自己的想法,没想到测试还是对的)
print(a+b)
兴许下面这种写法还规范点吧:
from fractions import Fraction
a, b = input().split()
xj = Fraction(a)+Fraction(b) # 转换为分数相加
print(xj) # 输出结果
方法二:
将所加所有分子、分母拆开,这种方面还得考虑全面,可注意细节!!!
s, q = input().split()
a, b = s.split("/") # split('/')表示a, b以/隔开
c, d = q.split("/")
a, b, c, d = int(a), int(b), int(c), int(d)
if b == d:
a += c
else:
k = b
b *= d
a = a * d + c * k
for i in range(2, a):
while a%i == 0 and b%i == 0:
a //= i
b //= i
if b == 1:
s = a
else:
s = str(a)+"/"+str(b)
print(s)
7-32 说反话-加强版~~20
给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。
输入格式:
测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。
输出格式:
每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。
输入样例:
Hello World Here I Come
输出样例:
Come I Here World Hello
感谢杭州电子科技大学李卫明老师修正数据! 感谢浙江工业大学之江学院石洗凡老师修正测试点提示。
代码长度限制
16 KB
时间限制
300 ms
内存限制
64 MB
·代码如下:
方法一:
s = input().split() # 输入字符以空格隔开
s = s[::-1] # 列表反转
print(*s) # *去掉外围的括号以及字符,得出题目结果
也可以这样写,
s = input().split()
s.reverse() # 列表翻转
print(*s)
方法二:
try: # 异常处理
s = list(input().split())
for i in s[:-len(s):-1]: # 从后往前遍历
print(i+" ", end='') # 将它们从后两个两个的连在一起
print(s[0]) # 打印出反转后的结果
except IndexError: # -索引错误
exit(0) # 退出进程
————————————————————————————————
俄罗斯套娃素数~python趣编程
题目描述:
测试100~1000之间有几个俄罗斯套娃素数,他们分别是?
代码如下:
import math # 引入数学库
def isPrime(n): # 素数验证
if n == 1:
return False
n_sqrt = int(math.sqrt(n) + 1)
for i in range(2, n_sqrt):
if n % i == 0:
return False
return True
def isTaowaPrimes(n): # 俄罗斯套娃素数验证
# le = len(str(n))
# while le>0:
while n > 0: # 效率更高
if not isPrime(n):
return False
n //= 10
# le -= 1
return True
lst = []
for i in range(100, 1000): # 控制位数为3位数
if isTaowaPrimes(i):
lst.append(i) # 将符合套娃素数的数放入空列表lst中
print("100~1000之间有{}个俄罗斯套娃素数".format(len(lst)))
print(lst) # 总共有几个俄罗斯套娃素数(100~1000)
—————————————————————————————————
每日一言:
> 所有烦恼与不满全部来自你的内心,只有你的心平静下来,才能改变这一切。
python函数练习:持续更新中…
简单型~1-100求和:
n = 100
sum1 = 0
counter = 0
while counter <= n:
sum1 += counter
counter += 1
print("1到%d的和为:%d" % (n, sum1))