7 svar
305 visningar
hannabe är nöjd med hjälpen
hannabe 4 – Fd. Medlem
Postad: 15 jun 2021 12:31

Skapa en biljett med while loop

Hej!

Jag ska programmera en biljett i Python där man ska välja biljettyp samt om man vill lägga till/ ta bort väska eller mat. Jag har skapat en while-loop som går så länge man inte väljer att "avsluta" biljetten och få ett kvitto. Det jag har problem med är hur jag ska spara användarens val och kunna skriva ut det på ett kvitto sen. Tänker att jag ska använda listor av något slag där t.ex. val "1" innebär att jag lägger till en väska på kvittot medan "3" betyder att jag vill ta bort väskan som jag la till i loopen innan. Hur skriver jag över mitt val varje gång? Det ska se ut såhär:

Currently you have:
0 bag(s) registered
0 meal(s) registered

Så om jag skriver "1" i min loop ska det stå:

Currently you have:
1 bag(s) registered
0 meal(s) registered

Sen ska jag kunna ändra hur mycket jag vill, lägga till en väska eller ta bort. Lägga till mat eller ta bort osv. 

Såsom jag gör nu använder jag append för att lägga till användarens val i en lista. Men för varje loop så lägger jag till en ny sträng i listan istället för att ersätta. 

Här är ett exempel på om man väljer val "1":

if yourchoice == 1:
addonebag = str('1 bag(s) registered')
choiceslist.append(addonebag)

Då ser output ut såhär:

['1 bag(s) registered']

Men skulle jag sedan välja att jag vill ta bort väskan (val "3") blir output:

['1 bag(s) registered' '0 bag(s)' registered] istället för:

['0 bag(s) registered'] som jag vill ha. Jag vill alltså skriva över förra valet.

Har någon tips på hur jag kan lösa det här? Har testat pop och insert på en specifik plats i listan men det funkar inte...

Tack!

creamhog 286 – Livehjälpare
Postad: 15 jun 2021 13:23 Redigerad: 15 jun 2021 13:39

Jag är inte säker att jag förstår uppgiften. Kan man få upprepade "1", och i så fall måste det se ut som "2 bags registered"?

I så fall vore det bättre att ha en numerisk numbags, och då när du skriver ut kvittot kan du ha '{} bags registered'.format(numbags).

Laguna Online 28587
Postad: 15 jun 2021 14:17

Ja, för att hantera informationen inuti program så gör bara det minimala, t.ex. en variabel för hur många väskor och en variabel för hur många måltider. 

Först när det är dags att skriva ut något lättläst till användaren så sätter du ihop en sträng.

hannabe 4 – Fd. Medlem
Postad: 15 jun 2021 16:04

Hej!

Man ska bara kunna lägga till en väska eller en måltid, glömde skriva det!

Jag gjorde så nu att jag satte bag = 1, meal = 1, bag = 0 och meal = 0 under de olika if-satserna så skrivs det ut beroende på val, så nu funkar det! Tack så jättemycket för snabba svar och hjälp båda två :)

hannabe 4 – Fd. Medlem
Postad: 15 jun 2021 16:34

Hej igen!

Nu ska jag skriva ut kvittot beroende på vad användaren har valt för biljett och tillägg. Dock ska det bara skrivas ut vad användaren har valt, t.ex. bara en väska, en måltid eller båda två. Dock skriver min kod ut kostnad för måltid nu också även om inte måltid har lagts till. Har ni något tips på hur man kan lösa det?

Såhär ser min while-loop ut:

while yourchoice != 5:

if yourchoice == 1:
bag = 1
addbag = str('Bag: 200')

elif yourchoice == 2:
meal = 1
addmeal = str('Meal: 150')

elif yourchoice == 3:
bag = 0

elif yourchoice == 4:
meal = 0

else:
print('\n'
'Invalid option. Please try again.')

print('\n'
f'Currently you have: \n{bag} bag(s) registered \n{meal} meal(s) registered')

options()

yourchoice = int(input('Your choice:'))

# When the user press 5:

print(f'\nReceipt:\nTicket: {ticket} \n{addbag} \n{addmeal} \nTotal: ')

Och såhär ser kvittot ut om jag väljer att bara lägga till en väska:

Receipt:
Ticket: 500
Bag: 200
Meal: 150
Total:

För det jag tänkte var att strängen borde bara skrivas ut om man väljer att lägga till en väska eller en måltid? Men den skriver ut allt ändå.

farfarMats 1092
Postad: 17 jun 2021 19:28

Generellt är det ingen bra idé att ha en variabel att representera det kombinerade utfallet för flera val.

Tänk om du haft 5 frågor då hade du fått testa 32 gånger med ditt upplägg.

Sätt en yourbags och en yourmeals  separat i stället.

 

PS lite överkurs:

Du kan kombinera många ja/nej variabler i en utan att behöva testa så mycket:

starta med 0 lägg till 0 eller 1 beroende på bags och 0 eller 2 för meals och 0 eller 4 för whatever...

sen finns det väl en funktion att testa en bestämd bit i ett heltal i Python ( annars skriv en!)

från en programmerare från den gamla tiden när minne var DYRT och alltid en bristvara

Laguna Online 28587
Postad: 17 jun 2021 20:48

Vad har yourchoice för värde när man börjar?

Kan du indentera programmet korrekt här? Använd kodverktyget som ser ut som {;}.

hannabe 4 – Fd. Medlem
Postad: 17 jun 2021 21:02

Hej!

Jag har lyckats lösa koden nu så allt fungerar! Men du har rätt MatsC, det blir mycket upprepning, ska ta med mig det till nästa program :) 

Tack för all hjälp Laguna!

Svara Avbryt
Close