python大学计算机

编写程序,生成一个包含20个范围在 [0,100] 内的随机整数的列表,然后将前10个元素升序排列,后10个元素降序排列,并输出结果。以下是部分程序,请补充。
import random
#生成一个包含20个范围在 [0,100] 内的随机整数的列表
x=[random.randint(0, 100) for i in range(20)]
#在这里编写代码,将排序后的列表存放在变量 x 中

可以使用Python内置的sorted()函数来实现列表的排序,其中reverse参数可以控制排序的顺序。下面是完整的代码:

img

import random  # 导入random模块,用于生成随机数

#生成一个包含20个范围在[0,100]内的随机整数的列表
x = [random.randint(0, 100) for i in range(20)]  # 列表推导式,生成20个随机整数,并存放在列表x中

#将前10个元素升序排列
x[:10] = sorted(x[:10])  # 取出前10个元素并升序排列,再将排序后的结果赋值给原来的前10个元素

#将后10个元素降序排列
x[10:] = sorted(x[10:], reverse=True)  # 取出后10个元素并降序排列,再将排序后的结果赋值给原来的后10个元素


print(x)  # 打印输出列表x的结果

在这个程序中,我们首先使用列表推导式生成一个包含20个范围在[0,100]内的随机整数的列表。然后使用切片操作将前10个元素取出来,对其使用sorted()函数进行升序排列,再将结果赋值回原来的列表中。接着用类似的方式对后10个元素进行降序排列。最后输出结果。

import random
#生成一个包含20个范围在 [0,100] 内的随机整数的列表
x=[random.randint(0, 100) for i in range(20)]
#在这里编写代码,将排序后的列表存放在变量 x 中

#将前10个元素升序排列
x[:10] = sorted(x[:10], reverse=False)
#将后10个元素降序排列
x[10:] = sorted(x[10:], reverse=True)

#输出结果
print(x)

参考一下这个,自己研究一下应该可以的,不懂的也可以私信我

import random

# 生成一个包含20个范围在 [0,100] 内的随机整数的列表
x = [random.randint(0, 100) for i in range(20)]

# 对前10个元素进行升序排序
x[:10] = sorted(x[:10])

# 对后10个元素进行降序排序
x[10:] = sorted(x[10:], reverse=True)

# 输出排序后的列表
print(x)

将前10个元素升序排列
x[:10] = sorted(x[:10])

后10个元素降序排列
x[10:] = sorted(x[10:], reverse=True)

输出结果
print(x)

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/7518236
  • 这篇博客你也可以参考下:Python编写程序,使用列表生成表达式生成一个包含20个随机整数的列表,然后对其中偶数下标的元素进行降序排列,奇数下标的元素不变。商品筛选(提示,使用切片)
  • 除此之外, 这篇博客: 《Python程序设计与算法基础教程(第二版)》江红 余青松 全部章节的课后习题,上机实践,课后答案,案例研究中的 例题及上机实践:2~5 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 2. 尝试修改例6.2编写的命令行参数解析的程序,解析命令行参数所输入边长的值,计算并输出正方形的周长和面积

    argparse模块用于解析命名的命令行参数,生成帮助信息的Python标准模块

    例6.2:解析命令行参数所输入的长和宽的值,计算并输出长方形的面积

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('--length', default = 10, type = int, help = '长度')
    parser.add_argument('--width', default = 5, type = int, help = '宽度')
    
    args = parser.parse_args()
    area = args.length * args.width
    print('面积 = ', area)
    
    input()#加这一句是为了可以看到输出结果
    

    输出:面积 = 50

    如果在执行这个模块时,加入两个命令行参数

    输出:面积 = 36

    基本上看了上面这个例子后,就可以理解argparse的用法了

    本题代码:

    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument('--length', default = 10, type = int, help = '长度')
    
    args = parser.parse_args()
    area = args.length ** 2
    perimeter = 4 * args.length
    print('面积 = {0},周长 = {1}'.format(area,perimeter))
    
    input()#加这一句是为了可以看到输出结果
    
    

    在PowerShell中输入.\test.py
    不给命令行参数,输出是以默认值来计算的
    输出:面积 = 100,周长 = 40

    给命令行参数:.\test.py --length 1
    输出:面积 = 1,周长 = 4

    3. 尝试修改例6.8编写读取并输出文本文件的程序,由命令行第一个参数确认所需输出的文本文件名

    f = open(file, mode = 'r' , buffering = -1, encoding = None)

    1. file是要打开或创建的文件名,如果文件不在当前路径,需指出具体路径
    2. mode是打开文件的模式,模式有:
      ‘r’(只读)
      ‘w’(写入,写入前删除就内容)
      ‘x’(创建新文件,如果文件存在,则导致FileExistsError)
      ‘a’(追加)
      ‘b’(二进制文件)
      ‘t’(文本文件,默认值)
      ‘+’(更新,读写)
    3. buffering表示是否使用缓存(缓存为-1,表示使用系统默认的缓冲区大小)
    4. encoding是文件的编码

    例6.8:读取并输出文本文件

    import sys
    
    filename = sys.argv[0]#就读取本文件,骚的呀皮
    f = open(filename, 'r', encoding = 'utf-8')
    
    line_no = 0
    while True:
        line_no += 1
        line = f.readline()
        if line:
            print(line_no, ":", line)
        else:
            break
    f.close()       
    

    输出(代码输出的就是本python文件):

    1 : import sys
    
    2 : 
    
    3 : filename = sys.argv[0]#就读取本文件,骚的呀皮
    
    4 : f = open(filename, 'r', encoding = 'utf-8')
    
    5 : 
    
    6 : line_no = 0
    
    7 : while True:
    
    8 :     line_no += 1
    
    9 :     line = f.readline()
    
    10 :     if line:
    
    11 :         print(line_no, ":", line)
    
    12 :     else:
    
    13 :         break
    
    14 : f.close()
    
    15 :         
    
    

    本题代码:

    对例题代码进行些许修改就可以了,首先将上例中的第二个语句改为:filename = sys.argv[0],再考虑下面怎么进行

    准备一个用来测试的文件test.txt:

    对于这个文件要注意一点(你们很可能回出现这个问题!!!),win10默认创建的文本文件的字符编码是ANSI

    代码怎么写,有两种:

    1. 将test.txt文本文件的编码修改为utf-8,代码如上所说
      记事本方式打开test.txt文件,点击文件,点击另存为,看到下方的编码(修改为utf-8)
    2. test.txt就用默认的ANSI编码方式,再将上例代码的第三个语句修改为f = open(filename, 'r', encoding = 'ANSI')

    在PowerShell中输入:./test.py test.txt
    输出:

    1 : 大家好
    
    2 : 我是Zhangguohao666
    
    3 : 如果本文章对大家有帮助,请点赞支持一下
    
    4 : 还有:
    
    5 : 如果发现了什么问题,请在评论区指出,我会积极改进
    

    4. 尝试修改例6.9编写利用with语句读取并输出文本文件的程序,由命令行第一个参数确认所需输出的文本文件名

    为了简化操作,Python语言中与资源相关的对象可以实现上下文管理协议,可以使用with语句,确保释放资源。
    with open(file,mode) as f:

    例6.9:利用with语句读取并输出文本文件

    import sys
    
    filename = sys.argv[0]
    
    line_no = 0
    with open(filename, 'r', encoding = 'utf-8') as f:
        for line in f:
            line_no += 1
            print(line_no, ":", line)
    f.close()
    

    基本上,看这个例子,就可以上手with语句了

    本题代码:

    还是上一题准备的文本文件,
    代码一(文本文件的编码为默认的ANSI):

    import sys
    
    filename = sys.argv[1]
    
    line_no = 0
    with open(filename, 'r', encoding = 'ANSI') as f:
        for line in f:
            line_no += 1
            print(line_no, ":", line)
    f.close()
          
    

    代码二(将文本文件的编码修改为utf-8):

    import sys
    
    filename = sys.argv[1]
    
    line_no = 0
    with open(filename, 'r', encoding = 'utf-8') as f:
        for line in f:
            line_no += 1
            print(line_no, ":", line)
    f.close()
          
    
    

    本题的输出,我再不要脸的放一次吧:

    1 : 大家好
    
    2 : 我是Zhangguohao666
    
    3 : 如果本文章对大家有帮助,请点赞支持一下
    
    4 : 还有:
    
    5 : 如果发现了什么问题,请在评论区指出,我会积极改进
    

    5. 尝试修改例6.12编写标准输出流重定向的程序,从命令行第一个参数中获取n的值,然后将0-n,0-n的2倍值,2的0-n次幂的列表打印输出到out.log文件中

    例6.12:从命令行第一个参数中获取n的值,然后将0-n,2的0-n次幂的列表打印输出到out.log文件中

    1. 标准输入流文件对象:sys.stdin,
      默认值为sys.__stdin__
    2. 标准输出流文件对象:sys.stdout,
      默认值为sys.__stdout__
    3. 错误输出流文件对象(标准错误流文件对象):sys.stderr
      默认值为sys.__stderr__

    书中给的代码是这样的:

    import sys
    
    n = int(sys.argv[1])
    power = 1
    i = 0
    
    f = open('out.log', 'w')
    sys.stdout = f
    
    while i <= n:
        print(str(i), ' ', str(power))
        power = 2*power
        i += 1
    sys.stdout = sys.__stdout__
    

    如果使用的编辑器是PyCharm(现在大多数编辑器会帮你对代码进行优化和处理一些隐患),运行书中的这个代码没有问题。

    但是:
    若使用的编辑器是python自带的IDLE,运行这个代码有问题!

    第一:out.log文件会生成,但是没有东西
    (发现文件关闭不了(就是×不掉),
    确定是文件没关闭(f.close())的原因)

    第二:控制台没有输出’done’语句(估计是IDLE编辑器处理不了__stdout__这个值)

    经过研究后,发现(基于IDLE编辑器):
    如果在上面的代码中加入f.close()后,该输入的东西都成功输入进out.log文件了,
    但是,
    还有一个问题
    控制台依旧没有输出’done’语句
    经过一步步的断点调试(就是手动写print)
    发现sys.stdout = sys.__stdout__不会执行

    然后进行改动后,就可以了,代码如下:
    (既然__stdout__不好使,就使用中间变量)

    import sys
    
    n = int(sys.argv[1])
    power = 1
    i = 0
    
    output = sys.stdout
    f = open('out.log', 'w')
    sys.stdout = f
    
    while i <= n:
        print(str(i), ' ', str(power))
        power = 2*power
        i += 1
    
    f.close()
    sys.stdout = output
    print('done!')#这一句是用来检测上面的代码是否成功执行
    
    

    问题虽然解决,但是原因没有彻底弄清楚,求助。。。。。。

    本题代码:

    import sys
    
    n = int(sys.argv[1])
    power = 1
    i = 0
    
    output = sys.stdout
    f = open('out.log', 'w')
    sys.stdout = f
    
    while i <= n:
        print(str(i), ' ',  str(2*i),  ' ', str(power))
        power = 2*power
        i += 1
    
    f.close()
    sys.stdout = output
    print('done!')#这一句是用来检测上面的代码是否成功执行
    
    

    比如时输入的命令行参数是6
    输出:

  • 您还可以看一下 董付国老师的Python可以这样学(第四季:数据分析与科学计算可视化)课程中的 有关扩展库和工具简介小节, 巩固相关知识点


#然后将前10个元素进行升序排序
x[0:10] = sorted(x[0:10])

# 后10个元素降序排列:reverse表示降序
x[10:] = sorted(x[10:], reverse=True)

# 输出结果
print(x)

输出结果:

img

引用chatGPT作答,可以使用 Python 内置函数 sorted() 和 reverse=True 参数来对列表进行升序和降序排序。代码如下:

import random

# 生成一个包含20个范围在 [0,100] 内的随机整数的列表
x = [random.randint(0, 100) for i in range(20)]

# 对前10个元素进行升序排序
x[:10] = sorted(x[:10])

# 对后10个元素进行降序排序
x[10:] = sorted(x[10:], reverse=True)

# 输出结果
print(x)

输出结果可能类似于:

[2, 6, 13, 15, 25, 36, 39, 54, 62, 87, 91, 89, 86, 75, 71, 56, 45, 31, 25, 2]

#!/usr/bin/python3
# -*- coding: utf-8 -*-

import random

list_1 = []
list_2 = []
list_3 = []
for i in range(20):
    #随机产生20个0-100整数
    list_1.append(random.randint(0,100)
print('生成的随机整数列表为:\n',list_1)

#分片
list_2 = list_1[0:10]
list_3 = list_1[10:20]
#升序排序
list_2.sort()
#降序排序
list_3.sort()
list_3.reverse()
#列表合并
list_1 = list_2 + list_3

print('排序后的列表为:\n',list_1)