Python习题进阶

1.十六进制数字的大小

描述

计算的世界,除了二进制与十进制,使用最多的就是十六进制了,现在使用input读入一个十六进制的数字,输出它的十进制数字是多少?

输入描述:

input读入一个十六进制数字,按照字符串的形式包括数字0-9、字母A-F。

输出描述:

输出读入数字的十进制大小。

示例1

输入:
A
复制输出:
10

答案

a=input()
a=int(a,16)
print(a)

题解

这里主要是int在强制转换的用法(变量a的引号无论写于不写,不妨碍答案的正确性)

 2.单词的长度

描述

牛妹正在学英语,但是背单词实在是太痛苦了,她想让你帮她写一个小程序,能够根据输入的单词,快速得到单词的长度。

输入描述:

输入一个字符串,仅包含大小写字母。

输出描述:

输出字符串的长度。

示例1

输入:
Hello
输出:
5

答案

str1=input()
str1.isalpha()
print(len(str1))

题解

这里需要了解的是长度的一些用法。
        #s.isalpha: 判断字符串是否由字母组成
        #s.isdigit: 判断字符串是否由数字组成
        #s.isalnum: 判断是否数字和字母的组合

3.格式化输出(一)

描述

牛牛、牛妹和牛可乐都是Nowcoder的用户,某天Nowcoder的管理员希望将他们的用户名以某种格式进行显示,

现在给定他们三个当中的某一个名字name,请分别按全小写、全大写和首字母大写的方式对name进行格式化输出(注:每种格式独占一行)。

输入描述:

一行一个字符串表示名字。

输出描述:

请分别按全小写、全大写和首字母大写的方式对name进行格式化输出(注:每种格式独占一行)。

示例1

输入:
niuNiu
输出:
niuniu
NIUNIU
Niuniu

答案

name=input()
print(name.lower())
print(name.upper())
print(name.title())

题解

"""
所有字母大写:upper()
所有字母小写:lower()
首字母大写:capitalized()
每个单词首字母大写:title()
"""
name='Hello World'
print(name.lower())
print(name.upper())
print(name.capitalize())
print(name.title())

#输出:
hello world
HELLO WORLD
Hello world
Hello World

4.格式化输出(二)

描述

牛牛、牛妹和牛可乐都是Nowcoder的用户,某天Nowcoder的管理员由于某种错误的操作导致他们的用户名的左右两边增加了一些多余的空白符(如空格或'\t'等),

现在给定他们三个当中的某一个名字name,请输出name去掉两边的空白符后的原本的内容。

输入描述:

一行一个字符串表示名字name(注:name两边带有一些多余的空白符)。

输出描述:

一行输出name去掉两边的空白符后的原本的内容。

示例1

输入:
 Niuniu 
输出:
Niuniu

答案

name=input()
print(name.strip())

题解

.strip() --- 删除两边空格
.lstrip() --- 删除左边空格
.rstrip() --- 删除右边空格
.replace(" ","") --- 删除所有空格
.split() --- 先切分,"".join() --- 再拼接
题目并未明确说明是左边还是右边有空白,用 name.strip() 要更加恰当一些
name.strip()去除左右两侧空格或特殊字符
但该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
()中为删除字符,开头或末尾包含该字符即删除
如: str = "123abcrunoob321" 
        print (str.strip( '12' ))
输出:3abcrunoob3

5.截取用户名前10位

描述

牛客网正在录入用户的昵称,但是有的昵称太长了,对于这些过长的昵称,牛牛觉得截取昵称字符串前10个字符就可以了,你可以帮他写一个程序吗?

输入描述:

输入一个字符串,长度一定不低于10。

输出描述:

输出截取前10个字符后的子串。

示例1

输入:
NiuNiuisBest
输出:
NiuNiuisBe

答案

str=input()
if len(str)>=10:
    print(str[0:10])

题解

方法一:
a = input()
if len(a) >= 10:
    print(a[0:10])

方法二:
print(input()[0:10])

方法三:
str = input()
for i in range(10):
    print (str[i],end='')

方法四:
str1 = input()
print('%.10s'%str1)

方法五:
a=input()
b=''
n=0
for i in a:
    b=b+i
    n+=1
    if n>=10:
        break
print(b)

方法六(slice函数法):
str1=input()
print(str1[slice(10)])

方法七:
str = input()
if len(str) < 10 :
    exit(0)
print(str[0:10])

方法八:
a=input('')
b=[]
for i in range(10):
    b.append(a[i])
 
s=''.join(b)
print(s)

方法九:
a=str(input())
while len(a)>=10:
    print(a[0:10])
    break

6.朋友的年龄和

描述

牛牛在牛客网有两位最好的朋友,分别是牛妹和牛可乐。牛牛想知道他们俩都多大了,于是去询问年龄。两位通过输入年龄分别是a和b,请你输出两位朋友的年龄之和。

输入描述:

一行输入两个整数,以空格间隔。

输出描述:

直接输出a+b的结果。

示例1

输入:
20 25
输出:
45

答案

a=input()
a1,a2=map(int,a.split())
print(a1+a2)

题解

        split按空格拆分

        map映射转换为int

7.多样的选择

描述

牛牛正在编写Python代码,他有些纠结到底该选vscode还是pycharm,于是他决定投硬币决定,正面使用vscode,反面则使用pycharm。请你根据输入的01数字表示正反面,使用三元表达式if-else输出牛牛使用的哪种编译器。

输入描述:

输入一个数字0或者1,0表示硬币反面,1表示硬币正面。

输出描述:

输出vscode或者pycharm。

示例1

输入:
1
输出:
vscode

答案

coin=int(input())
chose="vscode" if coin == 1 else "pycharm"
print(chose)
"""
a=int(input())
print('pycharm') if not a else print('vscode') 
"""

题解 

三元表达式就是说 A if B else C

如果B 的判断为真,执行A的操作,为假执行C的操作。

8.牛妹的烦恼

描述

牛牛找牛妹一起去学习Python,牛可乐又找牛妹一起去学习Java,但是牛妹自己又钟情于C语言,她一时不知道该怎么选择,非常苦恼。于是牛妹想了一个办法,她们三个人掷骰子,假如牛牛的点数高于另外两个人,牛妹就去学Python;同理假如牛可乐的点数高于另外两人,牛妹就去学Java;若是二者都不是,牛妹就去学C语言。请你根据输入的三个点数,输出牛妹学了什么语言。

输入描述:

一行输入三个整数,分别表示牛牛、牛可乐、牛妹投掷的点数,以空格间隔。三个点数,任何两两不相等。

输出描述:

输出Python、Java或者C。

示例1

输入:
1 2 3
输出:
C

答案

a,b,c=map(int,input().split())

if a>b and a>c:
    print('Python')
elif b>a and b>c:
    print('Java')
else:
    print('C')
"""
x = map(int, input().split())
l = list(x)
if l[0]>l[1] and l[0]>l[2]:
    print("Python")
elif l[1]>l[0] and l[1]>l[2]:
    print("Java")
else:
    print("C")
"""

还是采用了map映射为int型,splist切片间隔分开3个数据

9.有序的列表

描述

创建一个依次包含字符串'P'、'y'、't'、'h'、'o'和'n'的列表my_list,先使用sorted函数对列表my_list进行临时排序,第一行输出排序后的完整列表,第二行输出原始的列表。再使用sort函数对列表my_list进行降序排序,第三行输出排序后完整的列表。

输入描述:

输出描述:

第一行输出临时排序后的列表;

第二行输出原始的列表;

第三行输出完成降序排序后的列表。

答案

my_list=['P','y','t','h','o','n']
a=sorted(my_list)
print(a)
print(my_list)
my_list.sort(reverse=True)
print(my_list)

题解

sort 与 sorted 区别:

  1. sort 是应用在 list 上的方法,属于列表的成员方法,sorted 可以对所有可迭代的对象进行排序操作。
  2. list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
  1. sort使用方法为ls.sort(),而sorted使用方法为sorted(ls)

(1)创建列表

 列表名称=[元素,元素,元素......]

(2)使用sorted函数临时排序

        新列表=sorted(旧列表名称) 

(3)输出排序后完整列表

        print(新列表)

(4)输出原始列表

        print(旧列表)

(5)使用sort函数对列表降序排序

        旧列表.sort(reverse = True)        

        sort函数用法:

        列表名.sort(reverse = False)  其中,reverse = True 降序, reverse = False 升序(默认)  

(6)输出排序后完整列表 

        print(旧列表)     

10.密码游戏

描述

牛牛和牛妹一起玩密码游戏,牛牛作为发送方会发送一个4位数的整数给牛妹,牛妹接收后将对密码进行破解。

破解方案如下:每位数字都要加上3再除以9的余数代替该位数字,然后将第1位和第3位数字交换,第2位和第4位数字交换。

请输出牛妹破解后的密码。

输入描述:

输入一个四位数的整数。

输出描述:

输出破解后的密码,以四位数的形式。

示例1

输入:
1234
输出:
6745

#备注:
#输入不会有前置0,但是输出要保持前置0

答案

n=input()        #以字符串形式输入,例如输入1234
str1=''           
for i in n:      #此法可以依次取出字符串的每一个字符,在此以第一个数i=1为例
    i=int(i)      #字符串"1"转化为数字1
    j=(i+3)%9     #以j来表示i=1转化后的数
    str1+=str(j)  #将第一个字符串转化得来的字符重新拼接到一个新字符串上
str2=str1[2:]+str1[:2]  #切片,截取新字符串的后半段和前半段拼接成又一个新字符串,正好满足1,3互换;2,4互换
print(str2)

题解另外的写法

获取4位整数中各位的数值(更好的方法)

first = a//1000
second = (a//100)%10  
third = (a//10) % 10  
fourth = a % 10       

成果

# 获取输入的4位数字
a = int(input())

# 获取4位整数中的每一位的值
first = a//1000
second = (a//100)%10  
third = (a//10) % 10  
fourth = a % 10       

# 创建临时数组arr,存储每一位的数值
arr = [first,second,third,fourth]
# 使用for循环对每一位的数值进行“加上3再除以9的余数代替该位数字”的操作
for i in range(len(arr)):
    arr[i] = (arr[i] + 3) % 9
    
# 将第1位和第3位数字交换
arr[0],arr[2] = arr[2],arr[0]

# 将第2位和第4位数字交换
arr[1],arr[3] = arr[3],arr[1] 

# 以四位数的形式 输出破解后的密码
print(arr[0],arr[1],arr[2],arr[3],sep='') # 6745

或者

a = input()
str1= str()
for i in range(len(a)):
    str1 += str((int(a[i])+3)%9)
print(str1[2],str1[3],str1[0],str1[1],sep='')

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值