python程序设计——练习8

1.计算n!

从键盘输入一个正整数n,输出n!的值。
输入样例1:

3

输出样例1:

3! = 6

代码:

def dfs(n):
    if n == 1:
        return 1
    return n * dfs(n-1)
n = int(input())
print('%d! = %d' % (n, dfs(n)))

2.寻找不一样的约数

【题目描述】
输入两个数n与m,寻找n和m之间不同的约数,并按不同约数的大小从大到小进行排序输出。
例如8的约数有1,2,4,8。9的约数有1,3,9,所以不同的约数是2、3、4、8、9。
【输入描述】
两个正整数n和m,中间以空格隔开。
【输出描述】
输出不同的约数,数据间以逗号进行分隔。,若没有不同约数,则输出“not found”。
【输入样例1】

8 9

【输出样例1】

2,3,4,8,9

【输入样例2】

4 16

【输出样例2】

8,16

【输入样例3】

5 5

【输出样例3】

not found

代码:

n, m = map(int,input().split())
ans = []
for i in range(1, max(n,m) + 1):
    if n % i == 0 and m % i or n % i and m % i == 0:
        ans.append(i)
ans.sort()
if len(ans) == 0:
    print('not found')
else:
    for i in range(len(ans)):
        if not i:
            print(ans[i], end = '')
        else:
            print(',%d' % ans[i], end = '')

3.列表下标转换

【题目描述】
从键盘输入一个字符串,保证字符串中的元素仅由英文单词构成(单词之间用英文逗号隔开)。请你先对字符串中的元素进行排序(仅排序,不要改变原本的字符串),然后将字符串中的每个元素替换为它们排序后的序号。请将替换后的字符串以列表的形式输出。
【详细解释】序号代表了一个元素有多大。序号编号的规则如下:
1、序号从 1 开始编号;
2、一个元素越大,那么序号越大;
3、果两个元素相等,那么它们的序号相同;
4、英文字母按照首字母的大小进行排序,如果首字母相同,则按第二个字母进行排序,依次类推;
【输入描述】
一行英文单词,单词之间用逗号隔开。
【输出描述】
一个列表。
【输入样例1】

a,a,a

【输出样例1】

[1,1,1]

【输入样例2】

a,a,h,b,c,e,d,f,ab,dd,c,f

【输出样例2】

[1,1,9,3,4,7,5,8,2,6,4,8]

代码:

s = input().split(',')
a = s[::]
a.sort()
ans, id, cnt = [], {}, 1
for i in range(len(a)):
    if not i or a[i] == a[i - 1]:
        id[a[i]] = cnt
    else:
        cnt += 1
        id[a[i]] = cnt
for i in range(len(s)):
    if s[i] != ',':
        ans.append(id[s[i]])
print('[%d' % ans[0], end = '')
for i in range(1,len(ans)):
    print(',%d' % ans[i], end = '')
print(']')

4.寻找最佳组合

Description【题目描述】
输入一个正整数n,以及n个元素,寻求这些元素中能由1-3个元素相加等于9的组合。
Input【输入要求】
一个正整数n,以及n个元素,用逗号隔开。
Output【输出要求】
一个列表,包含0或多个组合,每个组合最多有3个元素,【注】:若当前元素值为9,则不参与其他与0排列的组合,最终按组合元素的长度排序输出,若长度一样,按原始列表出现位置排序,详见样例2,列表中有9有0,因为9已经添加到新列表中,所以不再考虑其他和0的任何组合。
Sample Input 1

6
3,6,10,14,2,7

Sample Output 1

[[3, 6], [2, 7]]

Sample Input 2

9
9,0,2,2,4,7,6,9,2

Sample Output 2

[[9], [9], [2, 7], [2, 7], [7, 2], [0, 2, 7], [0, 2, 7], [0, 7, 2]]

Sample Input 3

9
9,0,2,2,3,7,6,9,9

Sample Output 3

[[9], [9], [9], [2, 7], [2, 7], [3, 6], [0, 2, 7], [0, 2, 7], [0, 3,
6]]

代码:

n = int(input())
a = list(map(int, input().split(',')))
ans = []
for i in range(len(a)):
    if a[i] == 9:
        ans.append([9])
    else:
        for j in range(i+1, len(a)):
            if a[i] + a[j] == 9 and a[i] and a[j]:
                ans.append([a[i], a[j]])
            else:
                for k in range(j+1, len(a)):
                    if a[i] + a[j] + a[k] == 9:
                        ans.append([a[i], a[j], a[k]])
ans=sorted(ans,key=lambda x:len(x))
print(ans)

5.循环数数

Description
数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意正整数n以内一共有多少个这样的循环素数。
Input
共一行,为一个正整数n。
Output
n以内循环素数的值。
Sample Input 1

100

Sample Output 1

13

代码:

def check(x):
    if x == 2:
        return True
    for i in range(2,x):
        if x % i == 0:
            return False
    return True
n = int(input())
ans = 0
for i in range(2,n + 1):
    f = True
    if check(i):
        s = str(i)
        for j in range(1,len(s)):
            a = s[j:] + s[:j]
            if not check(int(a)):
                f = False
                break
    else:
        f = False
    if f:
        ans += 1
print(ans)

6.列表排列

【题目描述】
给定一个由数字组成的列表sList,编写程序将所有 0 移动到列表的末尾,同时保持非零元素的相对顺序。
【输入描述】
共一行,元素以英文逗号隔开。
【输出描述】
共一行,为重新排列好的列表。
【输入样例1】

1,3,4,1.2,0,0,0.0,2,3,5.6

【输出样例1】

[1, 3, 4, 1.2, 2, 3, 5.6, 0, 0, 0.0]

代码:

a = list(map(eval, input().split(',')))
b = []
for i in a:
    if i:
        b.append(i)
for i in a:
    if not i:
        b.append(i)
print(b)

7.寻找十全十美数

Description【题目描述】
如果一个n位数刚好包含了1至n中所有数字各一次则称它们是十全十美数。举例来说:四位数4123就是一个十全十美数。若找不到则输出“not found”。
Input【输入要求】
从键盘上输入一组整数,若有多个数以,隔开。
Output【输出要求】
若找不到则输出“not found”,若找到了则依次输出,每个数字占一行。
Sample Input 1

1243,322,321,1212,2354

Sample Output 1

1243
321

Sample Input 2

1212,2354

Sample Output 2

not found

代码:

def check(x):
    cnt = dict.fromkeys([chr(49+i) for i in range(len(x))], 0)
    for i in x:
        if i in cnt.keys() and not cnt[i]:
            cnt[i] += 1
        else:
            return False
    return True
a = list(input().split(','))
f = False
for i in a:
    if check(i):
        f = True
        print(i)
if not f:
    print('not found')

8.打印空心三角形

Description
输入任意一个大于零的整数N,根据输入的整数不同打印出不同行数的空心三角形。
Input
一个大于0的整数。
Output
一个空心三角形。
Sample Input 1

6

Sample Output 1

*
**
* *
*  *
*   *
******

代码:

n = int(input())
for i in range(1,n):
    for j in range(0,i):
        if j==i-1:
            print('*')
        elif j==0:
            print('*', end='')
        else:
            print(' ', end='')
for i in range(n):
    print('*', end='')

9.0的组合

Description【题目描述】
给定一个包含若干个整数(可能存在重复整数)的列表,判断其中是否存在三个元素a,b,c,使得a+b+c=0?找出所有满足条件且不重复的这样的三个数的组合。【注意点】
1、所给的数字是可以重复的,所给数字为1,1,-2,0,0,0;
2、组合是不可以重复的,即[1,-1,2]和[2,-1,1],算是重复的,应该删除;
3、可以借助集合去除重复
Input【输入要求】
共一行,元素以空格隔开。
Output【输出要求】
共一行,为不重复组合的个数,不存在这样的组合就输出0。
Sample Input 1

-1 0 1 2 -1

Sample Output 1

2

Sample Input 2

8 6 7 9 8

Sample Output 2

0

代码:

a = list(map(int,input().split()))
a.sort()
ans = []
for i in range(len(a)):
    for j in range(i+1,len(a)):
        for k in range(j+1,len(a)):
            if a[i] + a[j] +a[k] == 0:
                ans.append([a[i],a[j],a[k]])
print(len(set(ans)))

10.水仙花数

题目内容:
编写程序实现以下功能:计算m到n之间的所有水仙花数并输出(水仙花数是一个三位整数,其值与各位数字的立方和相等)。
输入格式:
输入两个三位整数beg和end。
输出格式:
如果beg到end之间存在水仙花数,则每行输出一个水仙花数。如果beg到end之间不存在水仙花数,则输出“not found”。
输入样例:

111
121

输出样例:

not found

代码:

def check(x):
    res = 0
    for i in str(x):
        res += int(i)**3
    if res == x:
        return True
    return False
a, b = int(input()), int(input())
f = True
for i in range(a,1+b):
    if check(i):
        f = False
        print(i)
if f:
    print('not found')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值