某农业学校python(二)

1. 根据用户输入的日期计算天数

【问题描述】

  编写函数isLeap(year)用于判断year是否是闰年,若是闰年则返回True,否则返回False。

  编写函数days(year,month)用于计算year所在的month的天数,days(year,month)函数需要调用isLeap()函数以帮助判断2月份的天数(year若不是闰年,返回28,否则返回29) 要求程序能根据用户输入的日期,计算该日期是这一年的第几天。

【输入形式】

  输入某个日期(格式为year/month/day)
【输出形式】

  该日期是一年的第几天
【样例输入】

  2019/3/18
【样例输出】

  77

def days(year,month,day):                                 
    if year %4 ==0 and year %100 ==0 or year %400 ==0:      
        day_second = 29
    else:
       day_second =28
    days_month=(31,day_second,31,30,31,30,31,31,30,31,30,31)
    total_days=0
    total_days+=sum(days_month[:month - 1])                            
    total_days += day
 
    print('这是一年的第',total_days,'天')
 
year=  int(input('请输入年'))                               
month= int(input('请输入月'))
day=   int(input('请输入日'))
days(year,month,day)

2. 提取电话号码

【问题描述】

假设电话号码的模式为:3个数字,一个短横线,4个数字,一个短横线和4个数字。如:186-7123-4567

编写isPhoneNum()函数,用以检查字符串是否匹配电话号码模式,若匹配返回True,否则返回False

程序的功能是从一段文本中提取电话号码。部分代码如下:

message='Call me at 186-7123-4567 tomorrow. 027-8728-1235 is my office. '

for i in range(len(message)):

    chunk=message[i:i+13]

    if isPhoneNum(chunk):

        print('Phone number found: ' +chunk)

print('Done')


【输入形式】

  无
【输出形式】

  电话号码

【样例输入】

 无

【样例输出】

Phone number found: 186-7123-4567

Phone number found: 027-8728-1235

Done

def isPhoneNum(chunk):
    a1 = chunk[0:3]
    a2 = chunk[3:4]
    a3 = chunk[4:8]
    a4 = chunk[8:9]
    a5 = chunk[9:13]
    if a1.isdigit() and a3.isdigit() and a5.isdigit() and a2=='-' and a4 == '-':
        return True
    else:
        return False


message='Call me at 186-7123-4567 tomorrow. 027-8728-1235 is my office. '
for i in range(1,len(message)):
    chunk = message[i:i + 13]
    if isPhoneNum(chunk):
        print('Phone number found: ' + chunk)
print("Done")
3. 位置码加密

【问题描述】

导入随机数库产生随机数时设置固定seed(10)。

为给定的字符串原码用随机产生位置码的方式进行加密。例如原码:010512,则位置码为由1-6这6个数字随机产生的数字序列:362415,位置码的生成取决于原码的长度L,每一位都不重复。根据位置码调整原码的顺序得到加密结果:021501,将原码的第3位0放到加密后的第1位,将原码的第6位2放到加密后的第2位,以此类推。

提示注意:对于样例打乱原码位置码123456时如果使用random库中的sample,choice等方法时需要用reverse方法对列表逆序才能和结果一致,用shuffle就不用逆序。

【样例输入】

010512

【样例输出】

362415

021501

【样例说明】

输入一个长度小于10的字符串,根据原码字符串s编写函数posCode(s)产生对应长度的位置码,并作为返回值返回。

根据原码字符串s和位置码posCode编写函数changeCode(s,posCode函数的返回值)实现原码根据位置码转换成加密后的字符串,并作为返回值返回

import random
random.seed(10)

def posCode(lenn):
    list1 = [i for i in range(1, lenn + 1)]
    random.shuffle(list1)
    return list1

a = input()
len1 = posCode(len(a))
str1 = ''
for i in len1:
    str1 += str(i)
print(str1)
list2 = [i for i in len1]
temp = ''
for i in list2:
    temp += str(a[i-1])
print(temp)
4. 循环和函数_亲密数

【问题描述】

 求整数n以内(含n)的全部亲密数。

说明:如果正整数A的全部因子(包括1,不包括A本身)之和等于B;且正整数B的全部因子(包括1,不包括B本身)之和等于A,A不等于B,则将正整数A和B称为亲密数。

1不和其他数形成亲密数。

编写函数sumElem(),实现统计一个数字的因子之和(包括1,不包括A本身)

【输入形式】

输入整数n
【输出形式】

 每一行输出一对亲密数,中间用一个空格隔开。

 每一对亲密数只输出一次,小的在前。

 各对亲密数按序排序,按亲密数中小的那个数从小到大排序。

【样例输入】

3000

【样例输出】

220 284

1184 1210

2620 2924

def sumElem(x):
    temp = 0
    for i in range(1, x):
        if x % i == 0:
            temp = temp + i
    return temp

x = int(input())
for a in range(2, x+1):
    b = sumElem(a)
    c = sumElem(b)
    if c == a and a != b:
        if a > b:
            a, b = b, a
            print(a, b)

5. 统计一共出现了多少个3

【问题描述】输入任意一个正整数,从1开始到这个数字的奇数序列里,统计一共出现了多少个3。

编写函数sumThree(),实现功能是,输入一个正整数,返回该数中3出现的个数。

【输入形式】
【输出形式】
【样例输入】

number:25
【样例输出】

3

def sumThree(num):
    cout = 0
    for i in range(1,int(num+1)):
        if i%2 != 0:
            cout += str(i).count("3")
    return cout

num = int(input('number:'))
sum = sumThree(num)
print(sum)
6. 征友

【问题描述】土生土长的北京妞儿,在胡同里长大房不多,就一个四合院和近郊的别墅。不算美如天仙但还算标致,在清华读的经管,现在在做基金经理,个人擅长基本面分析,价值投资。现在只想找个聪明靠谱的IT男。硬性要求是出生年龄不要超过1990年,我对智商的要求比较高,下面就出个题测试下。我的微信ID是大写字母JH后面跟着两个质数,大的在前,小的在后,乘积是707829217,可直接搜索加微信,请输出该微信号!

自定义函数sushu()判断一个整数是否是素数,来帮助完成该题目。

【输入形式】一个给定的数字

【输出形式】符合要求的微信号,如果给定的数字无法变成2个素数之积,则输出error
【样例输入】

707829217

【样例输出】

JH866278171

【样例输入】

32

【样例输出】

error

def sushu(i):
    for temp in range(2,i):
        if i%temp == 0:
            return False
    return True

n = eval(input())
for i in range(2, n):
    if n%i==0 and sushu(i):
        if sushu(n//i):
            result = "JH" + str(n//i) + str(i)
            print(result)
            break
else:
    print("error")
7. 判断列表是否存在重复元素

【问题描述】

  编写一个函数isRepeated(v),用于判断一个列表中的元素是否存在重复,若有重复则返回True,  否则返回False

  部分程序代码如下:

  list1=eval(input())

  print(isRepeated(list1))

【输入形式】

列表
【输出形式】

True或False
【样例输入】

[1,2,5,2,3]
【样例输出】

True

def isRepeated(a):
    temp = set(a)
    if len(temp) == len(a):
        return False
    return True

list1 = eval(input())
list2 = list1[1::2]
print(list2)
list3 = [i for i in list1]
print(list3)
print(isRepeated(list3))

如有不足之处,欢迎大家留言! 

你可能感兴趣的:(python)