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.
