Hello all...,
I'm beginner in python and have been trying to fix this but I'm lost. So please help me. I got this ^
SyntaxError: invalid syntax print(f"{person}:") when I ran it in PyCharm. The code:
And I got No such file or directory when I ran it in Visual Studio Code. What did I miss?
Many thanks in advance.
I'm beginner in python and have been trying to fix this but I'm lost. So please help me. I got this ^
SyntaxError: invalid syntax print(f"{person}:") when I ran it in PyCharm. The code:
import csv import itertools import sys PROBS = { "gene": { 2: 0.01, 1: 0.03, 0: 0.96 }, "trait": { 2: { True: 0.65, False: 0.35 }, 1: { True: 0.56, False: 0.44 }, 0: { True: 0.01, False: 0.99 } }, "mutation": 0.01 } def main(): if len(sys.argv) != 2: sys.exit("Usage: python heredityarya.py data.csv") people = load_data(sys.argv[1]) probabilities = { person: { "gene": { 2: 0, 1: 0, 0: 0 }, "trait": { True: 0, False: 0 } } for person in people } names = set(people) for have_trait in powerset(names): fails_evidence = any( (people[person]["trait"] is not None and people[person]["trait"] != (person in have_trait)) for person in names ) if fails_evidence: continue for one_gene in powerset(names): for two_genes in powerset(names - one_gene): p = joint_probability(people, one_gene, two_genes, have_trait) update(probabilities, one_gene, two_genes, have_trait, p) normalize(probabilities) for person in people: [b]print(f" {person}:")[/b] for field in probabilities[person]: print(f" {field.capitalize()}:") for value in probabilities[person][field]: p = probabilities[person][field][value] print(f" {value}: {p:.4f}") def load_data(filename): data = dict() with open(filename) as f: reader = csv.DictReader(f) for row in reader: name = row["name"] data[name] = { "name": name, "mother": row["mother"] or None, "father": row["father"] or None, "trait": (True if row["trait"] == "1" else False if row["trait"] == "0" else None) } return data def powerset(s): s = list(s) return [ set(s) for s in itertools.chain.from_iterable( itertools.combinations(s, r) for r in range(len(s) + 1) ) ] def joint_probability(people, one_gene, two_genes, have_trait): probability = 1 for person in people: num_genes = num_genes_of_person(person, one_gene, two_genes) has_trait = person in have_trait if people[person]['mother'] is None and people[person]['father'] is None: probability *= PROBS["gene"][num_genes] * PROBS["trait"][num_genes][has_tr else: num_genes_mother = num_genes_of_person(people[person]['mother'], one_gene num_genes_father = num_genes_of_person(people[person]['father'], one_gene if num_genes == 0: probability *= probability_inheritence(num_genes_mother, False) * prob elif num_genes == 1: probability *= probability_inheritence(num_genes_mother, True) * proba + probability_inheritence(num_genes_mother, False) * elif num_genes == 2: probability *= probability_inheritence(num_genes_mother, True) * proba probability *= PROBS["trait"][num_genes][has_trait] return probability def update(probabilities, one_gene, two_genes, have_trait, p): for person in probabilities: num_genes = num_genes_of_person(person, one_gene, two_genes) has_trait = person in have_trait probabilities[person]["gene"][num_genes] += p probabilities[person]["trait"][has_trait] += p def normalize(probabilities): for person in probabilities: trait_sum = sum(probabilities[person]["trait"].values()) gene_sum = sum(probabilities[person]["gene"].values()) for gene in probabilities[person]["gene"]: probabilities[person]["gene"][gene] /= gene_sum for trait in probabilities[person]["trait"]: probabilities[person]["trait"][trait] /= trait_sum if __name__ == "__main__": main()Why print(f"{person}:") is invalid syntax? What changes should I make on this?
And I got No such file or directory when I ran it in Visual Studio Code. What did I miss?
Many thanks in advance.