如何解决python中的无限循环
这段代码有问题,导致无限循环。
我在名为 dati
的列表中有一组数据。
我想打印此数据而不打印具有与 index=0 (risultato[0]) 中的值相同的“numerocorso”的项目
我的想法是这样的:
-
检查
"corsiTrovati"
列表的长度,如果这个长度等于 0 那意味着我还没有打印任何结果,所以我打印了结果项和在 corsiTrovati 中附加 risultato[0]。 -
如果此列表的长度不等于 0,则表示我在“corsiTrovati”中有元素,因此,对于此列表中的任何元素,**我比较此列表的当前元素等于从“dati”中提取的当前值。
-
如果等于我通过,因为我不想打印已经打印的元素。
-
如果不为真,则打印结果并将实际的
risultato[0]
附加到“corsiTrovati”` 列表中。
我不明白我做错了什么。这是代码片段:
for risultato in dati:
if len(corsiTrovati)==0:
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsoAttuale = str(risultato[0])
corsiTrovati.append(corsoAttuale)
else:
for corso in corsiTrovati:
if corso==risultato[0]:
pass
else:
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsoAttuale = str(risultato[0])
corsiTrovati.append(corsoAttuale)
编辑:完整代码:
import csv
with open("./data.csv",newline="") as fileDati:
csvHandler = csv.reader(fileDati,delimiter=",")
numeroDocenti = int(input("Inserisci il numero di docenti da ricercare: "))
listaDocenti = []
corsiTrovati = []
corsoAttuale = ""
while len(listaDocenti) < numeroDocenti:
docenteAttuale = input("Inserisci docente [Name Surname]: ")
listaDocenti.append(docenteAttuale)
filtroAnnoSolare = input("Desideri filtrare per anno Solare? [Y/N]: ")
if filtroAnnoSolare=="Y":
annoSolare = input("Inserisci anno solare: ")
else:
pass
filtroAnnoCorso = input("Desideri filtrare per anno di corso? [Y/N]: ")
if filtroAnnoCorso=="Y":
annoCorso = input("Inserisci anno di corso da ricercare: ")
else:
pass
for docente in listaDocenti:
print(f"Corsi del docente {docente}: ")
if filtroAnnoSolare=="N" and filtroAnnoCorso=="N":
dati = [(riga[1],riga[3],riga[0]) for riga in csvHandler if docente in riga[4]]
for risultato in dati:
if len(corsiTrovati)==0:
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsoAttuale = str(risultato[0])
corsiTrovati.append(corsoAttuale)
else:
for corso in corsiTrovati:
if corso==risultato[0]:
pass
else:
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsoAttuale = str(risultato[0])
corsiTrovati.append(corsoAttuale)
解决方法
我认为您需要披露更多有关变量的详细信息,例如dati
是什么?你在哪里声明corsiTrovati
?
无论如何,我假设的工作代码(前两行)是:
corsiTrovati = []
dati = [... list of risultati ...]
for risultato in dati:
corsoAttuale = str(risultato[0])
if corsoAttuale not in corsiTrovati:
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsiTrovati.append(corsoAttuale)
,
难以理解,因为看不到整个代码。
话虽如此,您似乎进入了无限循环,因为您要追加到列表中,然后在其中循环? 所以在不循环的情况下运行 in 关键字
for risultato in dati:
corsoAttuale = str(risultato[0])
if not len(corsiTrovati):
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsiTrovati.append(corsoAttuale)
else: # There are item in list so we check deeper
if corso in corsoAttuale:
pass
else:
corsiTrovati.append(corsoAttuale)
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
此外,您可能想要使用临时集合来收集结果并检查集合是否可以具有唯一元素:
results = set()
for risultato in dati:
corsoAttuale = str(risultato[0])
results.add(corsoAttuale)
if not len(corsiTrovati):
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsiTrovati.append(corsoAttuale)
else: # There are item in list so we check deeper
if corso in results:
pass
else:
corsiTrovati.append(corsoAttuale)
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
results = set()
编辑试试这个
import csv
with open("./data.csv",newline="") as fileDati:
csvHandler = csv.reader(fileDati,delimiter=",")
numero_docenti = int(input("Inserisci il numero di docenti da ricercare: "))
lista_docenti = []
corsi_trovati = []
corso_attuale = ""
while len(lista_docenti) <= numero_docenti:
docente_attuale = input("Inserisci docente [Name Surname]: ")
lista_docenti.append(docente_attuale)
filtro_anno_solare = input("Desideri filtrare per anno Solare? [Y/N]: ")
if filtro_anno_solare.lower() == "Y":
anno_solare = input("Inserisci anno solare: ")
else:
anno_solare = 'N'
filtro_anno_corso = input("Desideri filtrare per anno di corso? [Y/N]: ")
if filtro_anno_corso.lower() == "Y":
anno_corso = input("Inserisci anno di corso da ricercare: ")
else:
filtro_anno_corso = 'N'
for docente in lista_docenti:
print(f"Corsi del docente {docente}: ")
if anno_solare == "N" and filtro_anno_corso == "N":
dati = [(riga[1],riga[3],riga[0]) for riga in csvHandler if docente in riga[4]]
temp_num_corse = set()
for risultato in dati:
corso_attuale = risultato[0] # Move it here,more clean
if not len(corsi_trovati): # IF len == 0 then if False and will not run,more clean
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsi_trovati.append(str(corso_attuale))
temp_num_corse.add(corso_attuale)
else:
if risultato[0] in temp_num_corse:
pass
else:
print(f"Numero corso: {risultato[0]} -- Nome corso: {risultato[1]} -- Istituto: {risultato[2]}")
corsi_trovati.append(corso_attuale)
temp_num_corse.add(corso_attuale)
注意事项
-
我是如何命名变量的,我无法抗拒,Python 作为约定使用驼峰式大小写这样的变量 -> camel_case 和 not 像这样 -> camelCase{{3} }
-
我将 while 循环从
while len(lista_docenti) < numero_docenti:
更改为while len(lista_docenti) <= numero_docenti:
可能这会造成无限循环? -
我添加了一个
temp_num_corse
作为集合,我添加了一个 int,所以它包含一个唯一的元素,检查这个 Pep 8
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。