Python如何根据用户输入从列表中抽取指定数量的随机元素?
解决Python随机抽取指定数量列表元素的问题
问题描述
我正在编写一个Python程序,要创建4个单词列表,提示用户输入从列表A、B、C、D中分别打印多少个单词,程序随机选取对应数量的单词并输出。目前已经完成了列表定义、用户输入提示的代码框架,但没法把两者结合起来;我能用random.choice()打印固定数量的随机元素,但不知道怎么按用户指定的数量抽取。
简化代码示例:
def lists(): animal = ["cat", "dog", "horse", "cow", "rabbit"] furnishings = ["couch", "table", "chair", "lamp", "bed"] vehicle = ["mazda", "toyota", "ford", "cadillac", "honda"] shade = ["red", "blue", "black", "green", "purple"] def inputFunction(): animals = input("how many animals would you like to print? ") furniture = input("how many furniture pieces would you like to print? ") cars = input("how many cars would like to use? ") colors = input("how many colors? ") def main():
期望输出示例(已翻译为中文):
请输入要打印的动物数量:2
请输入要打印的家具数量:3
请输入要使用的汽车数量:1
请输入要使用的颜色数量:5
cat horse table lamp bed toyota red blue black green purple.
解决方案
你需要调整函数的返回值,让列表和用户输入能被主函数调用,同时用random.sample()替代random.choice()来实现指定数量的随机抽取。完整代码如下:
import random def get_lists(): animal = ["cat", "dog", "horse", "cow", "rabbit"] furnishings = ["couch", "table", "chair", "lamp", "bed"] vehicle = ["mazda", "toyota", "ford", "cadillac", "honda"] shade = ["red", "blue", "black", "green", "purple"] return animal, furnishings, vehicle, shade def get_user_inputs(): # 转换输入为整数并做合法性校验 while True: try: animal_count = int(input("请输入要打印的动物数量:")) if 0 <= animal_count <= 5: break print("请输入0到5之间的数字") except ValueError: print("请输入有效的整数") while True: try: furniture_count = int(input("请输入要打印的家具数量:")) if 0 <= furniture_count <= 5: break print("请输入0到5之间的数字") except ValueError: print("请输入有效的整数") while True: try: car_count = int(input("请输入要使用的汽车数量:")) if 0 <= car_count <= 5: break print("请输入0到5之间的数字") except ValueError: print("请输入有效的整数") while True: try: color_count = int(input("请输入要使用的颜色数量:")) if 0 <= color_count <= 5: break print("请输入0到5之间的数字") except ValueError: print("请输入有效的整数") return animal_count, furniture_count, car_count, color_count def main(): # 获取四个列表 animals, furnishings, vehicles, shades = get_lists() # 获取用户指定的抽取数量 animal_num, furniture_num, car_num, color_num = get_user_inputs() # 随机抽取对应数量的元素 selected_animals = random.sample(animals, animal_num) selected_furnishings = random.sample(furnishings, furniture_num) selected_vehicles = random.sample(vehicles, car_num) selected_shades = random.sample(shades, color_num) # 合并结果并输出 result = selected_animals + selected_furnishings + selected_vehicles + selected_shades print(' '.join(result) + '.') if __name__ == "__main__": main()
关键说明
- 函数返回值设计:修改后的
get_lists()和get_user_inputs()会主动返回数据,让main()能获取到列表和用户指定的数量,实现模块间的数据传递。 - 输入合法性校验:添加循环和异常捕获,确保用户输入的是0到列表长度(此处为5)之间的整数,避免程序因非法输入崩溃。
- 随机抽取方法:
random.sample(列表, 数量)可以从列表中随机抽取指定数量的不重复元素,完全匹配需求。如果需要允许重复抽取,可替换为[random.choice(列表) for _ in range(数量)]。
内容的提问来源于stack exchange,提问作者newbiecoder
相关产品推荐
相关产品推荐

