Sitat av
Realist1
Kan jo også nevne at det er vanlig å få den slags input «utenfra», spesielt når det er snakk om så mange tilfeller.
Her er et annet eksempel, som viser hvordan alle parameterne ligger i tekstfilen 'parametere.txt', og leses inn av Python-programmet som holdes enkelt og pent, uansett hvor mange hundretusenmillioner parametere du planlegger å dra inn.
parametere.txt
Kode
1 2 2
4 6 5
3 4 4
1 2 3
4 2 5
3 4 3
script.py
Kode
def f(A, Z, m, k1, k2):
return Z * k1 + (A - Z) * k2 + m * Z
k1, k2 = 3, 4
resultater = []
with open('parametere.txt') as file:
for line in file.readlines():
p = [int(n) for n in line.split()]
resultater.append(f(*p, k1, k2))
print(resultater)
# >>> [6, 40, 24, 8, 24, 20]
Bare vær obs på rekkefølgen på parameterne. Her leses de inn i funksjonen i rekkefølgen A-Z-m (slik du også oppga funksjonen), mens du ser ut til å lage dicts med rekkefølgen Z-A-m. Bare en liten detalj som kan forårsake feil hvis tunga ikke holdes i rett munn.
Ok-sitter nå litt fast med en kjemi-dictionary der jeg vil ha ut to parametre irradiation time:<innhold> og congestion:<innhold>.
Jeg prøver alltså å få printet ut alle verdier for disse to parametrene
via en liste med en for loop.
snippet fra listen er
Kode
{'run_data': {'timestamp': '22:41:22 12 June 2020',
'run_name': '* Iron irradiation with 14MeV',
'flux_name': 'Neutron generator spectrum'},
'inventory_data': [{'irradiation_time': 0.0,
'cooling_time': 0.0,
'flux': 2173374.9239999996,
'total_heat': 0.0,
'alpha_heat': 0.0,
'beta_heat': 0.0,
'gamma_heat': 0.0,
'ingestion_dose': 0.0,
'inhalation_dose': 0.0,
'dose_rate': {'type': '', 'distance': 0.0, 'mass': 0.0, 'dose': 0.0},
'nuclides': [{'element': 'Fe',
'isotope': 54,
'state': '',
'half_life': 0.0,
'grams': 9001.755111054154,
'activity': 0.0,
'heat': 0.0,
'alpha_heat': 0.0,
'beta_heat': 0.0,
'gamma_heat': 0.0,
'dose': 0.0,
'ingestion': 0.0,
'inhalation': 0.0},
osv
Element 0 i inventory['inventory_data'][0]['irradiation_time'] gir tiden og element 7 gir ingestion om man teller. Så prøver jeg å liste innholdet for tid og ingestion i hele dictionarien med
Kode
for (key,value)in inventory.items():
print('irrtime:',inventory['inventory_data'][0]['irradiation_time'],'ingestion_dose:',inventory['inventory_data'][7]['irradiation_time'])
Men får bare ut
Kode
irrtime: 0.0 ingestion_dose: 12600.0
irrtime: 0.0 ingestion_dose: 12600.0
Det skal visst gå og gøre dette også med en for loop men spørs om den må nestes på en eller annen måte?