python中编写一个模块,模块中包含随机生成N个元素的列表、排序列表、求最大
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中编写一个模块,模块中包含随机生成N个元素的列表、排序列表、求最大相关的知识,希望对你有一定的参考价值。
下面是一个 Python 模块的例子,它包含了随机生成 N 个元素的列表、排序列表、求最大值三个功能:
这个模块中的三个函数可以用来随机生成 N 个元素的列表、对列表进行排序、求出列表中的最大值。
使用这个模块的方法是,在其他程序中用 import 语句导入这个模块,然后调用模块中的函数,例如:
这样,就可以使用 my_module 模块中的函数来生成随机列表、排序列表、求出最大值。
参考技术A 在 Python 中,你可以使用内置的 random 模块来生成随机数,并使用 random.sample() 函数来随机生成 N 个元素的列表。例如,你可以使用以下代码来生成一个包含10个随机数的列表:import random# 生成一个包含10个随机数的列表random_list = random.sample(range(100), 10)
接下来,你可以使用 Python 内置的 sorted() 函数将列表排序。例如:
# 对列表进行排序sorted_list = sorted(random_list)
最后,你可以使用 max() 函数求列表中的最大值。例如:
# 求列表中的最大值max_value = max(sorted_list)
你可以将这些代码封装在一个模块中,并导入这个模块来使用这些功能。例如,你可以将以下代码保存为 random_module.py 文件:
import randomdef generate_random_list(n): """生成包含n个随机数的列表"""
random_list = random.sample(range(100), n) return random_listdef sort_list(lst): """对列表进行排序"""
sorted_list = sorted(lst) return sorted_listdef get_max(lst): """求列表中的最大值"""
max_value = max(lst) return max_value
然后,你可以在其他程序中导入这个模块,并使用上面的函数:
import random_module# 生成包含10个随机数的列表random_list = random_module.generate_random_list(10)
# 对列表进行排序sorted_list = random_module.sort_list(random_list)# 求列表中的最大值max_value = random_module.get_max(sorted_list)
这样,你就可以使用这个模块来随机生成 N 个元素的列表、排序列表、求最大值了。
如何在实际条形码 Python `code128` 模块中包含条形码值
【中文标题】如何在实际条形码 Python `code128` 模块中包含条形码值【英文标题】:How to include barcode value with actual barcode Python `code128` module 【发布时间】:2021-04-04 20:55:57 【问题描述】:我刚刚构建了一个生成条形码的快速 Python Azure 函数。响应仅为 .png 格式的呈现条形码。我还需要在其下方显示条形码 VALUE。
示例:
import logging
import azure.functions as func
import code128
import io
from PIL import Image
barcode_param = '1234'
barcode_bytes = io.BytesIO()
logging.info('##### Generating barcode... #####')
barcode = code128.image(barcode_param, height=100).save(barcode_bytes, "PNG")
barcode_bytes.seek(0)
logging.info('##### Barcode successfully generated #####')
return func.HttpResponse(
barcode_bytes.getvalue(),
status_code=200,
mimetype='image/png'
)
barcode_bytes.close()
生成:
需要: theseahawksarewinning
如何使用code128
库将条形码值添加到条形码中?
in the docs 没有显示任何选项。
编辑 1:在@Furas 很好的例子之后,我现在有:
要生成的代码:
import code128
import io
from PIL import Image, ImageDraw, ImageFont
# Get barcode value
barcode_param = 'SUFFERINSUCCOTASH'
# Create barcode image
barcode_image = code128.image(barcode_param, height=100)
# Create empty image for barcode + text
top_bott_margin = 70
l_r_margin = 10
new_height = barcode_image.height + (2 * top_bott_margin)
new_width = barcode_image.width + (2 * l_r_margin)
new_image = Image.new( 'RGB', (new_width, new_height), (255, 255, 255))
# put barcode on new image
barcode_y = 100
new_image.paste(barcode_image, (0, barcode_y))
# object to draw text
draw = ImageDraw.Draw(new_image)
# Define custom text size and font
h1_size = 28
h2_size = 28
h3_size = 16
footer_size = 21
h1_font = ImageFont.truetype("DejaVuSans-Bold.ttf", h1_size)
h2_font = ImageFont.truetype("Ubuntu-Th.ttf", h2_size)
h3_font = ImageFont.truetype("Ubuntu-Th.ttf", h3_size)
footer_font = ImageFont.truetype("UbuntuMono-R.ttf", footer_size)
# Define custom text
company_name = 'YAY! CORP.'
id1 = '11-22-33-44'
license_num = 'WHY SOYNTENLY!'
product_type = 'GRADE A GREATNESS'
center_product_type = (barcode_image.width / 2) - len(product_type) * 5
center_barcode_value = (barcode_image.width / 2) - len(barcode_param) * 8
# Draw text on picture
draw.text( (l_r_margin, 0), company_name, fill=(0, 0, 0), font=h1_font)
draw.text( (l_r_margin, h1_size), id1, fill=(0, 0, 0), font=h2_font)
draw.text( (l_r_margin + 2, (h1_size + h2_size + 5)), license_num, fill=(0, 0, 0), font=h3_font)
draw.text( (center_product_type, (h1_size + h2_size + h3_size)), product_type, fill=(0, 0, 0), font=footer_font)
draw.text( (center_barcode_value, (new_height - footer_size - 15)), barcode_param, fill=(0, 0, 0), font=h2_font)
# save in file
new_image.save('barcode_image.png', 'PNG')
# show in default viewer
import webbrowser
webbrowser.open('barcode_image.png')
谢谢老哥!
【问题讨论】:
也许你找不到它的选项,因为它不存在。可以独立打印文字吗? 您必须生成条形码数据的图像并将其附加到条形码图形图像的下方。它可能不是 code128 库中的函数。需要更多研究。 【参考方案1】:您将代码作为 Pillow 图像,因此您可以使用 Pillow 为文本添加边距并绘制此文本。
你可以得到原始尺寸
w, h = barcode_image.size
计算新尺寸
new_w = w # the same
margin = 20
new_h = h + (2*margin)
创建白色背景的空白图像
new_image = Image.new('RGB', (new_w, new_h), (255, 255, 255))
将原始条形码放在高度的中间
new_image.paste(barcode_image, (0, margin))
接下来你可以使用ImageDraw
创建可以绘制对象或在图像上放置文本的对象
draw = ImageDraw.Draw(new_image)
您可以使用text()
输入一些文本。您可能需要使用ImageFont
来加载字体和设置大小。我使用默认字体和大小。
#fnt = ImageFont.truetype("arial.ttf", 40)
draw.text( (10, new_h - 10), barcode_text, fill=(0, 0, 0))#, font=fnt)
您在new_image
中有带有文字的图像。您可以将其保存在文件中并直接在网络浏览器中查看,也可以转换为字节发送给客户端。
在示例中,我使用标准模块webbrowser
仅用于检查图像。
编辑
正如@RufusVS 在评论中指出的那样,我可以使用image_new.show()
而不是webbrowser
import code128
import io
from PIL import Image, ImageDraw, ImageFont
barcode_param = '1234'
barcode_text = 'theseahawksarewinning'
# original image
barcode_image = code128.image(barcode_param, height=100)
# empty image for code and text - it needs margins for text
w, h = barcode_image.size
margin = 20
new_h = h +(2*margin)
new_image = Image.new( 'RGB', (w, new_h), (255, 255, 255))
# put barcode on new image
new_image.paste(barcode_image, (0, margin))
# object to draw text
draw = ImageDraw.Draw(new_image)
# draw text
#fnt = ImageFont.truetype("arial.ttf", 40)
draw.text( (10, new_h - 10), barcode_text, fill=(0, 0, 0))#, font=fnt) #
# save in file
new_image.save('barcode_image.png', 'PNG')
# show in default viewer
import webbrowser
webbrowser.open('barcode_image.png')
# --- later send it---
barcode_bytes = io.BytesIO()
new_image.save(barcode_bytes, "PNG")
barcode_bytes.seek(0)
data = barcode_bytes.getvalue()
文档:Image Image.new(), ImageDraw, ImageDraw.text() ImageFont
【讨论】:
也可以使用new_image.show()
来显示图形(开发中)
@RufusVS 好点 - 我添加了这个来回答。以上是关于python中编写一个模块,模块中包含随机生成N个元素的列表、排序列表、求最大的主要内容,如果未能解决你的问题,请参考以下文章