What is the purpose of Boarding Points on Indian railways tickets?

In most of the world, if you want to travel from A to B, you buy a ticket from A to B and that’s it.

However, in India, it’s possible to buy a ticket from X to B, designate a Boarding Point in A somewhere along the way, and board the train at A. Makemytrip explains how this works:

What is a boarding point?

You can choose a boarding point, from where you will board the train. This can be any station between the Reservation From station and Reservation Upto station. By default, you Reservation From station is also your boarding point.

While you may choose a boarding point as any station on the route of the train, you would have to pay the fare as applicable for Reservation From – Reservation To stations. For example, if you are booking a ticket from Mumbai Central to New Delhi and choose the boarding point as Kota Jn, then you can board the train only at Kota Jn and not between Mumbai Central and Kota Jn. You would however have to pay the fare for Mumbai Central to New Delhi

The question left unanswered is why would you want to do this? It would seem much more logical and cheaper to just buy a ticket from Kota Jn to New Delhi.

Flexibility in timing on pre-booked nsb.no train tickets?

If travelling around Norway via train using pre-booked tickets from nsb.no, are the tickets explicitly ONLY valid for the stated train departure, or would they be valid on an equivalent route?

eg. If I miss an r10 train from Oslo airport to Oslo S, could I catch any r10 train? Any similar train (eg. the r11)? Or would I pay a penalty?

Thanks!

Purchasing tickets for a ferry

This is a program to purchase tickets for a ferry. There are two classes – business and economy. I am wondering what is a better way to write this piece of code. Honestly I want someone to review my whole code file and give me feedback on things I can improve. I just want to improve my coding ability and become a better and efficient coder by learning from the mistakes that I make.

import datetime import json import os from colorama import Fore, Back from colorama import init  # Clears commandline screen for windows  init()  def clear_screen():     def clear(): return os.system('cls')     clear()  # Returns Time of the trip   def get_time():     while (True):         clear_screen()         print_purchasing_header()         try:             time = int(input("""Enter time of departure (24-hour):         1. 10:00         2. 11:00         3. 12:00         4. 13:00         5. 14:00         6. 15:00         7. 16:00         8. 17:00\n\nEnter selection: """))             if (time == 1):                 return 10             elif (time == 2):                 return 11             elif (time == 3):                 return 12             elif (time == 4):                 return 13             elif (time == 5):                 return 14             elif (time == 6):                 return 15             elif (time == 7):                 return 16             elif (time == 8):                 return 17             else:                 input(                     "Please enter valid choice.. press [Enter] to continue . . . ")          except ValueError:             input("Please Enter a Number only! Press [Enter] to try again. .")  # Returns destination for the trip   def get_destination():     while (True):         clear_screen()         print_purchasing_header()         try:             destination_choice = int(input("""Select your destination :         1.Penang - Langkawi         2.Langkawi - Penang\n\nEnter selection :"""))              destination = None             if (destination_choice == 1):                 destination = "Langkawi"                 return destination             elif (destination_choice == 2):                 destination = "Penang"                 return destination             else:                 input("Invalid Number...Press [Enter] to try again. .")         except ValueError:             input("Please enter a Number only! Press [Enter] to try again. . ")  # Returns the name of the customer   def get_name():     while (True):         customer_f_name = input("Enter your first name: ")         customer_m_name = input(             "Enter your middle name(if no middle name leave blank): ")         customer_l_name = input("Enter your last name: ")         customer_name = customer_f_name + " " + customer_m_name + " " + customer_l_name         if customer_f_name.isalpha() and customer_l_name.isalpha():             return customer_name  # Create list of tuples that contains (1st trip time, 2nd trip time)   def create_timeslot():     time_slot = []      for time in range(10, 18, 1):         time_slot.append((time - 9, time))      return time_slot  # Creates list with [source, destination, (different time slots)]   def create_schedule_penang(time_slot):     schedule_penang = []      for trip_penang in range(0, 8, 1):         schedule_penang.append(["Langkawi", "Penang", time_slot[trip_penang]])      return schedule_penang  # Creates list with [source, destination, (different time slots)] # This Function can be generalized to allow the user to create # Schedule for more than one destination   def create_schedule_langkawi(time_slot):     schedule_langkawi = []      for trip_langkawi in range(0, 8, 1):         schedule_langkawi.append(             ["Penang", "Langkawi", time_slot[trip_langkawi]])      return schedule_langkawi  # Creates a mapping of ferry number to schedules # of different destinations   def create_ferry_schedule(schedule_langkawi, schedule_penang):     ferry_schedule = {}      for item in range(0, 8, 1):         ferry_schedule['FERRY' + " " + str(item + 1)] = schedule_langkawi[item]         ferry_schedule['FERRY' + " " + str(item + 9)] = schedule_penang[item]      return ferry_schedule  # Creates dictionary containing seating arrangement # Key = Seat Number and Value = Booked[1]/Unbooked[0] # Initially all seats are unbooked   def init_ferry():     ferry = {}     # Could replace 11 by N to accommodate more seats     for business_seats in range(1, 11, 1):         if business_seats >= 10:             business_seats = 'B' + str(business_seats)         else:             business_seats = 'B0' + str(business_seats)         ferry[business_seats] = 0     # Could replace 40 by M to accommodate more seats     for economy_seats in range(1, 41, 1):         if economy_seats < 10:             economy_seats = 'E0' + str(economy_seats)         else:             economy_seats = 'E' + str(economy_seats)         ferry[economy_seats] = 0     return ferry  # Creates a list of ferries containing dictionaries # created by init_ferry function # Hardcoded to create 8 Ferries only   def create_ferry_list(ferry):     list_of_ferry = {}     # Could replace 9 by no_of_ferries for more ferries     for ferry_number in range(1, 17, 1):         list_of_ferry['FERRY' + " " + str(ferry_number)] = ferry     return list_of_ferry  # Returns the ferry schedule dictionary containing # ferry number and schedule   def get_ferry_schedule():     ferry_schedule = create_ferry_schedule(create_schedule_langkawi(create_timeslot()),                                            create_schedule_penang(create_timeslot()))     return ferry_schedule  # Returns ferry ID of the ferry associated with the # customers choice of destination and time   def auto_select_ferry(destination_choice, time_choice):     ferry_schedule = get_ferry_schedule()     for ferry_id, schedule in ferry_schedule.items():         destination = schedule[1]         if destination_choice == destination:             time_slot = schedule[2]             for time in time_slot:                 if (time_choice == time):                     return ferry_id   def get_source(destination_choice):     ferry_schedule = get_ferry_schedule()     for ferry_id, schedule in ferry_schedule.items():         destination = schedule[1]         if destination_choice == destination:             return schedule[0]  # Returns whether ferry is full or not   def is_ferry_full(ferry_id, ferry_list):     for ferry_number, ferry in ferry_list.items():         if ferry_number == ferry_id:             for seat_number, availability in ferry.items():                 if availability == 0:                     return False                 elif availability == 1:                     continue             return True  # Returns if business/economy zone seats are available or not   def is_zone_available(ferry_id, type_of_seat, ferry_list):     ferry = ferry_list[ferry_id]      business = list(ferry)     economy = list(ferry)     if (type_of_seat == "BUSINESS"):         business = business[:10]         for seat in business:             if ferry[seat] == 0:                 return True         return False     else:         economy = economy[10:]         for seat in economy:             if ferry[seat] == 0:                 return True         return False  # Returns if seat chosen by customer is available or not   def is_seat_available(ferry_id, customer_seat, ferry_list):     for ferry_number, ferry in ferry_list.items():         if ferry_number == ferry_id:             for seat_number, availability in ferry.items():                 if seat_number == customer_seat and availability == 0:                     return True                 elif seat_number == customer_seat and availability == 1:                     return False                 else:                     continue  # Returns seating arrangement   def display_ferry_seats(ferry_id, ferry_list):     clear_screen()     ferry = ferry_list[ferry_id]     date = datetime.datetime.now().strftime("%d-%m-%Y")     count = 0  # used to format the output so that after every 5 seats there is a \n or line-break     print("-" * 65 + "\n\t\t\tSEATING ARRANGEMENT\n" + "-" * 65 + "\n")     print("Ferry ID: {} \t\t\t\t Date: {}".format(ferry_id, date))     print(Fore.YELLOW, "\n" + "-" * 65           + "\n\t\t\tBUSINESS CLASS\n" + "-" * 65, Fore.RESET)     for seat_number, availability in ferry.items():         count += 1         if availability == 0:             seat_color = Back.BLUE         else:             seat_color = Back.RED         if count % 5 != 0:             print(Back.RESET, " ", end=' ')             print(seat_color, "* {} * ".format(seat_number, availability), end=' ')         if count == 10:             print(Back.RESET, " ", end=' ')             print(seat_color, "* {} * ".format(seat_number, availability), end=' ')             print(Back.RESET, Fore.CYAN, "\n" + "-" * 65 +                   "\n\t\t\tECONOMY CLASS\n" + "-" * 65, Fore.RESET)         elif count % 5 == 0:             print(Back.RESET, " ", end=' ')             print(seat_color, "* {} * ".format(seat_number, availability), end=' ')             print("\n")     print(Back.RESET, "\nB = Business Seats \t\t E = Economy Seats")     print(Back.RED, "RED", end=' ')     print(Back.RESET, "= Booked Seats\t\t", end=' ')     print(Back.BLUE, "BLUE", end=' ')     print(Back.RESET, "= Available Seats")     input("Press [Enter] to continue. . .")  # Books an available seat and updates the dictionary and saves to file   def assign_seat(ferry_id, customer_seat, ferry_list):     if is_ferry_full(ferry_id, ferry_list):         print("The ferry is full next ferry is in one hour")     else:         if is_seat_available(ferry_id, customer_seat, ferry_list):             for ferry_number, ferry in ferry_list.items():                 if ferry_number == ferry_id:                     for seat_number, availability in ferry.items():                         if seat_number == customer_seat:                             ferry_list[ferry_id][customer_seat] = 1                             save_to_file(ferry_list)         else:             return "Seat not available"   def print_purchasing_header():     print("-" * 60, "\n\t\t\tPurchasing Module\n" + "-" * 60)   def prompt_user_seat(seat_type, seat_string, ferry_id, ferry_list):     while (True):         clear_screen()         display_ferry_seats(ferry_id.upper(), ferry_list)         seat_text = seat_string         try:             seat_number = input("\nType the seat number"                         + seat_text + ": ")  # Add input validation             seat_number = seat_number.upper()             count = 0             for ferry_number, ferry in ferry_list.items():                 if ferry_number == ferry_id:                     for seat, availability in ferry.items():                         count += 1                         if seat_type == "BUSINESS" and count > 0 and count <= 10:                             if seat == seat_number:                                 return seat_number                         elif seat_type == "BUSINESS" and count > 10:                             input("Please enter seats between [B01-B10]..Press [Enter] to Continue. .")                             break                         elif seat_type == "ECONOMY" and count > 10:                             if seat == seat_number:                                 return seat_number                         elif seat_type == "ECONOMY" and seat_number[0] == 'B' and count <= 10:                             input("Please enter seats between [E01-E40]..Press [Enter] to Continue. .")                             break         except:             input("Please input a valid seat number..Press [Enter] to Continue. .")   def get_type_of_seat():     while (True):         clear_screen()         type_of_seat = input("""Select Type of Seat:         B - Business         E - Economy Type the letter of the desired class of seat[Ex: B for Business] >> """)         if type_of_seat.upper() == "B":             return "business"         elif type_of_seat.upper() == "E":             return "economy"         else:             input(                 "Please enter only [B or E]. . Press [Enter] to try again. . . ")   def get_seat(type_of_seat, ferry_id, ferry_list):     while (True):         if type_of_seat == "BUSINESS":             example_string = "[Ex: B04]"         else:             example_string = "[Ex: E06]"         seat_number = prompt_user_seat(type_of_seat, example_string, ferry_id, ferry_list)         seat_number = seat_number.upper()         if (is_seat_available(ferry_id.upper(), seat_number, ferry_list)):             assign_seat(ferry_id.upper(), seat_number, ferry_list)             return seat_number         else:             input("Seat is not available please choose another seat!")  # Optimize this function   def purchase_menu():     clear_screen()     print_purchasing_header()     ferry_list = file_exists()     customer_name = get_name()     destination_choice = get_destination()     time_choice = get_time()     ferry_schedule = get_ferry_schedule()     ferry_id = auto_select_ferry(destination_choice, time_choice)     if is_ferry_full(ferry_id, ferry_list):         input(             "Sorry the ferry is full, next ferry departs in 1 hour!\nPress [Enter] to Continue. . . ")         main_menu()     else:         type_of_seat = get_type_of_seat()         type_of_seat = type_of_seat.upper()         if type_of_seat == "BUSINESS":             if is_zone_available(ferry_id.upper(), type_of_seat, ferry_list):                 seat_number = get_seat(type_of_seat, ferry_id, ferry_list)             else:                 type_of_seat = "ECONOMY"                 if is_zone_available(ferry_id.upper(), type_of_seat, ferry_list):                     choice = input(                         "Business zone is fully booked, is it okay to be placed in Economy Class? Type and Enter['Yes' or 'No'] >> ")                     if choice.upper() == "YES":                         seat_number = get_seat(                             type_of_seat, ferry_id, ferry_list)                     elif choice.upper() == "NO":                         input(                             "Next Ferry is in 1 hour\nPress [Enter] to Continue. . . ")                         main_menu()                     else:                         input("Invalid input...Press [Enter] to try again. .")                         seat_number = get_seat(                             type_of_seat, ferry_id, ferry_list)                 else:                     input(                         "Ferry is full, next ferry is in 1 hour\nPress [Enter] to Continue. . . ")                     main_menu()         else:             if is_zone_available(ferry_id.upper(), type_of_seat, ferry_list):                 seat_number = get_seat(type_of_seat, ferry_id, ferry_list)             else:                 type_of_seat = "BUSINESS"                 if is_zone_available(ferry_id.upper(), type_of_seat, ferry_list):                     choice = input(                         "Economy zone is fully booked, is it okay to be placed in Business Class? ['Yes' or 'No'] ")                     if choice.upper() == "YES":                         seat_number = get_seat(                             type_of_seat, ferry_id, ferry_list)                     elif choice.upper() == "NO":                         input(                             "Next Ferry is in 1 hour\nPress [Enter] to Continue. . . ")                         main_menu()                     else:                         input("Invalid input... Press [Enter] to try again. .")                         seat_number = get_seat(                             type_of_seat, ferry_id, ferry_list)                 else:                     input(                         "Ferry is full, next ferry is in 1 hour\nPress [Enter] to Continue. . . ")                     main_menu()     source = get_source(destination_choice)     date = datetime.datetime.now().strftime("%d-%m-%Y")     time_choice = str(time_choice) + ":00"     print_boarding_ticket(customer_name, source, destination_choice,                           date, time_choice, type_of_seat, seat_number, ferry_id)   def view_seating():     while (True):         clear_screen()         selection = input("-" * 60 + "\n\t\t\tSEATING ARRANGEMENT MODULE\n" + "-" * 60 + """         F - To select Ferry ID         M - Return to Main Menu Please enter one of the Options[F or M]: """)         if (selection.upper() == "F"):             ferry_menu()         #elif (selection.upper() == "T"):             #trip_time_menu()  # Need to make menu         elif (selection.upper() == "M"):             main_menu()         else:             input(                 "Invalid Input! Please try again... Press [Enter] to Continue. . . ")   def ferry_selection(ferry_list):     while (True):         clear_screen()         try:             print("\nSELECT A FERRY TO VIEW THE SEATING ARRANGEMENT\n\n")             for number, ferry_number in enumerate(ferry_list):                 print(number + 1, "-->", ferry_number)             print("\n")             selection = int(                 input("Enter the number to view the associated ferry seating [Ex: 2] >> "))             if (selection > 0 and selection < 17):                 return selection             else:                 input(                     "Please enter number between 1 and 16.. Press [Enter] to Continue. .")         except ValueError:             input("Please enter numbers only! Press [Enter] to continue. .")   def chosen_ferry(selection, ferry_list):     for number, ferry_number in enumerate(ferry_list):         if (selection == number):             return ferry_number         else:             continue   # Improve this function def ferry_menu():     ferry_list = file_exists()     while (True):         clear_screen()         selection = ferry_selection(ferry_list)         ferry_id = chosen_ferry(selection - 1, ferry_list)         if ferry_id.upper() in ferry_list:             display_ferry_seats(ferry_id.upper(), ferry_list)             break         else:             input("Enter valid ferry number! Press [Enter] to try again. .")   def main_menu():     while (True):         clear_screen()         selection = input("-" * 60 + "\n\t\t\tMain Menu\n" + "-" * 60 + """         P - To Purchase Ticket         V - To View Seating Arrangement         Q - To Quit the System Please Enter one of the Options[P or V or Q]: """)         if (selection.upper() == "P"):             purchase_menu()         elif (selection.upper() == "V"):             view_seating()         elif (selection.upper() == "Q"):             while True:                 choice = input(                     "Are you sure you want to quit?(Y - Yes or N - No) >> ")                 if choice.upper() == 'Y':                     quit()                 elif choice.upper() == "N":                     main_menu()                 else:                     input("Please answer with Y or N.. ")                     clear_screen()         else:             input(                 "\nInvalid Input!\nPlease try again...Press [Enter] to Continue. . . ")  # Checks whether ferryseats.json file exists which # is the File used to save data of seating arrangement # If it doesn't exists a new file is created with # All seats initially unbooked   def file_exists():     if data_path_exists():         try:             with open('data/ferryseats.json') as seats_data:                 ferry_list = json.load(seats_data)             return ferry_list         except FileNotFoundError:             with open('data/ferryseats.json', 'w') as file:                 json.dump(create_ferry_list(init_ferry()), file)         finally:             with open('data/ferryseats.json') as seats_data:                 ferry_list = json.load(seats_data)             return ferry_list  # Checks Whether Folder 'data' exists # If it doesn't creates the folder   def data_path_exists():     if os.path.exists('data'):         return True     else:         os.mkdir('data')         return True   def save_to_file(ferry_list):     with open('data/ferryseats.json', 'w') as file:         json.dump(ferry_list, file)   def read_from_file():     with open('data/ferryseats.json') as seats_data:         ferry_list = json.load(seats_data)     return ferry_list   def print_boarding_ticket(customer_name, source, destination, date, time, type_of_seat, seat_number, ferry_number):     clear_screen()     print("-" * 60 + "\n\t\t\tBOARDING TICKET\n" + "-" * 60)     print("Customer Name: {}\nSource: {}\t\t\tDestination: {}\nDate: {}\t\t\tTime: {}\nType Of Seat: {}\t\t\tSeat Number: {}\nFerry ID: {}".format(customer_name, source,                                                                                                                                                      destination, date, time,                                                                                                                                                      type_of_seat, seat_number,                                                                                                                                                      ferry_number))     print("-" * 60 + "\n")     input("Press [Enter] key to return to main menu. . . ")   main_menu() 

What are the pros/cons of airlines selling tickets on a futures market?

Suppose the following were possible:

  • Airline stops selling seats to the general public
  • Airline advertises a route consisting of a # of seats (not necessarily any specific airplane) from a source to a destination, and offers all the seats like shares of a stock.
  • Any approved investor can buy these “shares” and sell them to other investors, or to approved travelers
  • Markets are created for investors to shoulder the risk (and reap the reward) of sold/unsold tickets.
  • This would allow airlines to smooth out volatility in booking as well as better balance their pax load. For instance, they could start with selling 50 seats from A to B 30 days from travel date. This would normally be flown using an RJ, but if demand grew subtantially, the airline could swap it with a ’37 and sell 100 more seats on the open market. This may seem to hurt original investors, but those same investors are free to buy shares in the extra 100-seat capacity. If the airline gets too greedy, they will lose because they flew a half-empty plane, so they have to be judicious in upgrading.
  • Shares (tickets) expire on the travel day, just like stock options expire on options clearing day. This means that investors must unload them on or before this date. Just like oil or corn futures. At the end, someone has to actually use them, or else the investor is out his investment, so he has to be careful to correctly gauge demand.
  • This would cause either an increasing or decreasing pattern in share prices. At first there is a higher risk that the seat will go unsold 30 days from travel date, but the longer you market the share there is more time more time for a traveler (or other investor, theoretically one shouldn’t care who buys the share) to purchase it.
  • An insurance policy would need to be created for weather or mechanical delays. This could be funded by “short-sellers” who essentially write insurance. Or else this could be funded by the airlines via a contract that a canceled flight means they must offer an equivalent “share” as soon as they possibly can, or else buy back all the shares at a very high cost.
  • “short selling” (not in the literal sense, but investors who buy an opposing instrument that obligates them to pay for a cancellation but pays them when everything is fine) would allow speculators to profit on weather forecasting while paying into (what is essentially) insurance that helps stranded travellers. “short sellers” could also speculate by buying shares near suspected blackout-dates. This might seem bad for travellers (driving costs up from speculation) but it also creates liquidity in the market and provides airlines an incentive to offer more flights. Consider that if 5% of all seats were purchased by speculators, that creates 5% extra capacity when there are weather or other cancellations. The rest of the time the capacity would be sold at the last minute, possibly at a loss.
  • Regular travellers wouldn’t notice a difference. They’d still book their flights online at the current travel sites. (or even via the airline itself, if a traveler is willing to pay X% more than an investor for the share, good for them).
  • Investors could profit by finding market inefficiencies, airlines could profit by having more guaranteed revenue for their flights. Travelers could profit by placing live orders on the open market at the price they are willing to pay (sorry for echoing the tagline of a popular travel website here). If their order is filled, they go. If they are less price-sensitive, they could put in a market order and have it filled immediately.
  • Cargo could be sold on another market, so that theoretically, a traveller might be willing to fly for half-price if they weren’t allowed a checked bag. The bag capacity would be sold to a shipping company/post office, or to another passenger who needed to take 3 bags.
  • It would create a market to “easily” start an airline. Rather, it creates a market for charter airlines to offer ‘a la carte’ routes. If there is a huge demand for travel to Hawaii in January, any properly certified carrier could sell shares on that route, and stop as soon as it’s no longer profitable. The existence of this share market might make investors less squeamish about leasing and insuring a jet and making money with it when there is a direct, standardized way to monetize the invstment.

Assuming the obvious problems are somehow taken care of (screening travellers, making sure the market is trustworthy, etc ) I see a few drawbacks right away:

  • possibly no brand association (although that could be built into the market, Delta would command a 5% premium over United or Spirit, for instance. United would have a direct financial incentive to increase customer satisfaction because they can charge more for their shares )
  • No rewards programs/credit card miles
  • A very specific procedure would have to be figured out, regarding who gets paid when a flight is cancelled. Does the traveller get $ 100 and put on the next plane ? Where does that money come from and how is it dispensed equitably.
  • ability for travellers to sit together would have to be agreed upon (whether the market handles it, or its offered in good faith by the airline, or volunteered upon by a community of travellers and software: “here’s who wants to be seated next to each other, here’s the volunteers that are willing to swap seats”).
  • Assigned seats would be difficult or impossible since the aircraft type could change. This would bother a lot of people, but a proper swapping system could be arranged. This also includes sitting in front, not wanting to be near the lavatory, etc.
  • first/business/coach class would be hard to handle. There may need to be a separate market for each class, or it could devalue 1st class because “undesirable” people may wind up lucking out and upgrading to first class cheaply. “Premium” travellers may stop using the service because of who ends up sitting next to them.
  • amateur investors could lose a lot of money. Investors would trade shares in an online brokerage,and if you bought too many shares and couldn’t unload them in time, or had to sell them at a loss, you would definitely lose money. Trading shares wouldn’t be offered to most travellers (but they could easily cancel their flight by selling them on the open market).
  • it would take a critical mass of investors/travellers for this to work. There would need to be an order book with a list of people willing to buy and sell shares at various prices. Liquidity is important.
  • it would strip airlines of side rackets like charging for bags, assigned seats, “extra legroom”, etc. I’m putting this as a negative because it takes revenue from the carrier, not because I think those rackets are good for travelers.
  • There would need to be a standardization of what constitutes an “airline”, i.e. proper passenger service. A lot of this is covered under FAA, but everything would need to be guaranteed so travellers knew they were getting a standard product.

So I’m curious if this has been considered before and what else is wrong with using this model of travel? Sorry if this is the wrong place to ask. I realize it’s more of a logistics/economics question. I just wanted to put it out there and discuss it.

Can I get cheaper plane tickets by using a VPN?

Use NordVPN to get cheaper tickets on KAYAK?

In a Youtube video by ADVChina, the speaker is recommending to use a VPN in China for various reasons, and to sign up using his referral code.

He says there are various practical uses including “You could also go and get cheaper plane tickets by hopping around different countries.” and shows a screenshot of a flight website called KAYAK, with the VPN software changing his country to Italy.

Is it possible to get cheaper plane tickets by using a VPN in this way? I’ve never heard of KAYAK, but if I use something like Skyscanner, is it common for tickets to be priced differently depending on which country the user’s IP is from?

Is it because of different taxes in different countries? So could it be illegal to get discounts like this? Or is there some pricing strategy from airlines to charge different amounts depending on the country of purchase?

How often do visitors who are visa exempt but do not hold return/onward tickets are refused entry to Thailand?

According to the Timatic database, which I access through IATA:

Visitors who are visa exempt but do not hold return/onward tickets could be refused entry.

How often do visitors who are visa exempt but do not hold return/onward tickets are refused entry to Thailand? I wonder whether it’s unusual to be refused entry to Thailand on the grounds of not having return/onward tickets. I am a French citizen if that matters.

[ Football (American) ] Open Question : What’s most you would pay for tickets to see a sports game?

Wanna pay for tickets to see a Minnesota Vikings game here in Minnesota!! But they have so many ticket prices!! The cheapest are like 110 bucks and the most expensive are like 615 bucks!! What’s most money you would ever pay to see a sports game??

Advice on booking flight tickets while pregnant

My wife would like to travel for Christmas; she will be 30 weeks pregnant (from last period) at that moment. The policy of most airlines is that women that are between 28 and 36 weeks pregnant are allowed to travel, but ONLY if they have a medical certificate. (I assume that the airlines count the number of week from the last period, and not from fertilization – if I am mistaken please correct me!) This certificate has to be recent (a few days), so waiting until we have the certificate before booking the flight (around Christmas!) is not really an option. So to decide whether to book the ticket or not, we would like to know: what are the a-priori odds, for a pregnant woman, to fail to get such a “fit-to-fly” medical certificate before flying? (Our personal cut-off would be somewhere around 5 or 10%, I guess.)

There are two ways things could go awry:

  • The doctor refuses to provide the certificate for genuine medical reasons. If we had a list of the most common contraindications for flying, we could of course research how likely to develop each of them is, and get a reasonable overall estimate. However, we do not know this. The airlines’ terms and conditions are not very helpful in this respect: they provide only generic language (see excerpt below).

  • We could fail to get this form for bureaucratic reasons: e.g. the airline refuses the doctor’s letter because it fails to meet some formal criteria, or the doctor asks us to do a series of tests that we cannot complete in time, or refuses to provide the letter until we clarify the too-generic language, etc. Any first-hand experience would be appreciated here. (If it matters, we currently live in Russia.)

Here are the relevant passages from the terms and conditions of two of the airlines we are considering. (They also have clauses that forbid flying after 36 weeks; but this is outside the scope of this question.)

Pobeda:

Women after the 28th week of pregnancy are allowed on flights ONLY when providing a medical certificate authorizing air travel, as well as a completed guarantee obligation in the check-in process.

Ryanair:

Expectant mothers are free to fly up to 28 weeks of pregnancy. Once an uncomplicated pregnancy reaches its 28th week we require expectant mothers to carry a ‘fit to fly’ letter completed by their midwife or doctor.

Download the fit to fly template letter here.

(Their “fit to fly template letter” asks only for generic informations: expected due date, a single checkbox for “the pregnancy is uncomplicated” and a single checkbox “the patient is fit to fly”).