Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python ValueError:运行此代码时,0不在列表中_Python_Python 3.x - Fatal编程技术网

Python ValueError:运行此代码时,0不在列表中

Python ValueError:运行此代码时,0不在列表中,python,python-3.x,Python,Python 3.x,我目前正在做一个小项目,但有多个问题。我正在读取项目所在文件夹中的一个文件,其中包含10个用户的数据 至于代码本身…它相当大 def ouvrir_fichier(nomFichier): """ Ne pas oublier les docstring """ try: fp = open(nomFichier, 'r') return fp except: return print("Le fichier n'

我目前正在做一个小项目,但有多个问题。我正在读取项目所在文件夹中的一个文件,其中包含10个用户的数据

至于代码本身…它相当大

def ouvrir_fichier(nomFichier):
    """ Ne pas oublier les docstring

    """
    try:
        fp = open(nomFichier, 'r')
        return fp
    except:
        return print("Le fichier n'existe pas. Veuillez réessayer.")

def lire_fichier(fp):
    """ Ne pas oublier les docstring"""
    # Lis n et initialise une liste vide --
    #    où il y a une liste vide pour chaque usager du réseau
    #    ensuite lis le reste du fichier et ajouter l'information à reseau

    liste1 = fp.readlines()
    n = int(liste1[0])
    liste2 = liste1[1:]

    reseau = [[] for i in range(n)]
    for i in liste2:
        i = i.replace("\n", "")
        data = i.split(" ")
        valeur1 = int(data[0])
        valeur2 = int(data[1])
        reseau[valeur1].append(valeur2)
        reseau[valeur2].append(valeur1)
    fp.close()
    return reseau

def trouver_nombre_elements_communs_entre_listes(liste1, liste2):
    """ Ne pas oublier les docstring"""
    compteur_amis_commun = 0
    for element in liste1:
        if element in liste2:
            compteur_amis_commun = compteur_amis_commun + 1
    return compteur_amis_commun


def initialiser_matrice(n):
    """
    Crée une matrice nxn, initialisée avec des zéros et retourne la matrice.
    Args:
        n (int): dimension de la matrice nxn
    Returns:
        matrice (list): matrice initialisée

    """
    matrice = []
    for ligne in range(n):  # pour chacune des lignes dans n
        matrice.append([])  # créer une ligne (liste) et l'initialiser à 0
        for colonne in range(n):
            matrice[ligne].append(0)  # ajouter un 0 pour chaque n colonne
    return matrice


def calculer_scores_similarite(reseau):
    """ Ne pas oublier les docstring"""
    n = len(reseau)
    matrice_similarite = initialiser_matrice(n)
    liste1 = []
    liste2 = []
    compteur_liste1 = 0
    compteur_liste2 = 0

    for element_liste1 in reseau:
        liste1 = element_liste1
        for element_liste2 in reseau:
            liste2 = element_liste2
            compteur_amis_commun = trouver_nombre_elements_communs_entre_listes(liste1, liste2)
            matrice_similarite[compteur_liste1][compteur_liste2] = compteur_amis_commun
            compteur_liste2 = compteur_liste2 + 1
        compteur_liste1 = compteur_liste1 + 1
        compteur_liste2 = 0

    return matrice_similarite


def recommander(id_usager,reseau,matrice_similarite):
    """ Ne pas oublier les docstring"""

    usager_matrice = matrice_similarite.index(id_usager)
    ami_recommande = matrice_similarite.index(max(usager_matrice))
    max_value = max(matrice_similarite.index(usager_matrice))

    if ami_recommande == id_usager:
        max_value = max_value - 1

    ami_recommande = matrice_similarite.index(max_value)

    while True:
        if ami_recommande == reseau.index(ami_recommande):
            ami_recommande = reseau.index(max_value, ami_recommande + 1)
            return True

    return ami_recommande

def main():

    nomFichier = input("Nom du fichier contenant le réseau: ")
    reseau = lire_fichier(ouvrir_fichier(nomFichier))
    n = len(reseau)
    matrice_similarite = calculer_scores_similarite(reseau)
    while True:

        while True:

            id_usager = int(input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}):".format(n)))
            if 0 <= id_usager and id_usager < n:
                calculer_scores_similarite(reseau)
                print("Pour la personne" , id_usager , ", nous recommandons l'ami" , recommander(id_usager, reseau, matrice_similarite))
                continue
            else:
                print("Erreur: l'usager doit être un nombre entier entre ", 0, "et", n - 1, "inclusivement.\n")

        autreRecommandation = input("Voulez-vous une autre recommandation (oui/non)?")
        if autreRecommandation.lower() == "oui":
            return True
        else:
            print("Merci d'avoir utiliser le programme de recommandation d'amis.")
            break

if __name__ == "__main__":
    main()

我还想知道一些事情。在def main中,我请求输入定义id_usager,我想知道是否有一种方法可以同时处理字符和整数。整数,我的代码覆盖了它,但是如果有人想写boy而不是数字,它会失败。

访问list的元素是通过list\u name[index],list\u name.indexelement返回该元素的索引,如果列表中有两个,它返回第一个元素的索引,如果元素不在那里,它抛出ValueError:元素不在列表中。 就你而言 改变

usager_matrice=矩阵相似[id_usager]

以及使用索引访问列表元素的其他位置

在注释中的scond问题中,检查其数字是否如下

id_usager =input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}):".format(n))

if not id_usager.isdigit():
   continue
id_user=int(id_usager)

请注意,这也会将浮点值转换为int

,这是一大堆代码,对问题的定义非常简单。但是整个错误日志都存在。您需要解释这是怎么回事。我基本上是以10个用户的列表为基础的。至少现在是这样。也就是说,其中的每一个数据都被视为一个列表,我正在制作一个程序,基本上是制作一个朋友建议应用程序。我要求输入文件名当前只有两个文件,然后要求输入用户ID,第一个文件的用户ID介于0和9之间10个用户,第二个文件的用户ID介于0和999之间1000个用户。记住,我给给定的用户ID提供了一个用户,这个用户拥有最多的共同好友,而这些好友不是它自己或者已经在它的好友列表中列出了。欢迎访问!请提供一份报告。在这种情况下,保持沉默是最基本的。此外,我最初在问题中添加的另一个注释。你知道怎么做吗?这样当我从用户那里得到一个输入时,尽管是文本,但它会将其视为一个错误,而不是使程序崩溃?我用整数做的很好。如果将使用str而不是int,则无法使用str。行将在结尾处显示错误消息。
id_usager =input("Entrer l'ID de l'usager pour lequel vous voulez une recommandation (entre 0 et {}):".format(n))

if not id_usager.isdigit():
   continue
id_user=int(id_usager)