【基础编程部分题目集】


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))

上一页:python练习题

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值