所谓完数就是该数恰好等于除自身外的因子之和。例如: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
字典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")
第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
本周完成情况: