Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

201511580440 李坦 #661

Open
hncsltok opened this issue Jan 10, 2020 · 5 comments
Open

201511580440 李坦 #661

hncsltok opened this issue Jan 10, 2020 · 5 comments

Comments

@hncsltok
Copy link

hncsltok commented Jan 10, 2020

1

(20分)写函数,该函数接收一个参数n。参数n为[1,9]之间的正整数。函数可根据n打印倒三角形到屏幕。形式如图所示,注意除了最后一行以外,每一行的两个数字之间有一个空格。主程序以整数7调用这个函数并打印倒三角形。(如给定n=9,则函数打印三角形如下:)

def f(n):
    assert type(n) == int
    assert n >= 1
    assert n <= 9
    for i in range(n):
        for j in range(i):
            print(' ', end='')
        for j in range(n-i):
            print(n-i, end=' ')
        print()
        
f(7)
@hncsltok
Copy link
Author

hncsltok commented Jan 10, 2020

2

(20分)写函数,该函数接收一个参数:列表nums。nums可表示为: [x1,x2,x3...xn]。该函数将nums中的元素重新排列到一个新列表中,结果为:[每个小于等于x1的元素, x1, 每个大于x1的元素],并返回新列表(新列表列表元素个数与原列表是相同的)。
主程序中,首先建立列表[x1,x2,x3...xn],其中每个元素均为[1, n]之间的随机整数(本题以n=20为例),以该列表为实参调用函数,并打印原列表以及重新排列后的列表。

def f(nums):
    result = []
    for i in range(len(nums)):
        result.append(nums[i])
    for i in range(len(nums)):
        for j in range(i+1, len(nums)):
            if (result[i] > result[j]):
                t = result[i]
                result[i] = result[j]
                result[j] = t
    return result


# Linear Congruential Generators
test = []
seed = 1234567891234
for i in range(20):
    seed = ((seed * 1103515245) % (2 ** 31) + 12345) % 20
    test.append(seed)

for i in test:
    print(i, end=' ')
print()
for i in f(test):
    print(i, end = ' ')

@hncsltok
Copy link
Author

hncsltok commented Jan 10, 2020

3

(20分)建立列表[x1,x2,x3...xn],利用该列表,得到并打印新列表[x1, x1+x2, x1+x2+x3, ..., x1+x2+x3...+xn],注意,每个元素是该元素及之前所有元素累加和的值。以[2,4,6,8,...100]为例。

# list(map(print, reducelist(lambda x, y: x+y, range(2, 101, 2))))

list1 = []
for i in range(2, 101, 2):
    list1.append(i)

list2 = []
acc = 0
for i in list1:
    acc = acc + i
    list2.append(acc)

for i in list2:
    print(i)

@hncsltok
Copy link
Author

hncsltok commented Jan 10, 2020

4

199801.txt文本文件中存储了《人民日报》1998年1月的全文内容。读取该文件,完成以下任务:
a. (8分)计算该文本中有多少个词(词总次数,不考虑词性标记),并打印到屏幕上。
b. (8分)计算该文本中有多少个不同的词(词种数,如“我们”和“你们”是两个不同的词,而无需考虑各自出现过多少次,也无需考虑词性问题),并打印到屏幕上。
c. (8分)计算该文本中有多少个不同的成语(即词性符号为i的分词单元),并打印到屏幕上。
d. (8分)统计该文本中成语的频次表,从高到低排列,每行一个成语及其频次,空格分隔,打印到屏幕并以同样格式输出到同目录下的文件res.txt中。

with open('199801.txt', 'r') as f:
    word_count = 0
    idiom_count = 0
    s = dict()
    s2 = dict()
    line = None
    while line != '':
        line = f.readline()
        for word in line.split(' '):
            word_count += 1
            s[word] = None
            if word.endswith('/i'):
                idiom_count += 1
                if (word in s2):
                    s2[word] += 1
                else:
                    s2[word] = 1


    list1 = []
    for i in s2:
        list1.append([i, s2[i]])
    length = len(list1)
    for i in range(length):
        for j in range(i+1, length):
            if (list1[i][1] > list1[j][1]):
                t = list1[i]
                list1[i] = list1[j]
                list1[j] = t
    with open('res.txt', 'w') as f2:
        for i in reversed(list1):
            f2.write(i[0])
            f2.write(' ')
            f2.write(str(i[1]))
            f2.write('\n')
            
    for i in list1:
        if (i[1] >9):
            print('* ', end='')
            print(i[0], end=' ')
            print(i[1])
                    
    print('以上是频次达到10次的词语频次表的倒序')
    
    print("词个数:", end=' ')
    print(word_count)
    print("不同的词个数:", end=' ')
    print(len(s))
    print("成语个数:", end=' ')
    print(len(s))
    print("不同的成语个数:", end=' ')
    print(len(s2))
  • 燃眉之急/i 10
  • 功不可没/i 10
  • 四面八方/i 10
  • 群策群力/i 10
  • 尊老爱幼/i 10
  • 想方设法/i 10
  • 力不从心/i 10
  • 铺张浪费/i 10
  • 举世瞩目/i 10
  • 势在必行/i 10
  • 前所未有/i 11
  • 好好先生/i 11
  • 身体力行/i 11
  • 男女老少/i 11
  • 齐心协力/i 11
  • 琳琅满目/i 12
  • 脱颖而出/i 12
  • 尽如人意/i 12
  • 必由之路/i 12
  • 成千上万/i 13
  • 行之有效/i 13
  • 众所周知/i 14
  • 以身作则/i 14
  • 无私奉献/i 14
  • 日新月异/i 15
  • 家家户户/i 15
  • 千家万户/i 15
  • 喜气洋洋/i 16
  • 卓有成效/i 16
  • 脚踏实地/i 17
  • 大街小巷/i 18
  • 一如既往/i 18
  • 源源不断/i 18
  • 当务之急/i 19
  • 因地制宜/i 19
  • 自力更生/i 20
  • 引人注目/i 23
  • 一年一度/i 23
  • 坚持不懈/i 28
  • 千方百计/i 29
  • 不正之风/i 30
  • 欢聚一堂/i 33
  • 坚定不移/i 35
  • 全心全意/i 37
  • 丰富多彩/i 37
  • 实事求是/i 68
  • 艰苦奋斗/i 71
  • 解放思想/i 90

以上是频次达到10次的词语频次表的倒序

词个数: 2263993
不同的词个数: 65014
成语个数: 65014
不同的成语个数: 1919

@hncsltok
Copy link
Author

5

(5分)写递归函数,该函数可返回一个给定列表中的最大值(其中元素均为数值型)。主程序以列表[2,344,3,23,34234,22,11,4,8,2]为例调用,并打印最大值。

def f(nums):
    if len(nums) == 1:
        return nums[0]
    else:
        rest_max = f(nums[1:])
        return nums[0] if nums[0] > rest_max else rest_max

print(f([2,344,3,23,34234,22,11,4,8,2]))

@hncsltok
Copy link
Author

hncsltok commented Jan 10, 2020

6

(3分)给定一个字符串,该字符串是一个数学表达式,其中有若干个小括号'(' 及 ')'。写代码,判断该表达式中的小括号的匹配是否正确(不考虑数字等其他字符是否导致表达式错误),对小括号正确匹配指:左小括号必须与右小括号成对闭合,且不能剩余未闭合的左或者右小括号。如
正确匹配示例:
'(1+2)*3'
'(((3+4)2)/5)'
等等。
错误匹配示例:
'(1
(3'
')4)'
'(2+3)6('
'(7-9)/(2+3)/5)'
'5
(1+(2-(9+6)/2)'
等等。

def is_valid_expression(expr):
    balance = 0
    for c in expr:
        if c == '(':
            balance += 1
        elif c == ')':
            balance -= 1
            if balance < 0:
                return False
    return True if balance == 0 else False

@hncsltok hncsltok changed the title 1 201511580440 李坦 Jan 10, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant