Hello world Python新手赛题解

Hello world Python新手赛题解

在暑假的辛勤学习之后,小Hi给大家精心准备了一次Python比赛。有正常单一题目,还有特殊的画图与感想题目,这里只给出了普通题目的题解。当然,之前答应大家,教大家如何使用Google,在文章末尾也附上说明,作为福利发放给大家!(有没有很贴心)

Q1水题

题目:输出会长姐姐的洛谷账号名。

解析:这道题目没啥好说的,直接输出就好,名字可以自己敲,也可以复制粘贴。

#注意区分大小写
print('PinnacleYoung')

Q2图形输出

题目:下图所示图形共有九层,请用Python编写程序输出该图形:
在这里插入图片描述
解析:一共有9层,不妨用一个循环输出。在循环内可以直接输出,也可以用一个数组储存起来再输出。
方法一:观察规律。一共九层,第一层一颗星,第二层在第一层的基础上多两个星星。之后每一层都在之前的基础上加两颗。相应的,每层星号两边的空格就各少一个。

for i in range(9):
    j = ' ' * (8 - i)	#空格少一
    k = '*' * (1+i*2)	#星号多两个
    print(j,end = '')	#先输出一个空格,取消换行
    print(k,end = '')	#输出星号
    print(j)	#输出空格

方法二:用center函数

for i in range(9):
    j = '*' * (1+i*2)
    print(j.center(17 , ' '))

Q3小HI的求助

题目:小YI随便说两个数x和y(x>1,y>1),假设x以内的质数之和为a,以及y以内的质数之和为b。要求小HI利用Python设计出这样一个程序,能够直接得出a和b的最大公约数,并且输出。小HI最近因为被佳凝姐姐暴打,智商直线下降,不会做这道题,于是他向聪明的你求助。帮帮他,让他能够成功求婚。

解析:这道题目最好分板块来思考。第一个板块要找这个数之内的质数之和。 第二个板块要找到两个数的最大公约数。

#输入两个数字
x = eval(input())
y = eval(input())
a = 2
b = 2
#1不是质数,从2开始,不包括自己
for i in range(2 , x):
  ii = int(i**0.5)
  for j in range(2 , ii+2):#从2取到自己的根号向上取整
    if (i % j == 0):
      break
  else:   
      a += i
for i in range(2 , y):
  ii = int(i**0.5)
  for j in range(2 , ii+2):
    if (i % j == 0):
      break
  else:   
      b += i
#找到最大公约数      
while(b):
  a,b = b,a%b
print(a)

Q4解密

题目背景
恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
对于原文字符P,其密文字符C满足如下条件:C=(P+3) mod 26‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬
上述是凯撒密码的加密方法,解密方法反之,即:P=(C-3) mod 26

题目描述
假设用户可能使用的输入包含大小写字母a ~ z,A ~ Z、空格和特殊符号。请编写一个程序,对输入字符串进行恺撒密码加密,直接输出结果,其中空格和特殊符号不用进行加密处理。使用input()获得输入。

输入格式
输入为一行,为一个包含大小写字母和空格以及特殊符号的字符串。字符串长度不超过1000。

输出格式
输出为一行,为加密后的字符串。

解析:把每个字符进行判断。然后让它在某个区间内循环。注意ord函数和chr函数的区别。

a = input()
ans = ''

for i in a:
    if 'a' <= i <= 'z':
        ans += chr(ord('a')+(ord(i) - ord('a') + 3) % 26)
    elif 'A' <= i <= 'Z':
        ans += chr(ord('A')+(ord(i) - ord('A') + 3) % 26)
    else:
        ans += i
print(ans)

Q5玫瑰数

题目背景
四位玫瑰数是指四位数的自幂数。
自幂数是指一个n位数,它的每一个位上的数字的n次幂之和等于它本身。
例如:当n=3时,有13+53+33=153,153即是n为3时的一个自幂数,3位数的自幂数称为水仙花数,四位数的称为四位玫瑰数。

题目描述
请按照从小到大顺序输出所有的四位数的为玫瑰数。

题目解析:本题的要点在于如何把数字的每一位提取出来。这里使用的是转换成字符串进行下标提取。也可以用模运算。

for i in range(1000 , 10000):
    num = str(i)
    if eval(num[0]) ** 4 + eval(num[1]) ** 4 + eval(num[2]) ** 4 + eval(num[3]) ** 4 == i:
        print(i)

Q6可可爱爱的小数

题目:题目简单到只需要输入
一个正整数n。然后输入n个数,判断每个数的倒数是不是一个无限小数。(其实就是是否能除尽)。 是的话输出“Yes”,不是的话输出“No”。

解析:一个数的倒数是不是可以被除尽,就要看它是不是只能被2和5整除。000

n = eval(input())

for i in range(n):
    num = eval(input())
    while(num % 2 == 0):#如果还能被2整除,继续除2
        num /= 2
        
    while(num % 5 == 0):#如果还能被5整除,继续除5
        num /= 5
    if num == 1:
        print('Yes')
    else:
        print('No')
    

Q7孤独的猫粮哥哥

题目:猫粮将大家(n个人)依次编号为1 ~ n,游戏规则是从第一个人开始往第n个人1~3循环报数,每报到3的人出局,反复循环,直到剩下最后的三人即为胜利者,问最后留下的三人分别是原来的第几号位(按照编号从小到大输出)

解析:暂时没有想到好的方法,就用计算机模拟这个过程。详情看程序

#注意区分大小写
people = [0] * (10 ** 5 + 20)#声明一个很大的数组,来记录人是否出局
p_n = eval(input())
count_people = p_n#当前还剩多少人
num = 1#当前数字
n = 1#第n个人
while (count_people > 3):#如果剩下的人小于三个就退出
    if people[n] == 0:#如果这个人已经退出
        if num == 3:#如果正好为3
            count_people -= 1#当前在玩的人少1
            people[n] = 1#这个人标记为退出
        num = num % 3 + 1#num在1-3循环
    n = n % p_n + 1#n在1-p_n循环
for i in range(1,p_n+1):#遍历一遍,看哪个留下来了
    if people[i] == 0:
        print(i)

Q8华卿想出一道难题

题目:将1,2,……,9这九个数分为3组,每一组三个数。每个组组成一个三位数,并且使这个三个三位数构成1:2:3的比例。如:192,384,576。试求出所有满足条件的3个3位数。
法一:类似水仙花数的做法,注意0不能取

for a in range (123,330):
    sign = [0]*10#数字是否被用过
    sign[0] = 1;
    flag = 1;
    b = a * 2
    c = a * 3
    a_aph = str(a)
    b_aph = str(b)
    c_aph = str(c)
    for i in range(3):#如果这个数字被用过就退出
        if sign[eval(a_aph[i])] == 0:
            sign[eval(a_aph[i])] = 1
        else:
            flag = 0
            break
        if sign[eval(b_aph[i])] == 0:
            sign[eval(b_aph[i])] = 1
        else:
            flag = 0
            break
        if sign[eval(c_aph[i])] == 0:
            sign[eval(c_aph[i])] = 1
        else:
            flag = 0
            break
    if flag == 1:
        print(a,b,c)
 

法二:若a + b = x + y且a * b = x * y则a,b = x,y

for a in range(123 , 333):
    b = a*2
    c = a*3
    a_100 = a / / 100	#这里是//整除符号
    a_10 = a / / 10%10
    a_1 = a % 10
    b_100 = b/ /100
    b_10 = b / / 10 % 10
    b_1 = b % 10
    c_100 = c/ /100
    c_10 = c/ /10%10
    c_1 = c % 10
    if a_100+a_10+a_1+b_100+b_10+b_1+c_100+c_10+c_1 == 45 and a_100*a_10*a_1*b_100*b_10*b_1*c_100*c_10*c_1 == 1*2*3*4*5*6*7*8*9 :
        print(a,b,c)

 

Google Helper

HUAHUA专门为大家又写了一篇博客,介绍如何下载Google Helper,把这个插件添加到你的chrome浏览器,并注册登陆就可以使用Google啦!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值