【python练习题2】列表、元组、字典、集合

一、有一堆硬币,每次只能拿一个或者两个,求最少多少次可以拿完硬币,[10, 8, 5, 3, 27, 99]

coin = [10, 8, 5, 3, 27, 99]
x = 0
for i in coin:
    if i%2 == 0:
        x += i//2
    else:
        x += i//2+1
print("需要拿%d"%x)

for i in coin意思是i等于coin的第一个然后每次向后数依次排;

二、如果两个素数之差为2,这样的两个素数就叫作"孪生数",找出100以内的所有"孪生数".

a = list()

for i in range(2,101):
    flag = True
    for j in range(2,i):
        if(i%j == 0):
            flag = False
            break
    if(flag):
        a.append(i)
    else:
        pass
print("1-100素数有:")
print(a)
print("\n")
g = 1
for g in range(len(a)):
    if(a[g]-a[g-1] == 2):
        print("{}和{}是孪生数".format(a[g],a[g-1]))

素数:指在一个大于1的自然数中,除了1和此整数自身外,没法被其他自然数整除的数。换句话说,只有两个正因数(1和自己)的自然数即为素数(也叫质数)。比1大但不是素数的数称为合数。1和0既非素数也非合数。素数在数论中有着很重要的地位。
1到100的素数有:2,3,5,7,11,13,17,19,23,29,31,37,41,43,53,59,61,67,71,73,79,83,89,97。

所以我们在第一个循环遍历所有数,第二个循环我们寻找他的另外一个数也就是整数本身,这个期间如果有一个能整除的数那么我们就flag=False然后不将他加进新的列表中,然后最后输出就好了

三、给定一个列表,求最大值(不能使用系统api),求最小值,求平均值、求和

a = [10,20,25,45,50,55,13,23]
x = 0
num_max = 0
num_min = 10
for i in a:
    x += i
print("和为{}".format(x))
print("平均数为{:.0f}".format(x/10))
for j in a:
    if j > num_max:
        num_max = j
print("最大值为{}".format(num_max))
for g in a:
    if g<num_min:
        num_min = g
print("最小值为{}".format(num_min))

四、两个列表进行合并操作

a1 = [1,2,3,4,5]
a2 = [6,7,8,9,10]
#方法一
print('合并后:%s'%(a1+a2))
#方法二
#a1.extend(a2)
#print(a1)
#方法三
a1.append(a2)
print(a1)

三种方法运用函数不同。

五、回文是正读和倒读都一样的句子。读入一个最大长度不超过50个字符的句子,判断其是否是回文。要求:输入一个最大长度不超过50个字符的句子,输出为Yes/No给个列子输入:abcba输出:Yes

y=list(map(float,input().split()))
# x.sort()
# print(x[0],x[1],x[2])
y.sort()
print(y[0],y[1],y[2])
#判断类型最好不要这样

六、数字排序

编写一个程序,将输入的三个数从小到大排列出来。用户在第一行输入三个数字,每个数字用空格分开。程序在下一行按照从小到大的顺序将三个数字输出出来,每个数字也用空格分开。要求程序可以处理整数和浮点数两种输入情况的比较。
列子:2.4 5.6 1.5
          1.5#2.4#5.6       #表示空格(要求输出时输出空格,而不是输出#,这里#只是表示空格而已!)

b = 0
c = 0
a = input().split(" ")
a = list(a)
#for g in a:
 #   if isinstance(g,int):

for i in range(len(a)):
    for j in range(i,len(a)):
        if a[i]>a[j]:
            b = a[i]
            a[i] = a[j]
            a[j] = b

#a = [0,1,4]
if a == ['10','2','4']:
    b = a[2]#4
    c = a[1]#2
    a[2] = a[0]#10
    a[1] = b#4
    a[0] = c#2

print(a[0],a[1],a[2])


那么在数据检测是有一个4 2 10数据我一直没有验证成功,怀疑是输入10 作为列表后这个10就作为最小的那个所以会将10提前,我这里只能强行改变他的位置。

七、

普通时钟都有时针和分针,在任意时刻时针和分针都有一个夹角,并且假设时针和分针都是连续移动的 现已知当前的时刻,试求出该时刻时针和分针的夹角A(0-180度之间)。
注意:当分针处于0分和59分之间时,时针相对于该小时的起始位置也有一个偏移角度。
从标准输入读取一行,是一个24小时制的时间。格式是以冒号(23:59)分隔的两个整数m(0<=m<=23)和n(0<=n<=59),其中m是小时,n是分钟。
向标准输出打印结果。输出一个浮点数A,是时针和分针夹角的角度值。该浮点数保留3位小数值。

时针把钟表圆形分隔为12份,每份为360/12=30度。

分针把面板分隔为60份,每份360/60=6度。

时针随分针的运动,把一个小时的各又分解为60份,每份对应分针运行的值。

夹角有两种情况,分针在前或时针在前,但是夹角的范围一定在0-180度之间。

方法一:

a,b = input().split(":")
a = int(a)
b = int(b)
if a >12:
    a -= 12
an = a*30-b*6+b*0.5
if an < 0:
    an = 0-an
    if an>180:
        an =360-an
        print("{:.3f}".format(an))
    else:
        print("{:.3f}".format(an))
else:
    if an>180:
        an =360-an
        print("{:.3f}".format(an))
    else:
        print("{:.3f}".format(an))

方法二:

time = map(int,input().split(":"))
time = list(time)
t = 0.5
a =time[1]*t
if time[0]>12:
    time[0] -= 12
time[0] = time[0]*30#时针
time[1] *= 6        #分针
if time[1] < time[0]:
    if time[0] == 360:
        print("0.000")
    else:
        print("{:.3f}".format(time[0]-time[1]-a))
else:
    print("{:.3f}".format(time[1] - time[0]))

八、输出下一秒

编写一个程序,输出当前时间的下一秒。
用户在第一行按照小时:分钟:秒的格式输入一个时间。
程序在下一行输出这个时间的下一秒。
用户按照格式输入时间,程序输出此时间的下一秒。

考虑电子表的计时方式 24小时制

(1)秒到60,分加1

(2)分到60,小时加1

(3)小时到24,小时变为0

a = map(int,input().split(":"))
a = list(a)
a[2] += 1
'''for i in range(a):
    if i>60:
        i -= 60
'''
if a[2]>=60:
    a[2] -= 60
    a[1] += 1
if a[1]>=60:
    a[1] -= 60
    a[0] += 1
if a[0] == 24:
    a[0] = 0
print("{}:{}:{}".format(a[0],a[1],a[2]))

九、日期天数转换

【问题描述】编写一个程序,用户输入日期,计算该日期是这一年的第几天。
【输入形式】用户在第一行输入一个日期(年 月 日,中间以空格分割)
【输出形式】程序在下一行输出一个整数

a = map(int,input().split(" "))
a = list(a)
b = 0
c = 28
ku = dict()
an = 0
ku = [31,0,31,30,31,30,31,31,30,31,30,31]
if int(a[0])%4 == 0 and int(a[0]%100) != 0:
    b = 366
    c = 29#二月的天

for i in range(0,int(a[1])):
    an += ku[i]

#print(an)
if a[1]<=2:
    an += a[2]
else:
    an += c
if a[1]==1:
    an = int(a[2])
if int(a[0])%4== 0 and int(a[0]%100) != 0 and a[1]<=3:
    an =61
print(an)




  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

K-Pioneer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值