有10个变量,也许第1个变量和第3个变量是相同的值,也许第5个变量和第1个变量是相同的值,当发现任何两个具有相同值的变量时,请执行某些操作。我可以在if语句中执行此操作,但是代码会很长,如何通过for循环和数组来缩短代码?
def SignGen(message, q, p, g, alpha): # calculating s, h values. Signature Generation
k = random.randint(0, q-1)
r = pow(g, k, p)
h = (hashlib.sha3_256(message + r).hexdigest())
s = (alpha*h + k) % q
return s, h
答案 0 :(得分:1)
另一种可能的方法。将变量放入数组并使用嵌套循环:
<?php
$q1 = 12;
$q2 = 13;
$q3 = 12;
$q4 = 22;
$q5 = 99;
$q6 = 100;
$q7 = 62;
$q8 = 99;
$q9 = 12;
$q10 = 99;
$array = [$q1, $q2, $q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10];
for ($i = 0; $i < count($array); $i++) {
for ($j = $i + 1; $j < count($array); $j++) {
if ($array[$i] == $array[$j]) {
echo 'q'.($i+1).', q'.($j+1).'<br>';
// Do something
}
}
}
?>
输出:
q1, q3
q1, q9
q3, q9
q5, q8
q5, q10
q8, q10
答案 1 :(得分:0)
由于该问题被标记为PHP,因此这是一个PHP解决方案,尽管您所包含的代码看起来并不像PHP。
$arr = [$q1, $q2,$q3, $q4, $q5, $q6, $q7, $q8, $q9, $q10];
foreach ($arr as $i=>$v){
$ind = array_search($v, $arr);
if($ind !== false && $ind !== $i){
echo "Dupes ($ind, $i)";
//do something
}
}
答案 2 :(得分:0)
如果使用数组,这将变得很简单:
<?php
$values =
[
'q1'=>'3',
'q2'=>'1',
'q3'=>'3',
'q4'=>'5'
];
$has_dupes = array_unique($values)!==$values;
var_dump($has_dupes);
输出:
bool(true)
如果您需要具有匹配值的键:
<?php
$matches = [];
foreach(array_count_values($values) as $key=>$count)
if($count!==1)
$matches[] = array_keys($values, $key);
var_export($matches);
输出:
array (
0 =>
array (
0 => 'q1',
1 => 'q3',
),
)