看知乎上说要变得better一天得写个8小时代码吧。。。c也好Python也好。。。但是我太蒻了
12/25 更新 真的挂了!!!!!
一、素数相关
1.输出1-n的所有素数(输出1-n素数有几个,加一个计数器num)
2.判断数字i是否为素数,可以定义一个函数 isprime(i),直接继承第一题……
开一个列表,看i是否在素数列表里(当然也可以直接判断的)
3.输出小于n的最大素数
for n in range(99,2,-2):
for i in range(3,int(n**0.5)+1):
if n%i==0:
break
else:
print(n)
break
二、字符串处理
真是与c一脉相承
但是比c简单
#复习了这些
stri="Python"
stri.lower()
stri.upper()
str0.split(",")
str0.count(sub)#sub为子串,输出有多少个子串
str0.replace(old,new)
str0.strip("p") #从str0中去掉在其左侧和右侧中列出的字符
str0.join()
",".join("12345") #输出 1,2,3,4,5 注意不要颠倒
字符串类型格式化
"{.2f}".format("1.2345")
"{0:=^20}".format("python")
C语言带来的习惯:用ascii码判断字符 python中也可行
65<=ord(i)<=97
字符转为ascii码 ord()
ascii码转为字符 chr()
事实上可用 str.isalpha() 如果字符串至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
eval() 函数用来执行一个字符串表达式,并返回表达式的值。
如何判断字符大小写?
str.isupper()
str.islower()
str.isdigit()
Python isdigit() 方法检测字符串是否只由数字组成。
去除重复字符的好方法:利用集合的性质
集合:set()
例题:描述
将给定字符串去掉重复的字符后,按照字符ASCII码顺序从小到大排序后输出。忽略原字符串中的空格。
输入格式:
输入是一个以回车结束的非空字符串(少于80个字符)。
输出格式:
输出去重排序后的结果字符串。
示例 1
输入:ad2f3adjfeainzzzv
输出:23adefijnvz
string=input()
list1=list(set(string.replace(" ",'')))
list1.sort()
print("".join(list1))
分析:set()用于去重
.replace()用于忽略空格
.sort() 用于列表中元素的排序
.join()用于讲列表转化为字符串
join()函数
语法: ‘sep’.join(seq)
参数说明 sep:分隔符。可以为空 seq:要连接的元素序列、字符串、元组、字典
三、斐波那契数列相关问题
1.问第n个元素是什么
斐波那契第n个数的话 只要递归就行了
2.问小于n的数列元素
写一个函数名为Fibonacci,带一个参数n,函数打印斐波那契数列中所有小于n的值。函数没有返回值。
def Fibonacci(n):
"""accept an integer n.
return the numbers less than n in Fibonacci sequence."""
list1=[0,1]
num=0
index=0
while num<int(n):
num=list1[index]+list1[index+1]
if num<int(n):
list1.append(num)
index+=1
for i in list1:
print(i,end=' ')
n=input()
Fibonacci(n)
思路:把小于n的元素都放进列表
然后再将列表元素输出(循环输出)
思考:刚刚讲了 .join 那我们这里能否用这个呢???
结果:TypeError: sequence item 0: expected str instance, int found 报错why? 列表中含有int类整数,如果列表中都是字符串形式的元素,则可用join() ,含数字需要先转化为字符串
小例子: a = [‘1’,‘2’,‘3’,1] print(’ ‘.join(a))
以为会打印 1 2 3 1 结果报了错
解决办法:
print(" ".join(’%s’ %id for id in list1))
四、统计单词出现次数
这是一道给了答案的经典题,考点:字典
- 输入输出示例
此程序输出为一个字典,字典的键是字符串中每个单词,值是单词的个数。
所有单词一律按照小写对待,去除字符串中的标点符号。
myString = "This is the string whose words we would like to count. " \
"This string contains some repeated words, " \
"as well as some unique words. " \
"It contains punctuation, " \
"and it contains words that are capitalized in different ways. " \
"If the method we write runs correctly, " \
"it will count 4 instances of the word 'it', " \
"3 instances of the word 'this', " \
"and 3 instances of the word 'count'."
# we remove punctuations .,'?!
myString = myString.replace('.' ,'')
myString = myString.replace('?', '')
myString = myString.replace(',', '')
myString = myString.replace('\'', '')
# split it by spaces so that we have a list
# of words
myString = myString.lower()
list1 = myString.split(' ')
#Create empty dictionary
wordDictionary = {}
for i in list1:
if i < 'a':
continue
if i not in wordDictionary:
wordDictionary[i] = 1
else:
wordDictionary[i] += 1
key = input()
print(wordDictionary[key])
五、子串问题
如果要知道某子串在一个字符串中的数量 可用str.count()方法,这在刚刚已经提到
如果要知道位置呢?可以用find方法
描述
Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束)
范围
则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。语法
find()方法语法:
str.find(str, beg=0, end=len(string)) 参数 str – 指定检索的字符串 beg –
开始索引,默认为0。 end – 结束索引,默认为字符串的长度。 返回值 如果包含子字符串返回开始的索引值,否则返回-1。
与s.index()区分:index() 方法从字符串中找出某个子字符串第一个匹配项的索引位置,该方法与 find() 方法一样,只不过如果子字符串不在字符串中会报一个异常。
缺陷是什么呢 如果你直接 str原串.find(str子串) 只能返回第一个子串的位置
所以就有以下题目:
打印出子字符串的所有位置
描述
编写一个函数,接收2个字符串myString和findString为参数,利用字符串的find()方法,将myString中所有出现findString的位置打印在一行中,每个位置之间用空格隔开。
提示:
输入使用一行,输入的2个字符串用 , 分割。
示例 1
ABCDEABCDE,CD
2 7
方法1:(我的老方法)不用find
此方法要注意:防止下标越界
def print_indices(myString,findString):
a=len(myString)
b=len(findString)
str1=""
i=0
for i in range(0,a-b):
if myString[i:i+b]==findString:
str1=str1+str(i)+" "
return str1
myString,findString = input().split(",")
print(print_indices(myString,findString))
方法2:利用find 但是要分段利用
(老师写的)
def print_indices(mystring,fingstring):
location=mystring.find(findstring)
while location>=0:
print(location,end=' ')
location=mystring.find(findstring,location+1)
记得location要+1!!!!!!
六、文件问题
万万没想到BIT 的期末会考文件。。。。还好我瞟了一眼!!!
文件关键行数
描述
关键行指一个文件中包含的不重复行。关键行数指一个文件中包含的不重复行的数量。
统计附件文件中与关键行的数量。
输入输出示例
此处仅示例输出格式。
示例 1
共99关键行
附件
附件 1: latex.log
with open('latex.log', 'r', encoding='utf-8') as f:
rows = set()
s = 0
for line in f:
if line not in rows:
rows.add(line)
s += 1
print('共{}关键行'.format(s))
# 最简洁的答案
with open('latex.log', 'r', encoding='utf-8') as f:
rows_set = set(f.readlines())
print('共{}关键行'.format(len(rows_set)))
分析:此处用到的是集合的去重功能
add() 方法用于给集合添加元素,如果添加的元素在集合中已存在,则不执行任何操作。
add()方法语法:
set.add(elmnt)