- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我有这个列表(在练习中建议):
Members = [('Tessa','G1'),('Evan','G2'),('Tom','G3'),
('Mia','G3'),('Claire','G3'),('Billie','G4'),('Adrian',
'G2'),('Maddie','G1'),('Lewis','G1'),('Tony','G2'),('Joyce',
'G1'),('Julian','G5'),('Joshua','G2')('Warren','G3')]
最后,我必须编写一个带有参数 L
的 randomMember(L)
函数,它是上面定义的列表 Members
两人一组,具有以下约束:
同一组(G1, G2, ...)
的两个成员不能见面。
例如,使用列表 Members
,"Tessa"
和 "Lewis"
不能互相相遇。
所以,我已经写了这个(已经提供了基本代码,所以循环的位置应该不会改变)
def randomMember(L):
n = len(L)
Perm = permutation(n)
while checkConstrainst(Perm,random(L)) == False:
Perm = permutation(n)
LCouples=[]
for k in range (n):
LCouples.append((L[k],L[Perm[k]]))
return LCouples
为了进一步解释,checkConstrainst
函数有两个参数。 Perm
,它是一个整数列表,L
是一个列表,表示之前在 Members
列表中进行的抽签。
这个函数的目的是保证2个人不属于同一个组。输入 L
看起来像:[(('Tessa', 'G1'), ('Lewis', 'G1')), (('Joshua', 'G2'), ('Billie', 'G4'))]
def checkConstrainst(Perm,L):
for i in range(len(Perm)):
PeopleGroup_1, PeopleGroup_2 = L[i]
People1, Group1 = PeopleGroup_1
People2, Group2 = PeopleGroup_2
if Group1 == Group2:
return False
return True
我必须使用排列来使它工作...我不知道如何使用输入的列表来确保 Perm
目前验证约束。
对于列表 [(('Tessa', 'G1'), ('Lewis', 'G1')), (('Joshua', 'G2'), ('Billie', ' G4'))]
,checkConstraint
返回 False
并且对于列表 [(('Tessa', 'G1'), ('Joshua' , 'G2')), (('Billie', 'G4'), ('Lewis', 'G1'))]
返回 True
因为每对夫妇都不是来自同一对组。
permutation
函数就是用来生成随机整数的。
如果你需要,这里是代码:
def permutation(n):
L=[]
Perm=[]
j=0
for i in range(n):
L.append(i)
for k in range(n):
alea = rd.randint(0,len(L)-1)
j=L.pop(alea)
Perm.append(j)
return Perm
在 RandomMember
中,您还有一个 Random
函数,它将 Members
列表作为参数。此函数使几个人无需检查他们是否来自同一组(这是 RandomMember
的目标)。 Random
返回如下内容:[(('Tessa', 'G1'), ('Lewis', 'G1')), (('Joshua', 'G2'), ('Billie', 'G4'))]
.
所以,我的问题是我已经测试了 checkConstrainst
,它运行良好。但是,在 randomMember
函数中,在构建 LCouples
列表时,一对夫妇中有 2 个人属于同一组......
这里如果你需要的是random
, derangement
和isDerangement
函数:
def isDerangement(Perm):
for i in range(len(Perm)):
if Perm[i]==i:
return False
return True
def derangement(n):
Perm=permutation(n)
while isDerangement(Perm)==False:
Perm=permutation(n)
return Perm
def random(L):
n=len(L)
Couples=[]
D=derangement(n)
for k in range(n):
Couples.append((L[k],L[D[k]]))
return Couples
尽管看了几个小时,我还是不明白我的错误在哪里......
对于randomMember(L)
,这是我应该完成的基本代码:
def randomMember(L):
.............................................
Perm =........................................
while ......................................:
Perm =....................................
LCouples =[]
for k in range (n):
LCouples . append (.......................).
return LCouples
最佳答案
我不知道你的 permutation() 是否有必要?我找到了一种不用它的方法。
import random
members = [
('Tessa','G1'),('Evan','G2'),('Tom','G3'),('Mia','G3'),('Claire','G3'),
('Billie','G4'), ('Adrian','G2'),('Maddie','G1'),('Lewis','G1'),
('Tony','G2'),('Joyce','G1'),('Julian','G5'),('Joshua','G2'),('Warren','G3')
]
# I don't know how your random(L) look like but this function should do the same
def random_couples(L):
couples = []
# shuffle the members
rm = random.sample(L,len(L))
for i in range(0, len(L), 2):
couples.append((rm[i], rm[i+1]))
# return couples of random members
return couples
# no Perm needed
def check_constraint(L):
for pg1, pg2 in L:
if pg1[1] == pg2[1]:
return False
return True
def random_member(L):
Lcouples = random_couples(L)
while check_constraint(Lcouples) == False:
Lcouples = random_couples(L)
return Lcouples
print(random_member(members))
输出:
[(('Warren', 'G3'), ('Lewis', 'G1')), (('Maddie', 'G1'), ('Adrian', 'G2')),
(('Evan', 'G2'), ('Tessa', 'G1')), (('Claire', 'G3'), ('Julian', 'G5')),
(('Mia', 'G3'), ('Tony', 'G2')), (('Tom', 'G3'), ('Joyce', 'G1')),
(('Joshua', 'G2'), ('Billie', 'G4'))]
[(('Warren', 'G3'), ('Joshua', 'G2')), (('Tony', 'G2'), ('Mia', 'G3')),
(('Billie', 'G4'), ('Tom', 'G3')), (('Claire', 'G3'), ('Lewis', 'G1')),
(('Evan', 'G2'), ('Maddie', 'G1')), (('Tessa', 'G1'), ('Adrian', 'G2')),
(('Joyce', 'G1'), ('Julian', 'G5'))]
[(('Lewis', 'G1'), ('Warren', 'G3')), (('Tony', 'G2'), ('Joyce', 'G1')),
(('Adrian', 'G2'), ('Tom', 'G3')), (('Joshua', 'G2'), ('Tessa', 'G1')),
(('Billie', 'G4'), ('Evan', 'G2')), (('Julian', 'G5'), ('Mia', 'G3')),
(('Maddie', 'G1'), ('Claire', 'G3'))]
我现在可能知道该怎么做了,但我想先说说为什么你的代码不起作用。
传递给checkConstrainst(Perm,random(L))
的
randomMember(L)
中的
Perm
与 无关D
在 random(L)
中。您生成两个不同的数字列表,使用 D
创建随机对并对其进行验证,然后使用 Perm
返回未验证的最终结果。
关键是使用 Perm
来创建随机对。
import random
members = [
('Tessa','G1'),('Evan','G2'),('Tom','G3'),('Mia','G3'),('Claire','G3'),
('Billie','G4'), ('Adrian','G2'),('Maddie','G1'),('Lewis','G1'),
('Tony','G2'),('Joyce','G1'),('Julian','G5'),('Joshua','G2'),('Warren','G3')
]
def check_constraint(perm,L):
n = len(L)
# use perm passed in to create random couples
couples = [(L[i], L[perm[i]]) for i in range(n)]
# check if they are in same group
for pg1, pg2 in couples:
if pg1[1] == pg2[1]:
return False
return True
def random_members(L):
n = len(L)
# create a list of size n with shuffled numbers equal to your permutation(n)
perm = random.sample(range(n),n)
# move random selection inside check_constraint() so just pass L here
while check_constraint(perm,L) == False:
perm = random.sample(range(n),n)
couples = [(L[i], L[perm[i]]) for i in range(n)]
return couples
print(random_members(members))
输出:
[(('Tessa', 'G1'), ('Tom', 'G3')), (('Evan', 'G2'), ('Maddie', 'G1')),
(('Tom', 'G3'), ('Tessa', 'G1')), (('Mia', 'G3'), ('Adrian', 'G2')),
(('Claire', 'G3'), ('Julian', 'G5')), (('Billie', 'G4'), ('Mia', 'G3')),
(('Adrian', 'G2'), ('Warren', 'G3')), (('Maddie', 'G1'), ('Joshua', 'G2')),
(('Lewis', 'G1'), ('Evan', 'G2')), (('Tony', 'G2'), ('Billie', 'G4')),
(('Joyce', 'G1'), ('Claire', 'G3')), (('Julian', 'G5'), ('Tony', 'G2')),
(('Joshua', 'G2'), ('Lewis', 'G1')), (('Warren', 'G3'), ('Joyce', 'G1'))]
如果这是您的预期结果,我感到很奇怪。我们将有 14 对夫妇,而不是 14 人的 7 对夫妇。其中一些是重复的,例如 (('Tessa', 'G1'), ('Tom', 'G3'))
和 (('Tom', 'G3'), ( 'Tessa', 'G1'))
,剩下的就是一对二的关系,比如 (('Evan', 'G2'), ('Maddie', 'G1'))
和 (('Lewis', 'G1'), ('Evan', 'G2'))
。
关于python 初学者 - 构建具有组约束的情侣列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65028919/
我在使用 gradle 构建一个特定应用程序时遇到问题。该应用程序可以用 eclipse 编译和构建,它在平板电脑上运行良好。当我尝试使用 Gradle 构建它时,“compileDebugJava”
我有一个 C 程序,是一位离开的开发人员留给我的。我试图弄清楚他到底在做什么,并将软件重新安排成更合乎逻辑的东西,这样我就可以更轻松地构建它。我正在使用 CMake 构建,而他使用的是 Make。 有
我刚开始阅读“Pro Spring MVC with web flow”,它附带了一个我想遵循的代码示例。 我要什么 - 我想像书中那样构建应用程序,使用 Gradle 有什么问题 - 我没用过 Gr
我希望有人已经这样做了。我正在尝试为我的一个 angular 2 项目在 teamcity 中建立一个连续的构建。在做了一些研究之后,我按照以下步骤操作: 构建步骤 1:为 teamcity 安装 j
我有一个旧的 ASP.Net 网站解决方案,看起来像: 当我在 Visual Studio 中构建解决方案时,我得到以下输出: ------ Build started: Project: C:\..
我使用 gulp-usref、gulp-if、gulp-uglify、gulp-csso 和 gulp-file-include 来构建我的应用程序。除了 HTML 保持原样外,构建中的一切都运行良好
我正在使用 ionic2 开发内部移动应用程序。我可以通过以下方式成功构建 ios: ionic build ios and ionic build ios --prod 但当我这样做时,它一直失败
我是一位经验丰富的 .NET/C# 开发人员,但对这里的几乎所有技术/库(包括 SQL/DB 工作)都是新手。 我正在开发一个具有 Azure/Entity Framework .NET 后端和可移植
我正在使用 VS 2008。我可以使用 IDE 成功编译我的解决方案。但是,当我尝试使用 devenv.com 构建它时,它失败并提示“错误:找不到项目输出组'(无法确定名称)的输出”。该组、其配置或
版本: ember.js 2.7,ember-data 2.7 ember-cli 2.9.1//同样适用于 ember-cli 2.7 node 6.9.1, npm 3.10.9//也适用于 no
我第一次修补 AzureDevops,设置一些 CI 任务。 我有一个公共(public)存储库(开源)和一个包含 3 个 F# 项目的解决方案(.sln)。该解决方案在 Windows/Mac/Li
目前 5.1.5 版本或 STLPort CVS 存储库似乎仍不支持 VS2008。如果有人已经完成了这项工作,那么如果可能的话,分享会很有用:) 同样,了解 VS2005 或 2008 x64 构建
我有一个 Python 2.7 项目,到目前为止一直使用 gfortran 和 MinGW 来构建扩展。我使用 MinGW,因为它似乎支持 Fortran 代码中的写入语句和可分配数组,而 MSVC
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 9年前关闭。 Improve this que
我想知道为什么在 Zimbra Wiki 中只列出了构建过程的特定平台。这意味着不可能在其他 Linux 发行版上构建 Zimbra? Zimbra 社区选择一个特殊的 Linux 发行版来构建 Zi
我将在 Swift 中构建一个 CLI 工具。我用这个命令创建了项目 swift package init --type executable当我构建我的项目并解析 时读取别名 Xcode 中的参数并
我想为添加到 docker 镜像的文件设置文件权限。我有这个简单的 Dockerfile: FROM ubuntu:utopic WORKDIR /app RUN groupadd -g 1000 b
当我使用 clBuildProgram在我的 OpenCl 代码中,它失败并显示错误代码 -11,没有任何日志信息。 这是我的代码的样子: ret = clBuildProgram(program
我有一个底部导航栏,它有一个列表页面,该页面使用状态块。 class _MainPageState extends State { int _index = 0; @override Wi
我在本地计算机上使用Jenkins(Jenkins URL未通过Internet公开,但该计算机上已启用Internet。) 我进行了以下配置更改: 在Jenkins工具上安装了Git和Github插
我是一名优秀的程序员,十分优秀!