Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  19 4063
Hei,
Sitter litt fast da jeg øver med python og spesifikt zip metoden.

Har en liste på 10 elementer av type string
Og annen liste med floats også 10 elementer.

Jeg prøver å bygge dictionary med

Kode

adic={}
adic=dict(zip(list_nr1,list_nr2))
adic
Kjøreresultatet blir bare et tomt uttrykk

Kode

out : {}
Noen med noe tips?
Er ikke det fordi du ikke bruker += istedenfor = ?
Du overskriver variabelen hver gang.
ser ut til at 'zip' blir konsumert og kan ikke kjøres igjen dersom du allerede brukt den til noe.

feks. output her viser bare den første og ingenting i den andre: https://www.online-python.com/zyuBD4P2sM
Der ble jeg ninjaed av Patrick gitt. Men kan poste likevel:

Det høres ut som problemet er at du ikke bruker zip() på riktig måte, eller ikke vet hvordan funksjonen fungerer. Kort forklart så returnerer zip() et zip-objekt, og dette objektet kan bare brukes én gang før det blir "brukt opp"/"consumed". Her er et eksempel:

Kode

navn = ("John", "Charles", "Mike")
tall = (9.81, 0.420, 0.69)

zip_objekt = zip(navn, tall)
ordbok = dict(zip_objekt)

print(ordbok)  # {'John': 9.81, 'Charles': 0.42, 'Mike': 0.69}
print(dict(zip_objekt))  # {}
zip() returnerer et zip-objekt, og når jeg lager ordbok med dict(zip_objekt) blir dette zip-objektet brukt opp. Så å forsøke å lage en ny ordbok av zip_objekt resulterer i en tom ordbok.

Sparsomt med kode du har delt ut, og hvis jeg prøver å lage et fullverdig eksempel og kjøre det, så funker det fint for meg. Se første eksempel med printout som kommentar:

Kode

navn = ("John", "Charles", "Mike")
tall = (9.81, 0.420, 0.69)

adic={}
adic=dict(zip(navn, tall))
print(adic)  # {'John': 9.81, 'Charles': 0.42, 'Mike': 0.69}
Andre som har lurt på dette før deg også, så du er ikke alene om det: https://discuss.codecademy.com/t/why...ting/453093/17
Sist endret av Bl4derunner; 12. juni 2022 kl. 17:47.
Trådstarter
19 2
Sitat av Bl4derunner Vis innlegg
Der ble jeg ninjaed av Patrick gitt. Men kan poste likevel:

Det høres ut som problemet er at du ikke bruker zip() på riktig måte, eller ikke vet hvordan funksjonen fungerer. Kort forklart så returnerer zip() et zip-objekt, og dette objektet kan bare brukes én gang før det blir "brukt opp"/"consumed". Her er et eksempel:

Kode

navn = ("John", "Charles", "Mike")
tall = (9.81, 0.420, 0.69)

zip_objekt = zip(navn, tall)
ordbok = dict(zip_objekt)

print(ordbok)  # {'John': 9.81, 'Charles': 0.42, 'Mike': 0.69}
print(dict(zip_objekt))  # {}

zip() returnerer et zip-objekt, og når jeg lager ordbok med dict(zip_objekt) blir dette zip-objektet brukt opp. Så å forsøke å lage en ny ordbok av zip_objekt resulterer i en tom ordbok.

Sparsomt med kode du har delt ut, og hvis jeg prøver å lage et fullverdig eksempel og kjøre det, så funker det fint for meg. Se første eksempel med printout som kommentar:

Kode

navn = ("John", "Charles", "Mike")
tall = (9.81, 0.420, 0.69)

adic={}
adic=dict(zip(navn, tall))
print(adic)  # {'John': 9.81, 'Charles': 0.42, 'Mike': 0.69}
Andre som har lurt på dette før deg også, så du er ikke alene om det: https://discuss.codecademy.com/t/why...ting/453093/17
Vis hele sitatet...
Takker for svarene-ja jeg gjør noe feil.

Hm-ditt siste eksempel viser altså et fungerende eksempel ,men mener at jeg gjør på samme måte.

Mine lister ser ut som

Kode

list_nr1=['navn-1','navn-2',....,'navn10']
list2_nr2=['1.1','2.8',......,'3,7']
10 elementer i hver liste som så skal gjøres en dictionary fra.
Mener at min metode er det samme som i det eksempelet
Hvis du gir oss hele koden du ikke får til å fungere, så er det lettere for oss å hjelpe deg.
Trådstarter
19 2
Ser nå at
type(list2_nr2)
git <class list> som output. Burde hvære str eller float.
og at
length(list2_nr2) gir 0 selv om det er 10 elementer i listen.
Er noe rart med den andre listen da selv om den innholder 10 numeriske elementer genert fra en filinnlesing.

Prøvde å fikse med å gjøre list2_nr2 om til float
med

[float(i) for i in list2_nr2] men virker ikke.
Sjekk length(list2_nr2[0])
Trådstarter
19 2
Det fikset seg.Feilen lå i hvordan jeg leste in elementene i den andre listen.
Jeg hade gjort
liste2=[arr[3],arr[5] osv ]. Denne listen kunne printes ut og viste et nr underveis i kjøring av prog,men ikke i siste fase da zip
skulle benytte.
Fikk for hvert element i liste2 først gjøre:
num1=float(arr[3])
num2=float(arr[5]) osv og så definiere liste2=[num1,num2,..]
Da virket det å kjøre zip for og få en dictionary.

Hei-har et spørsmål til.

Jeg vil bruke matplotlib og plotte en kvadrat/rektangel med sidelengde a/2 runt origo.

Dvs den skal plottes fra -a/2<=x<=a/2. Samme grenser gjelder for y-aksen.

Jeg har også lagt in bruk av annotate funktioen for å i figuren med tekst innføre kunne ligningen for rette linjen y=a/2 samt x/2 langs to av
kvadratens lengder.
Men bare høyre kvadrant plottes uten noen graf. Samt feilmeldinger som peker på plt.polygon-metoden
og value error samt vertices must be 2D with shape M,2 Your input has shape 5,3
Koden jeg kjører er:

Kode

import matplotlib.pyplot as plt
a=10
fig,ax=plt.subplots()
polygon=plt.Polygon([-a/2,a/2,0],[a/2,a/2,0],[a/2,-a/2,0],[-a/2,-a/2,0]],facecolor='white',edgecolor='black')
ax.add_artist(polygon)
plt.axvline(0.0,color='black')
plt.axhline(0.0,color='black')
plt.annotate(r'$y=a/2$',-a/2,a/2)#write in this spot
plt.annotate(r'$a$',(-a/2,a/2))
plt.xlim(-a*2.5,a*2.5) #set limit x-axis
plt.ylim(-a*2.5,a*2.5)
plt.gca().set_aspect('equal',adjustable='box')
plt.gca().spines['right'].set_visible(False)
plt.gca().spines['top'].set_visible(False) #switch off top frame
plt.show()
Ser ikke riktig hva feilen er-Noen tips?
Sist endret av Dyret; 13. juni 2022 kl. 13:25. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Det er litt smertefullt å lese kode uten formatering, og gjerne syntakshighlighting også. Når du skriver kode og en utregning blir gjort et dusin ganger på noen få linjer, er det en god idé for lesbarhetens skyld å bruke en variabel med et fornuftig navn. Hvis sidelengden din skal være a/2 og kvadratet skal tegnes "rundt" origo, blir sidelengden feil når du bruker +- a/2 som koordinat, men at det står "/2" over alt får det til å se riktig ut ved første øyekast likevel - derav viktigheten av god navngivning og lesbar kode.

Så: les feilmeldinger nøye. De er ikke alltid veldig pedagogiske, men de forteller deg som regel noe. Vertices skal være 2D, du oppgir 3D-koordinater. Jeg bruker ikke matplotlib og vet ikke hva den mener med 5 i "5,3" ettersom du oppgir 4 vertices, men 3-eren tyder også på at du oppgir feil antall dimensjoner.
Sist endret av robhol; 13. juni 2022 kl. 13:14.
Trådstarter
19 2
Sitat av robhol Vis innlegg
Det er litt smertefullt å lese kode uten formatering, og gjerne syntakshighlighting også. Når du skriver kode og en utregning blir gjort et dusin ganger på noen få linjer, er det en god idé for lesbarhetens skyld å bruke en variabel med et fornuftig navn. Hvis sidelengden din skal være a/2 og kvadratet skal tegnes "rundt" origo, blir sidelengden feil når du bruker +- a/2 som koordinat, men at det står "/2" over alt får det til å se riktig ut ved første øyekast likevel - derav viktigheten av god navngivning og lesbar kode.

Så: les feilmeldinger nøye. De er ikke alltid veldig pedagogiske, men de forteller deg som regel noe. Vertices skal være 2D, du oppgir 3D-koordinater. Jeg bruker ikke matplotlib og vet ikke hva den mener med 5 i "5,3" ettersom du oppgir 4 vertices, men 3-eren tyder også på at du oppgir feil antall dimensjoner.
Vis hele sitatet...
Ja det var feil i dimensjonene.

Er litt tilbake på dictionaries igjen nå og har et spørsmål.
Har en dictionary som ser ut som

Kode

E1={'z':1,'A':2,'m':2.0}
E2={'z':4,'A':6,'m'=5}
osv til E12

Nå lurer jeg på hvordan jeg ska aksesse disse verdiene for Z,A,m gjennom en array eller for loop kjøre

Kode

f(A,Z)=ZK1+(A-Z)K2
K1,k2konstanter

Kanskje det går å få E1,..E12 oppdelt i to arrayer-en for strings og en for double?men ser ikke hvordan. Og den tanken virker litt komplisert.

Edit: skal være 'm':5 i dictionary E2
Sist endret av gatenavn2; 15. juni 2022 kl. 15:57. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
ओम नमो नारायण
Dodecha's Avatar
DonorCrew
Jeg koder ikke python en gang og fant fort ut at å hente elementer ut av dictionaries gjøres slik:

Kode

HenteZ = E1.get("z")
Om du skal ha z verdien, kilde: https://www.w3schools.com/python/ref_dictionary_get.asp

Det her er særdeles elementære greier du burde klare å finne ut på egen hånd, eller for å si det slik: Det er 90% av jobben som en utvikler å drive å finne ut av hvordan ting fungerer selv, ved å lære seg å søke skikkelig.
Sist endret av Dodecha; 15. juni 2022 kl. 16:42.
Trådstarter
19 2
Sitat av Dodecha Vis innlegg
Jeg koder ikke python en gang og fant fort ut at å hente elementer ut av dictionaries gjøres slik:

Kode

HenteZ = E1.get("z")
Om du skal ha z verdien, kilde: https://www.w3schools.com/python/ref_dictionary_get.asp

Det her er særdeles elementære greier du burde klare å finne ut på egen hånd, eller for å si det slik: Det er 90% av jobben som en utvikler å drive å finne ut av hvordan ting fungerer selv, ved å lære seg å søke skikkelig.
Vis hele sitatet...
Jo ser den men finner ikke noe Google-result på akkurat hvordan loope genom denne prossessen for å hente ut alle verdiene og få de insatt i en formel. Mener noe som dette fra siste eksempel:

Kode

E1={'Z':1,'A':2,'m':2.0}
    E2={'Z':4,'A':6,'m'=5}
    E2=osv til E100
Formel som bruker alle verdiene er

Kode

f(A,z,m)=Z*K1+(A-Z)*K2 +mZ  ,k1,k2
konstanter.

for E1 er tallverdien for

Kode

Z: E1['Z']
 A: E1['A']
 m: E1['m']
Da blir

Kode

 f(A,Z,m)=E1['z']*k1+(E1['A']-E1['Z'])*k2 +mE1['Z']
Men hvordan gjøre dette med en for loop da jeg har E1,..,
E100?
pseudokode:

Kode

f=[]
for A,Z,m in E1..E100:
     f=E1['z']k1+(E1['A']-E1['Z'])k2 +mE1['Z']
For loopen skal altså hente ut Z,A,m fra alle de 100 dictionariene og så for triplett av Z,A,M i E1 beregne f(A,z,m)
gjenta for neste triplett Z,A,m i E2 osv opp till E100
Sitat av gatenavn2 Vis innlegg
Jo ser den men finner ikke noe Google-result på akkurat hvordan loope genom denne prossessen for å hente ut alle verdiene og få de insatt i en formel. Mener noe som dette fra siste eksempel:

Kode

E1={'Z':1,'A':2,'m':2.0}
    E2={'Z':4,'A':6,'m'=5}
    E2=osv til E100
For loopen skal altså hente ut Z,A,m fra alle de 100 dictionariene og så for triplett av Z,A,M i E1 beregne f(A,z,m)
gjenta for neste triplett Z,A,m i E2 osv opp till E100
Vis hele sitatet...
Det er sjelden god praksis å ha 100 variabler. Samle dem heller i en liste, eller en annen passende datastruktur. Da er det også lett å loope over. Her er et eksempel:

Kode

def f(A, Z, m, k1, k2):
    return Z * k1 + (A - Z) * k2 + m * Z


k1, k2 = 3, 4
parametere = [
    {'Z': 1, 'A': 2, 'm': 2},
    {'Z': 4, 'A': 6, 'm': 5},
    {'Z': 3, 'A': 4, 'm': 4}
]

resultater = []
for e in parametere:
    resultater.append(f(e['A'], e['Z'], e['m'], k1, k2))

print(resultater)
# >>> [9, 40, 25]
Kan du ikke ha E1, E2 osv i et array/dictionary også? Også loope gjennom.

Kan ikke Python, men sånn ville jeg gjort det i PHP:

Kode

<?php

$list = [
  'E1' => [
    'Z': 1,
    'A': 2,
    'm': 2.0
  ],
  // osv.
];

foreach ($list as $key => $value) {
  // $key er E1, $value er et array med Z, A og m.
  // Kjør kalkulering.

}
Trådstarter
19 2
Sitat av Realist1 Vis innlegg
Det er sjelden god praksis å ha 100 variabler. Samle dem heller i en liste, eller en annen passende datastruktur. Da er det også lett å loope over. Her er et eksempel:

Kode

def f(A, Z, m, k1, k2):
    return Z * k1 + (A - Z) * k2 + m * Z


k1, k2 = 3, 4
parametere = [
    {'Z': 1, 'A': 2, 'm': 2},
    {'Z': 4, 'A': 6, 'm': 5},
    {'Z': 3, 'A': 4, 'm': 4}
]


resultater = []
for e in parametere:
    resultater.append(f(e['A'], e['Z'], e['m'], k1, k2))

print(resultater)
# >>> [9, 40, 25]
Vis hele sitatet...
Takk så mye-kjempebra forklart!
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.
Trådstarter
19 2
Sitat av Realist1 Vis innlegg
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.
Vis hele sitatet...
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?
Trigonoceps occipita
vidarlo's Avatar
Donor
Med fare for å framstå som arrogant: kvifor prøver du ikkje?

Programmering handler i veldig stor grad om å ... løyse problemer. Grunnen til at det stortsett er godt betalte jobber er at løysinga ikkje alltid er opplagt, og at ein må tenke ut løysinga sjølv. Men: det å loope gjennom eit array med ei for-løkke er jo grunnleggjande? Det er basiskunnskap. Ettersom du skriver python; har du gått gjennom t.d. Dive Into Python eller tilsvarande grunnleggjande opplæring i språket?

Og med å prøve, så tenker eg at det er lurt å skrive eit utgangspunkt for korleis du trur du bør loope gjennom. Start utkastet ditt i debuggeren, slik at du kan sjå kva dei ulike variablane er når du køyrer gjennom programmet. Då bør du rimeleg fort sjå eit mønster som gjer at du kan korrigere utgangspunktet ditt slik at det stemmer med terrenget.
Sist endret av vidarlo; 20. juni 2022 kl. 00:49. Grunn: Automatisk sammenslåing med etterfølgende innlegg.
Bare for å sette posten til Vidarlo litt i perspektiv, lærer meg C/C++

Satt opp en webserver med ESP8266 og måtte definere IP adresse.

Skrev adressen som jeg vanligvis ville gjort: 192.168.x.x

I 3 (TRE) dager reiv jeg nesten hårene fra rota. Koden forventet komma i ip adressen

Det beste du gjør for deg selv er å som nevnt over, test, test, test, kaffe og 14 døgn med testing til med tilhørende 14 kaffekanner