Python基础练习题

1 求复合条件整数集

给定不大于5的正整数n,考虑由n开始的连续5个数字,输出所有由他们组成的无重复数字的3位数
输入样例:
5
输出样例:
567 568 569 576 578 579
586 587 589 596 597 598
657 658 659 675 678 679
685 687 689 695 697 698
756 758 759 765 768 769
785 786 789 795 796 798
856 857 859 865 867 869
875 876 879 895 896 897
956 957 958 965 967 968
975 976 978 985 986 987

解题思路:
i,j,k分别表示3位数的百位,十位和个位;
i,j,k依次轮询n~n+5,当i,j,k都不相等时打印出此3位数;
inc控制换行,inc == 5时换行并复位,实现一行显示6个数字。
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def main():
    n = 5
    spans = 5       #n开始连续spans个数字
    inc = 0         #控制何时换行
    max_inc = 6     #控制每行显示的数字数量
    for i in range(n, n + spans):
        for j in range(n, n + spans):
            for k in range(n, n + spans):
                if i != j and i != k and j != k:
                    if inc == max_inc - 1:
                        print("%s%s%s" %(i, j, k))
                        inc = 0
                    else:
                        print("%s%s%s" %(i, j, k), end=" ")     #python3的print支持使用end定>义结束符,python2可以使用’print(str(i) + " "),‘的形式替代,注意后面的,
                        inc += 1


if __name__ == "__main__":
    main()

2 水仙花数

水仙花数是指一个N位正整数(N>=3),他的每个位上的数字的N次幂之和等于它本身。例如:153 = 13 + 53 + 33。请计算所有N位水仙花数。
输入样例:
3
输出样例:
153
370
371
407

参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def main():
    n = 3
    first = 10 ** (n - 1)
    end = 10 ** n
    for narcissus in range(first, end):
        narcissus_sum = 0
        narcissus_list = list(str(narcissus))
        units = int(narcissus_list[0])
        tens = int(narcissus_list[1])
        hundreds = int(narcissus_list[2])
        narcissus_sum = units ** n + tens ** n + hundreds ** n
        if narcissus == narcissus_sum:
            print(narcissus)
    return 0

if __name__ == "__main__":
    main()

3 打印九九口诀表

本题要求对任意给定的正整数N,输出由11到NN的部分口诀表。
输入样例:
5
输出样例:
输出下三角N*N部分口诀表,要求左对齐。
在这里插入图片描述
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import sys

def main(n):
    for row in range(1, n + 1):
        for column in range(1, row + 1):
            if column == row:
                print("%s*%s=%s" % (column, row, row*column))
            else:
                print("%s*%s=%s" % (column, row, row*column), end="\t")
    return 0

if __name__ == "__main__":
    N = int(sys.argv[1])
    main(N)

4 统计素数的个数并求和

统计给定整数M和N区间内素数的个数并对他们求和。
输入样例:
1 10
输出样例:
4 17
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def main():
    m,n = 1,10
    count = 0
    mn_sum = 0
    for i in range(m, n+1):
        if i == 1:
            continue
        isPrime = True
        for j in range(2, int(i/2 + 1)):
            if i % j == 0:     #i除以2~i/2直接的数可以整除就说明i是非素数
                isPrime = False
                break
        if isPrime:
            mn_sum += i
            count += 1
    print(count, mn_sum)
    return 0

if __name__ == "__main__":
    main()

5 猜数字游戏

系统随机产生一个100以内的正整数,用户输入一个数对其进行猜测,需要编写程序自动对其进行比较,并提示大了(too big),或者小了(too small),相等表示猜到了。如果猜到,则结束程序。程序还需要统计猜的次数,1次猜中提示“perfect!”,3次以内猜中提示“good!”,次数大于3小于N(N>3)提示“not bad”;超过N次没有猜到提示“Game Over”,并结束程序。如果输入负数也会提示“Game Over”结束程序。
输入格式:
输入的第一行给出不超过100的正整数,分别表示用户第一个猜测的数字、以及猜测的最大次数N。随后每行给出一个数字直到游戏结束。(为方便调试程序可以打印出系统随机生成的数值)
输出格式:
在每行中输出每次猜测的结果直到游戏结束。
样例:
在这里插入图片描述
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import random

def main():
    max_num = 100
    randnum = random.randint(0, max_num)
    print("已成功生成%s以内随机整数。" % max_num)
    #print(randnum)
    count = 0
    n = 7
    while True:
        count += 1
        guess = int(input("请输入答案:"))
        if guess < 0 or count > n:
            print("Game Over!!!")
            break
        elif guess > randnum:
            print("too big!")
        elif guess < randnum:
            print("too small!")
        else:
            if count == 1:
                print("perfect job!!!")
            elif count <= 3:
                print("good job!!")
            else:
                print("not bad!")
            break

    return 0

if __name__ == "__main__":
    main()

6 求数列的前N项和

计算2/1+3/2+5/3+8/8+…的前N项之和,注:由第2项起,每一项的分子是前一项的分子与分母之和,分母是前一项的分子。
输入样例:
20
输出样例:
32.66
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def main():
    n = int(input("请输入数列的项数:"))
    sub = 2        #分子
    mom = 1        #分母
    sum_num = 0
    for i in range(n):
        sum_num += sub / mom
        mom, sub = sub, sub + mom
    print("%.2f" % sum_num)
    return 0

if __name__ == "__main__":
    main()

7 约分最简分式

关键:求分子分母的最大公约数
输入样例:
4/8
输出样例:
1/2
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def main():
    n = input("请输入分数(如4/8):")
    sub = int(n.split('/')[0])        #分子
    mom = int(n.split('/')[1])        #分母
    a,b = sub,mom
    # 辗转相除法求最大公约数
    while b > 0:
        a,b = b,a % b
    print("%d/%d" % (sub/a, mom/a))
    return 0

if __name__ == "__main__":
    main()

8 念数字

数字和拼音对应关系
-:fu
0:ling
1:yi
2:er
3:san
4:si
5:wu
6:liu
7:qi
8:ba
9:jiu
输入样例:
-5201314
输出样例:
在这里插入图片描述
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-

def main():
    num_dict = {'-': 'fu',
                '0':'ling',
                '1': 'yi',
                '2': 'er',
                '3': 'san',
                '4': 'si',
                '5': 'wu',
                '6': 'liu',
                '7': 'qi',
                '8': 'ba',
                '9': 'jiu'}
    n = input("请输入数字:")
    count = 0
    for i in list(n):
        count += 1
        if count < len(list(n)):
            print(num_dict[i], end=" ")
        else:
            print(num_dict[i])
    return 0

if __name__ == "__main__":
    main()

9 洗牌器

输入一个字符串,将字符串里面的字母随机打乱后再输出
输入输出演示:
在这里插入图片描述
参考代码:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import random

def main():
    string_in = input("请输入字符串:")
    string2list = list(string_in)
    random.shuffle(string2list)    #注意没有返回值
    string_out = ''
    string_out = string_out.join(string2list)
    print(string_out)
    return 0

if __name__ == "__main__":
    main()
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值