PY(杂谈QAQ)

看知乎上说要变得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
字符转为asciiord()
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)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章