2021-04-19

所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

输入格式:

输入在一行中给出2个正整数m和n(1<m≤n≤10000),中间以空格分隔。

输出格式:

逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

输入样例:

2 30

输出样例:

6 = 1 + 2 + 3
28 = 1 + 2 + 4 + 7 + 14
import math
flag = 0
n,m = input().split()
n = int(n)
m = int(m)
a = []
for i in range(n,m+1):
    a.append(1)
    for b in range(2,int(math.sqrt(i)+1)):
        if i % b == 0:
            j = i//b
            a.append(b)
            if j != b:
                a.append(j)
    if sum(a) == i:
        print("%d = "%i,end="")
        a.sort()
        print(" + ".join('%s' %x for x in a))
        flag = 1
    a = []
if flag == 0:
    print("None")

 由这道题知道sqrt函数为开平方根,要引入import math,其库里面还有一个sum函数,sum(a)意思为将a的数组里面的数字加起来,比如a = ['1','2','3'],sum(a)=1+2+3=6,然后了解了循环打印的语法,如函数的倒数第五行,

print(" + ".join('%s' %x for x in a))

通过第70题加深了字典的了解,格式为dic = {1:'mon',2:'tue'},记得中间是用逗号隔开!不是用分号然后可以通过dic[1]来访问输出mon

通过第71题了解了eval的用法,下面的网站为eval的详细用法:https://blog.csdn.net/weixin_39678304/article/details/110681800?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161883056416780264088356%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161883056416780264088356&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_click~default-1-110681800.pc_search_result_hbase_insert&utm_term=eval%E5%9C%A8python%E4%B8%AD%E7%9A%84%E6%84%8F%E6%80%9D&spm=1018.2226.3001.4187

字典dic = {'a':1},其中a为key,1为value,即为键值对。

可以用for key,value in dic:来进行遍历循环。

为了更好地了解eval函数,让我们看看如果将表达式用两个字符串括起来,它将如何响应,如下所示:

#string in another string

expr="'2+3'"

print(eval(expr))

print(eval(eval(expr)))

OUTPUT:

2+3

5

因此,第一个eval函数只是返回字符串中的表达式,但是在另一个eval函数中使用eval时,我们得到了表达式的答案。

 

 

四则运算(用字典实现),比较c语言的switch语句。

输入格式:

在一行中输入一个数字 在一行中输入一个四帜运算符(+,-,*,/) 在一行中输入一个数字

输出格式:

在一行中输出运算结果(小数保留2位)

输入样例1:

在这里给出一组输入。例如:

7
/
3

输出样例1:

在这里给出相应的输出。例如:

2.33

输入样例2:

在这里给出一组输入。例如:

10
/
0

输出样例2:

在这里给出相应的输出。例如:

divided by zero

利用字典,我的代码:

dic = {'+':"x+y","-":"x-y","*":"x*y","/":"x/y"}
x = int(input())
s = input()
y = int(input())
if y != 0:
    print("%.2f"%(eval(dic[s])))
else:
    print("divided by zero")

别人的代码:

caldict= {"+":"x+y","-":"x-y","*":"x*y","/":"x/y"}
x,op,y=eval(input()),input(),eval(input())
try:
    print("{:.2f}".format(eval(caldict[op])))
except:
    print("divided by zero")

利用了try和except,巩固了try...except的用法,详细用法如下面网站:https://blog.csdn.net/weixin_39533280/article/details/111459933?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161883299116780262586009%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161883299116780262586009&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-1-111459933.pc_search_result_hbase_insert&utm_term=python%E4%B8%ADtry...except%E7%9A%84%E7%94%A8%E6%B3%95&spm=1018.2226.3001.4187

 

第73题别人的代码:

l = list(map(int, input().split(',')))
print(*[i for i in range(6, 11) if i not in l], sep=' ')

通过以上代码了解了python中*的用法:

在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 *和**,下面分别讲解其作用。

调用函数时使用*和 **
假设有函数
def test(a, b, c)

test(*args):* 的作用其实就是把序列 args 中的每个元素,当作位置参数传进去。比如上面这个代码,如果 args 等于 (1,2,3) ,那么这个代码就等价于 test(1, 2, 3) 。

test(**kwargs):** 的作用则是把字典 kwargs 变成关键字参数传递。比如上面这个代码,如果 kwargs 等于 {‘a’:1,’b’:2,’c’:3} ,那这个代码就等价于 test(a=1,b=2,c=3) 。

定义函数参数时使用*和**

def test(*args):
  定义函数参数时 * 的含义又要有所不同,在这里 *args 表示把传进来的位置参数都装在元组 args 里面。比如说上面这个函数,调用 test(1, 2, 3) 的话, args 的值就是 (1, 2, 3) 。:

def test(**kwargs):
  类似的, ** 就是针对关键字参数和字典的了。 调用 test(a=1,b=2,c=3) 的话, kwargs 的值就是 {‘a’:1,’b’:2,’c’:3} 了。


原文链接:https://blog.csdn.net/yhs_cy/article/details/79438706

 

第75题巩固了字典的用法,代码如下:

n = int(input())
lst = list(map(int,input().split()))
d = {}
for i in range(n):
    if d[lst[i]] not in d:
        d[lst[i]] = 1
    else:
        d[lst[i]] += 1
for k in sorted(d.keys()):
    print("%d:%d"%(k,d[k]))

可以通过dic[key] 来访问value

 

 

本周完成情况:

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值