Behöver akut hjälp i python 3.2.3

Permalänk
Medlem

Behöver akut hjälp i python 3.2.3

Tjena
Håller på att skriva ett program i Python som ska ge förslag på klädval beroende på vilken temperatur som matas in och om det regnar etc.
Har tyvärr kört fast då programmet inte svara det jag vill att det ska göra!:) Till exempel när jag matar in -2 som temperatur så frågar det ändå om det regnar ute. Har säkert lyckats göra något nybörjarfel!
Tacksam för hjälp!
Saitek

temp=int(input('Vad är temperaturen? ')) sol=str(input('Är det soligt ute? (Ja/Nej): ')) if temp>=20 and sol=='Ja' or sol=='ja': print('Ta på dig T-shirt och packa badbyxerna! ') elif temp>0 and sol=='Nej' or sol=='nej': regn=str(input('Regnar det ute?(Ja/Nej): ')) if regn=='ja' or regn=='Ja': print('Ta på dig en regnjacka! ') if temp<15: print('Ta på dig tjocktröja') if temp>=15: print('Ta på dig T-shirt men skippa solkrämmen! ') elif temp<=0 and sol=='Ja'or sol=='ja': snow=str(input('Är det snö ute? (Ja/Nej)')) if snow=='Ja' or snow=='ja': print('Ta på dig dina varmaste kläder och valla skidorna! ') if snow=='nej' or snow=='Nej': print('Ta på dig varma kläder! ') elif temp<=0 and sol=='Nej' or sol=='nej': snow=str(input('Snöar det ute? (Ja/Nej):')) if snow=='Ja' or snow=='ja': print('Ta på dig varma kläder, du slipper att skotta i alla fall! ')

Indragen verkar inte komma med i post:en men de finns i själva programmet

Visa signatur

Spelburk: Intel i5 750 @ ≈3,8ghz I 12GB Ram Radeon 7970 I SSD 120 gb Corsair Force GT I HX650W Corsair I P7P55 LX I Antec three hundred I Noctua NF-12 3x I Antec KÜLER H2O 620 P&P w/ Scythe Gentle Typhoon I Logitech mx518.

http://e-sim.org/lan.97056/

Permalänk
Medlem

Visa oss din kod.

Permalänk
Medlem

testa value = int(raw_input('Gimme a number: '))

Permalänk
Medlem

Postar du i code-taggar försvinner inte indragen..

Tror det är dina if:s som spökar, dom borde se ut så här om jag inte tänker helt fel..

if temp>=20 and (sol=='Ja' or sol=='ja'):

Permalänk
Medlem

Inte svar på frågan men visst fan kan det regna vid -2 °C. Underkylt regn kallas det och är lika otrevligt som det låter.

Permalänk
Medlem
Skrivet av xilli:

Postar du i code-taggar försvinner inte indragen..

Tror det är dina if:s som spökar, dom borde se ut så här om jag inte tänker helt fel..

if temp>=20 and (sol=='Ja' or sol=='ja'):

Just den if-satsen funkar faktiskt! Tror du samma sak kan förstöra senare?

Visa signatur

Spelburk: Intel i5 750 @ ≈3,8ghz I 12GB Ram Radeon 7970 I SSD 120 gb Corsair Force GT I HX650W Corsair I P7P55 LX I Antec three hundred I Noctua NF-12 3x I Antec KÜLER H2O 620 P&P w/ Scythe Gentle Typhoon I Logitech mx518.

http://e-sim.org/lan.97056/

Permalänk
Medlem
Skrivet av gothxx:

testa value = int(raw_input('Gimme a number: '))

Är inte raw_input för äldre python versioner? input har inte spökat innan för mig

Visa signatur

Spelburk: Intel i5 750 @ ≈3,8ghz I 12GB Ram Radeon 7970 I SSD 120 gb Corsair Force GT I HX650W Corsair I P7P55 LX I Antec three hundred I Noctua NF-12 3x I Antec KÜLER H2O 620 P&P w/ Scythe Gentle Typhoon I Logitech mx518.

http://e-sim.org/lan.97056/

Permalänk
Medlem
Skrivet av iXam:

Visa oss din kod.

Hade helt glömt bort det:p tack

Visa signatur

Spelburk: Intel i5 750 @ ≈3,8ghz I 12GB Ram Radeon 7970 I SSD 120 gb Corsair Force GT I HX650W Corsair I P7P55 LX I Antec three hundred I Noctua NF-12 3x I Antec KÜLER H2O 620 P&P w/ Scythe Gentle Typhoon I Logitech mx518.

http://e-sim.org/lan.97056/

Permalänk
Medlem

xilli är på rätt spår.

if temp>=20 and (sol=='Ja' or sol=='ja')

Annars utvärderas den satsen som sann även fast du har en temperatur lägre än 20 när användaren skriver "ja".

Permalänk
Hedersmedlem
Skrivet av Saitek:

sol=='Ja' or sol=='ja':

Ett "trick" som vanligen används för att tillåta "case insensitive"-matchning är att göra jämförelsen efter att man använt någon inbyggd funktion för att ändra skiftläge på hela strängen.

Exempel (i Python 3):

>>> svar = input('Är du en fisk?\n[Ja/nej]: ').upper() Är du en fisk? [Ja/nej]: Nej >>> svar 'NEJ'

Efter `.upper()` så vet du att indata alltid kommer vara i versaler och det räcker att testa `svar` mot "JA" och "NEJ". Det gör din logik och därmed ditt program klart tydligare, och du slipper att försöka täcka varje "Nej"/"nej"/"NEJ"/"NEj"/…-fall i varje test. Alltså räcker nu:

if temp>=20 and sol=='JA': print('Ta på dig T-shirt och packa badbyxerna! ')

Notera att Python 3 automatiskt jobbar med unicodesträngar, och då troligen direkt gör vad du förväntar dig för svar som innehåller t ex "åäö". I Python 2 krävs lite extra handpåläggning för detta.

Ännu bättre är att vid inmatningen kombinera detta med att definiera `sol` som en boolean, dvs "True" eller "False", beroende på användarens input. Då kan du sedan helt enkelt skriva saker som:

if temp>=20 and sol: print('Ta på dig T-shirt och packa badbyxerna! ')

vilket är väldigt tydligt och centraliserar definitionen av "JA" och "NEJ" som motsvarande logiskt "sant" eller "falskt", vilket är vad du faktiskt är intresserad av.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Medlem
Skrivet av phz:

Ett "trick" som vanligen används för att tillåta "case insensitive"-matchning är att göra jämförelsen efter att man använt någon inbyggd funktion för att ändra skiftläge på hela strängen.

Exempel (i Python 3):

>>> svar = input('Är du en fisk?\n[Ja/nej]: ').upper() Är du en fisk? [Ja/nej]: Nej >>> svar 'NEJ'

Efter `.upper()` så vet du att indata alltid kommer vara i versaler och det räcker att testa `svar` mot "JA" och "NEJ". Det gör din logik och därmed ditt program klart tydligare, och du slipper att försöka täcka varje "Nej"/"nej"/"NEJ"/"NEj"/…-fall i varje test. Alltså räcker nu:

if temp>=20 and sol=='JA': print('Ta på dig T-shirt och packa badbyxerna! ')

Notera att Python 3 automatiskt jobbar med unicodesträngar, och då troligen direkt gör vad du förväntar dig för svar som innehåller t ex "åäö". I Python 2 krävs lite extra handpåläggning för detta.

Ännu bättre är att vid inmatningen kombinera detta med att definiera `sol` som en boolean, dvs "True" eller "False", beroende på användarens input. Då kan du sedan helt enkelt skriva saker som:

if temp>=20 and sol: print('Ta på dig T-shirt och packa badbyxerna! ')

vilket är väldigt tydligt och centraliserar definitionen av "JA" och "NEJ" som motsvarande logiskt "sant" eller "falskt", vilket är vad du faktiskt är intresserad av.

Tack så mycket!! koden funkar nu som den ska(och lite bättre);)

Visa signatur

Spelburk: Intel i5 750 @ ≈3,8ghz I 12GB Ram Radeon 7970 I SSD 120 gb Corsair Force GT I HX650W Corsair I P7P55 LX I Antec three hundred I Noctua NF-12 3x I Antec KÜLER H2O 620 P&P w/ Scythe Gentle Typhoon I Logitech mx518.

http://e-sim.org/lan.97056/