简体   繁体   中英

Finding the values corresponding with user input from a list of tuples

As a foreword, I'm quite new to python, and coding in general.

I'm trying to get the following code to find the specific values in the foodgroups tuple that match with user input (ie: Dairy, Nuts, and Grain) and attach them to Output (ie: Dairy and Nuts). The line with Output was gotten from another website when I was first making this. The code works when the user provides an input that only contains one item without any symbols or spaces (ie: Dairy) but anything extra causes Output to be blank when printed.

userinput = input("Enter foodgroups ate in the last 24hrs : ").title()
foodgroups = ("Dairy","Nuts","Seafood","Chocolate")

Output = list(filter(lambda x:userinput in x, foodgroups))

if foodgroups[0] or foodgroups[1] or foodgroups[2] or foodgroups[3] in userinput:
  print(Output,"is present in your list, " + userinput)
else:
  print("Negative.")

I've thought of swapping around foodgroups and userinput , but that results in a TypeError, and turning the tuple into a string has Output always return blank.

I've asked others how to fix this, but they've had no better luck. Any help is appreciated!

If userinput is a comma separated string then split it and use a list:

userinput = input("Enter foodgroups ate in the last 24hrs : ")
foodgroups = ("Dairy","Nuts","Seafood","Chocolate")
uin = userinput.split(",")
grp = []
for x in uin:
  if x in foodgroups:
    grp.append(x)

grp is the user defined foods in foodsgroup

The main thing is that you want to use split to separate individual words from the user input into a list of words. I also swapped x and seafoods in your lambda.

If the user separates each word by one or more spaces, here's how to change your code to work:

userinput = input("Enter foodgroups ate in the last 24hrs : ").title()
foodgroups = ("Dairy","Nuts","Seafood","Chocolate")

userfoods = userinput.split()

Output = list(filter(lambda x: x in userfoods, foodgroups))

print(Output,"is present in your list, " + str(userinput))

As other's mention, you need to use split() to separate individual items in the input:

userfoods = userinput.split()

But even after that your if condition isn't correct:

if foodgroups[0] or foodgroups[1] or foodgroups[2] or foodgroups[3] in userinput:

The thing to realize here is that or and in are operators that only work with the immediately adjacent 2 values. We can add parentheses to see how this works:

if (((foodgroups[0] or foodgroups[1]) or foodgroups[2]) or (foodgroups[3] in userinput)):

This means that foodgroups[0] or foodgroups[1] evaluates to just the value of foodgroups[0] , so foodgroups[1] is basically ignored. This isn't what you want. Instead, you need to check in for each item:

if foodgroups[0] in userinput or foodgroups[1] in userinput or foodgroups[2] in userinput or foodgroups[3] in userinput:

But as you can see this gets very lengthy. So using a loop or list comprehension or generator expression can reduce the amount of code you need to write as others have already shown.

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