面向科班的python自学教程(速刷牛客网基础103题)(2)函数、列表和元组

本系列笔记用于非零基础的计算机科班同学快速掌握基本python。我建议科班同学不要听冗长的小白入门课,直接用做题和“抄题”的方式学习python,节省时间。在学过C/C++/java的基础上速成python。每道题我都会列出python的语法不同于C++/java的地方。建议看完笔记自己去原页面做一遍。

而且,力求在这个系列中规避“茴香豆的N种写法”,即题目用到什么写法就写什么,争取不拓展过多种炫技写法。目的也是立刻掌握,快速上手跑数据分析和机器学习,而不是八股文的学法。我相信复杂的用法自会在更高难度题目中出现,水平到了,那时候学也不迟。

也适用于想用python刷题的同学,以后会逐渐更新python刷题笔记和项目笔记。


三、函数(此处的函数是5小时速成python题库里的,时间紧的直接看。 如果觉得进阶太难可以跳过直接看第四部分,后面还会讲函数。)


1.网页的生成
 

网页的生成_牛客题霸_牛客网 (nowcoder.com)

描述:

牛客网的某个网页基本已经写好了,最后一步为了适应手机的尺寸,需要将高度增加一倍。为了适用于多个网页,牛牛希望你能将这个功能定义为一个函数,函数输入网页高度h,输出增加后的结果。

输入描述:

输入两个整数,表示两个网页的高度,以空格间隔。

输出描述:

分别两行输出两个高度调用函数增加高度后的结果。

答案:

def double_height(height):
    return height * 2


h = input()
h_list = h.split()  # split函数默认按照空格将字符串分割,此时h列表里都是str类型的元素
h_list = [int(element) for element in h_list]  # 将h列表里的str类型转化为int类型
for element in h_list:  # 在for循环中遍历每个元素,用函数扩大2倍,并输出
    print(double_height(element))


知识点:

1)注释:不是//,是#

2)函数:像类一样,需要用一个关键字声明是函数,这个关键字是def。def后面加函数的名字,名字后面加参数。名字和参数部分和java差不多。但是不用写返回类型。

3)python主要靠缩进和冒号进行模块的划分。所以函数头和函数体之间不用加{},函数头后面冒号,然后加一个缩进,就可以让人明白是这个函数里的内容了。退出这个缩进后写的语句就不属于该函数了。

4)input函数停止读入的标志是回车,不是空格。所以输入的两个数以空格分隔的话,只能用一个input读入。

5)现在h的情况是一个字符串,由数字加空格组成。我们利用split方法(字符串的一种方法),默认按空格将字符串分割。

6)列表推导式:[expression for item in iterable],其中 expression 是对每个元素的操作,item 是迭代的变量,iterable 是可迭代对象。这么看太抽象,我们直接用实例学习:

string_list = ["1", "2", "3", "4", "5"]
integer_list = [int(num) for num in string_list]

列表相当于数组或者集合,初始化的方法如图,注意是中括号[]。for前面的是对列表元素的操作。for和in之间的是你对列表中元素的一种代称,你可以随意起名字。in后面的是列表的名字。

这个语句的意思就是:string_list列表中每一个元素都被int()转化成int类型的元素,然后由integer_list这个列表来承接结果。

ps:注意列表推导式要在[]里写好

7)for循环:要遍历的对象写在in后面,for和in之间也是对列表元素的一种代称。同样的,以:和缩进作为循环体开始的标志

2.牛牛的朋友们

牛牛的朋友们_牛客题霸_牛客网 (nowcoder.com)

描述:

牛牛最好的朋友牛妹和牛可乐,他们已经成为朋友很多很多天了,这次牛牛想要研究一下他分别与牛妹成为朋友和与牛可乐成为朋友的天数x、y。请你写一个多参数的函数,根据输入的x与y,分别返回x+y的值和x-y的值。

输入描述:

一行输入两个整数x与y,通过空格间隔。

输出描述:

第一行输出函数返回结果的两个数字,以空格间隔。

第二行输出两数之积。

答案:

def mulptiple(num1, num2):
    return (num1 * num2)
s_list = input()
t_list = s_list.split()
num1 = int(t_list[0])
num2 = int(t_list[1])
print(num1 + num2, num1 - num2)
print(mulptiple(num1 + num2, num1 - num2))


知识点:

1)通过索引下标访问每个位置的元素,和数组差不多

四、字符串

 10.牛牛最好的朋友们

牛牛最好的朋友们_牛客题霸_牛客网 (nowcoder.com)

描述:

牛牛有两个最好的朋友,他们的名字分别用input读入记录在两个字符串中,请使用字符串连接(+)帮助牛牛将两个朋友的名字依次连接在一个字符串中输出。

输入描述:

依次输入两个字符串

输出描述:

输出连接后的字符串

答案:

str1 = input()
str2 = input()
print(str1 + str2)

知识点:

1)input读取,遇到回车停止。输入样例是两行,,因此用2个input

2)字符串连接:对于str类型直接用+

 11.单词的长度

牛牛最好的朋友们_牛客题霸_牛客网 (nowcoder.com)

描述:

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

输入描述:

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

输出描述:

输出字符串的长度。

答案:

str = input()
print(len(str))

知识点:

1)字符串长度用函数len()直接求,不用调用str的方法了

 12.格式化输出(二)

格式化输出(二)_牛客题霸_牛客网 (nowcoder.com)

描述:

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

输入描述:

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

输出描述:

输出字符串的长度。

答案:

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

知识点:

1)对于字符串的大小写操作的方法:

str.lower()全变成小写字母

str.upper()全变成大写字母

str.title()仅开头变作大写字母

 13.格式化输出(三)

格式化输出(三)_牛客题霸_牛客网 (nowcoder.com)

描述:

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

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

输入描述:

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

输出描述:

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

答案:

str = input()
print(str.strip())

知识点:

1)python中字符串中关于空格处理的方法:

lstrip()函数去掉左边空格

rstrip()函数去掉右边空格

strip()函数去掉左右两边空格

replace()函数去掉所有空格

 14.不用循环语句的重复输出

不用循环语句的重复输出_牛客题霸_牛客网 (nowcoder.com)

描述:

牛牛正在学习Python,他想多次输出朋友的名字,但是因为还没有学习循环语句,他不知道该怎么输出,你能够帮助他将输入的朋友的名字重复输出100次吗?(提示:不可以使用循环或者递归语句,使用字符串 * 运算)

输入描述:

输入一个字符串。

输出描述:

输出重复100次之后的字符串,字符串之间没有间隔。

答案:

str = input()
print(str * 100)

知识点:

1)字符串乘法:在 Python 中,你可以用 * 运算符将一个字符串重复多次。

 15.截取用户名前10位

不用循环语句的重复输出_牛客题霸_牛客网 (nowcoder.com)

描述:

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

输入描述:

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

输出描述:

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

答案:

str = input()
print(str[0:10])

知识点:

1)切片操作:str[0:10]切取索引从0到10的。

为什么不是str[0:9]

字符串的切片是左闭右开的,即切片的结束位置不包含在切片结果中。因此,使用 print(str[0:10]) 会截取字符串的索引0到索引9的字符,包括索引0,但不包括索引10。

猜你喜欢

转载自blog.csdn.net/qq_53077632/article/details/134875775