简体   繁体   中英

Quit while len(int) < 1

I'm new in python, and I'm trying to make a simple quit, if the Input is empty or less then One int. I'm getting an error which says - ValueError: invalid literal for int() with base 10: '', when entering nothing, just a enter on launch.

import sys
import os
import getpass
def clear(): return os.system('clear')
ballance = 500.00
# Garage Stockas
Wood_InStock = 600
Weed_InStock = 300
Gun_InStock = 15
Gun_Ammo_InStock = 500 * 30 # X30 Total 15000
# Kainos
Gun_Ammo_Price = 15.50
Wood_Price = 3.50
Weed_Price = 9.50
Gun_Price = 250.50
# Produktai
medis = '~ Elemental Wood ~'
weed = '~ Indoor Kush ~'
gun = '~ Shotgun  ~'
gun_ammo = '~ Shotgun ammo 30x ~'
# Inventory
Wood_Inventory = 0
Weed_Inventory = 0
Gun_Inventory = 0
Gun_Ammo_Inventory = 0
# No Money
Not_Enough_Money = '~ Sorry you dont have enough money'


while True:
    Shop_Pasirinkimas = int(input("~ What would you like to buy?\n1. {medis}\n2. {weed}\n3. {gun}\n".format(medis=medis,weed=weed,gun=gun)))
    if len(Shop_Pasirinkimas) < 1:
        sys.exit("SOrry")
    elif Shop_Pasirinkimas == 1:
        clear()
        WoodPirkimo_Skaic = int(input("How much {medis} would you like to buy? ".format(medis=medis) + "Wood Now in Stock - {woodins}\n".format(woodins=Wood_InStock)))
        # Price per wood - 3.50
        ballance -= ( Wood_Price * WoodPirkimo_Skaic)
        Wood_Inventory += WoodPirkimo_Skaic
        Wood_InStock -= WoodPirkimo_Skaic
        print("~ In stock of {}, left {}".format(medis,Wood_InStock))
        print("~ Successfully bought {}, Your Ballance is {}\n".format(medis,ballance))
        print('Inventory:')
        print("~ You have {}, of {}\n".format(Wood_Inventory,medis))
        Buymore = input("Would you like to buy anything more?... Yes/No\n")
        if "Yes" in Buymore or "yes" in Buymore:
            continue
        elif "No" in Buymore or "no" in Buymore:
            break
        else:
            break

int(x,base) function will return the integer object from any number or string. Base defaults to 10. If x is the string, its respective numbers should be within possible values with respect to that base.

As, nothing is entered, it's considered as invalid literal.

Hence, Please use the input as string which can solve the issue easily.

Let's look at only this part of the code:

while True:
    Shop_Pasirinkimas = int(input("~ What would you like to buy?\n1. {medis}\n2. {weed}\n3. {gun}\n".format(medis=medis,weed=weed,gun=gun)))
    if len(Shop_Pasirinkimas) < 1:
        sys.exit("SOrry")

The empty user input will be passed to int() , but an empty string cannot be converted to an int! So an error is raised.

What you should instead is to not convert the input to int first, and treat it as a string:

while True:
    Shop_Pasirinkimas = input("~ What would you like to buy?\n1. {medis}\n2. {weed}\n3. {gun}\n".format(medis=medis,weed=weed,gun=gun))
    if len(Shop_Pasirinkimas) < 1:
        sys.exit("SOrry")
    elif int(Shop_Pasirinkimas) == 1: # convert to int here
        clear()
        ...

If user doesn't input an integer you will encounter an exception in Shop_Pasirinkimas = int(input(...)) . Besides int has no len() so this will also cause error len(Shop_Pasirinkimas) . You can do the following to accomplish what you are trying

while True:
    try:
        Shop_Pasirinkimas = int(input("~ What would you like to buy?\n1. {medis}\n2. {weed}\n3. {gun}\n".format(medis=medis,weed=weed,gun=gun)))
        if Shop_Pasirinkimas < 1:
            sys.exit("SOrry")
        elif Shop_Pasirinkimas == 1:
            clear()
            WoodPirkimo_Skaic = int(input("How much {medis} would you like to buy? ".format(medis=medis) + "Wood Now in Stock - {woodins}\n".format(woodins=Wood_InStock)))
            # Price per wood - 3.50
            ballance -= ( Wood_Price * WoodPirkimo_Skaic)
            Wood_Inventory += WoodPirkimo_Skaic
            Wood_InStock -= WoodPirkimo_Skaic
            print("~ In stock of {}, left {}".format(medis,Wood_InStock))
            print("~ Successfully bought {}, Your Ballance is {}\n".format(medis,ballance))
            print('Inventory:')
            print("~ You have {}, of {}\n".format(Wood_Inventory,medis))
            Buymore = input("Would you like to buy anything more?... Yes/No\n")
            if "Yes" in Buymore or "yes" in Buymore:
                continue
            elif "No" in Buymore or "no" in Buymore:
                break
            else:
                break
    except ValueError:
        sys.exit("SOrry")

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM