5个Python小练习

1.卡片

k种卡片,有n个同学,每位同学发两张,可以同一种,可能不同,两张卡片没有顺序,没有两个同学是一样的,给定n,请问卡片有多少种?

n=int(input())
k=1
while k*(k+1)<2*n:
    k+=1
print(k)

例:

n=2

2

2.排列组合

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

count = 0
print("1、2、3、4可以组成的无重复三位数有:")
for x in range(1,5):
    for y in range(1,5):
        for z in range (1,5):
            if(x!=y)and(x!=z)and(y!=z):
                print(x,y,z)
                count+=1
print("一共%d个数字。"%count)


1、2、3、4可以组成的无重复三位数有:
1 2 3
1 2 4
1 3 2
1 3 4
1 4 2
1 4 3
2 1 3
2 1 4
2 3 1
2 3 4
2 4 1
2 4 3
3 1 2
3 1 4
3 2 1
3 2 4
3 4 1
3 4 2
4 1 2
4 1 3
4 2 1
4 2 3
4 3 1
4 3 2
一共24个数字。

3.求符合要求的完全平方数

一个整数,它加上100和加上268后都是一个完全平方数,请问该数是多少?

import math
for x in range(10000):
    a=int(math.sqrt(x + 100))
    b=int(math.sqrt(x+268))
    if (a*a==x+100) and (b*b==x+268):
        print(x)

21
261
1581

4.判断该日期为当年第几天

输入某年某月某日,判断这一天是这一年的第几天?

# 提示用户输入日期  
print("请输入日期:")  
  
# 获取用户输入的年份,并转换为整数  
x = int(input("年:"))  
  
# 获取用户输入的月份,并转换为整数  
y = int(input("月:"))  
  
# 获取用户输入的日期,并转换为整数  
z = int(input("日:"))  
  
# 定义一个列表,表示平年每个月的天数  
list = [31,28,31,30,31,30,31,31,30,31,30,31]  
  
# 计算到指定月份为止的天数总和(不包括当前月份的天数)  
# 注意:这里的list[0:(y-1)]切片操作实际上没有考虑到年份是否闰年  
# 因此,如果是闰年且月份大于等于3,这里的计算就会出错  
days = sum(list[0:(y-1)]) + z  
  
# 判断年份是否是闰年  
# 这里使用x / 4 == 0作为判断依据是错误的  
# 因为这样会判断任何能被4整除的年份都是闰年  
# 正确的闰年判断方法是:(x % 4 == 0 and x % 100 != 0) or (x % 400 == 0)  
if x / 4 == 0:  
    # 如果是闰年,将天数加1(因为闰年2月有29天)  
    # 但这里逻辑有误,应该判断是否是闰年且月份大于2  
    print("这一天是这一年的第%d天。" % (days + 1))  
else:  
    # 如果不是闰年,直接输出天数  
    print("这一天是这一年的第%d天。" % (days))
print("请输入日期:")
x = int(input("年:"))
y = int(input("月:"))
z = int(input("日:"))
list = [31,28,31,30,31,30,31,31,30,31,30,31]
days = sum(list[0:(y-1)])+ z
if x / 4 ==0:
	print("这一天是这一年的第%d天。"%(days+1))
else:
	print("这一天是这一年的第%d天。"%(days))

5.斐波那契数列

斐波那契数列(Fibnonacci sequence),又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34......。

fib=[0,1]
i=int(input("您希望输出第几个斐波那契数?"))
if i >2:
    for j in range(0,i):
        fib.append(fib[-1]+fib[-2])
else:pass
print("第%d个斐波那契数是%d."%(i,fib[i-1]))
# 初始化一个包含斐波那契数列前两项的列表  
fib = [0, 1]  
  
# 获取用户输入,并转换为整数,询问用户希望输出第几个斐波那契数  
i = int(input("您希望输出第几个斐波那契数?"))  
  
# 判断用户输入的数字是否大于2  
if i > 2:  
    # 如果大于2,则通过循环计算斐波那契数列中剩余的数字  
    for j in range(0, i):  
        # 在列表末尾添加新的斐波那契数(最后两项之和)  
        fib.append(fib[-1] + fib[-2])  
else:  
    # 如果用户输入的数字不大于2,则不需要执行任何操作(这里使用了pass语句,它是一个占位符,表示什么都不做)  
    pass  
  
# 输出第i个斐波那契数  
# 注意:列表的索引是从0开始的,所以第i个斐波那契数实际上是列表中的第i-1个元素  
print("第%d个斐波那契数是%d." % (i, fib[i-1]))

您希望输出第几个斐波那契数?10
第10个斐波那契数是34.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值