我正在尝试创建一个程序,要求用户输入一个字符串,然后在字符串中显示最常出现的字符。我不能使用字典等内置功能。我认为我现在的问题是我有一个无限循环。我怎样才能解决这个问题?这是我的代码:
session_start();
include("config.php");
if(isset($_POST['submit'])){
$id = $_SESSION['uid'];
$sql = "DELETE from users WHERE id='$id'";
mysql_query($sql) or die(mysql_error());
echo "User has been sucessfully deleted!";
}
else{
echo "ERROR: User was not deleted";
}
答案 0 :(得分:0)
我认为您的问题是您要在两个单独的if
子句中更改索引值,而您使用的是>=
而不是>
来检查常用字符。< / p>
想象一下,第一个字母贯穿你的循环。在第一次传递时,它会将其与自身进行比较并增加索引和cc
。然后cc
更新为1
,num
更新为1
。在下一次浏览时,您的信件与第二个字母不匹配,但它确实通过了第二个if
案例,保证您的所有值都不会更改,并且index
不会增加。我建议将cc >= num
更改为cc > num
。
答案 1 :(得分:0)
如果你根本不能使用任何方法,只需使用double for循环:
def most_common():
s = input('Enter a string:').lower()
coun = 0
best = ""
for ch in s:
cn = 0
for c in s:
cn += ch == c # will be True or False 1/0
if cn >= coun:
if cn == coun: # catch letters that have equal count
if ch in best: # avoid adding same char twice
continue
best += ch # id equal and not already added concat to the stirng
else:
best = ch # else just set best
coun = cn
return 'The most frequently occuring letter(s): {}'.format(best)
适用于具有相同计数的字符:
In [14]: most_common()
Enter a string:foobar
Out[14]: 'The most frequently occuring letter(s): o'
In [15]: most_common()
Enter a string:foobb
Out[15]: 'The most frequently occuring letter(s): ob'
答案 2 :(得分:-1)
if cc >= num:
应为if cc > num:
在第一次迭代中,第一个字母将等于字符串的第一个字母(显然),您将输入if ch.lower() == string[index].lower():
。这会将cc
设置为1
,这也会将num
设置为1
。
由于它们都是相同的,只要第二个字母与第一个字母不相同,您就会有一个无限循环,只能进入if cc >= num
部分而永远不会更新index
过去{{ 1}}。