How to check a part of an input | Python [duplicate] - python

This question already has answers here:
Understanding slicing
(38 answers)
Closed 1 year ago.
I want to check a specific part of an input but I don't know "where" it is
I tried with this:
a = input('Enter command')
if a[0:5] == '(Command name)':
if a[7:?] == '(Subject)':
if a[?:len(a)] == '(Choice)':
To be continued
So, the input is divided into three parts; The command, the subject, and which type of the command it will run.
But which index should the ? be? I don't know the length of the word. Is it impossible?
No, I know that I can make it, just not how.

I suppose your input should go something like this:
command subject choice
So there are basically three parts(might be more). I suggest you break the input in list as:
a = [str(x) for x in input().split()]
To get the length of each entities:
len(entity)
And for index you can use index():
list.index(entity)

If they are always one word, maybe something like this will work:
terms = a.strip().split(" ")
command_name = terms[0]
subject = terms[1]
choice = terms[2]
if there is a possibility of double spaces, it needs to be more clever
the above is the same as
command_name, subject, choice = a.strip().split(" ")

Related

Basic math in python [duplicate]

This question already has answers here:
How can I read inputs as numbers?
(10 answers)
Closed 1 year ago.
The code below is giving me a return of 25 with inputs of 3 & 4. Obviously it should be 7. This is a problem for school and I can't edit the first 3 lines or the last one. What am I missing here?
total_owls = 0
num_owls_A = input()
num_owls_B = input()
num_owls_A = int(input())
num_owls_B = int(input())
total_owls = (num_owls_A + num_owls_B)
print('Number of owls:', total_owls)
input() returns input value as a string. So, you are basically concatenating strings not integers.
If you want to add them as numbers you need to convert them to numbers first like below
num_owls_A = int(input())
num_owls_B = int(input())
Again, this will create an error, if you input a non-numerical value, so you need to handle the exceptions in such case.

Ask for an input. if input is not a str, ask again [duplicate]

This question already has answers here:
Asking the user for input until they give a valid response
(22 answers)
Closed 2 years ago.
To sum up, I need to ask a question:
If the user doesn't introduce a str, I need the question to be asked repeatly until the use enter a str.
This is what I got so far.
x = input('What is your name? ')
if x != str
x=input('Sorry, you need to introduce a str. What is your name? ')
I believe what you mean is that if the user doesn't input all letters, the program will keep asking for the user's name. You can use the method isalpha() for that:
x = input('What is your name? ')
while not [s.isalpha() for s in x.split()] == [True for s in x.split()]:
x = input('Sorry, you need to introduce a str. What is your name? ')

Why does this code only return 'Greetings!' regardless of input? [duplicate]

This question already has answers here:
How can I read inputs as numbers?
(10 answers)
Closed 2 years ago.
I'm working through some practice questions in the book "Automate the Boring Stuff," and I'm struggling to understand why the code below only produces 'Greetings!' as output.
print('What does spam equal? Hint: Try a number between 1 and 3')
spam = input()
if spam == 1:
print('Hello')
elif spam == 2:
print('Howdy')
else:
print('Greetings!')
It does because what you have given as input is stored as string in spam . And when you are using if else statements then it is comparing with integers, but your actual value is a string, therefore it always turns out to be in the final else statement printing Greetings!
So use spam=int(input()) instead.
This is because the input() returns a string, which is never equal to an integer.
Try
spam = int(input())
instead. This will of course throw a ValueError if the input is not an integer.

isinstance() not working the way I think it should [duplicate]

This question already has answers here:
Read an integer list from single line input along with a range using list comprehension in Python 3
(2 answers)
Closed 3 years ago.
My program requires a user input of a list of two elements, so to check if those conditions are satisfied I used the following code:
start = input('Enter you start location.\nE.g. Enter "[2,5]" for x-coordinate 2 and y-coordinate
5.')
while isinstance(start, list) == False or len(start) != 2:
start = input('Try again.')
This will never exit the while loop no matter what I input. Why?
Because your start variable turns out to be a string:start = "[2,5]", which is not a list. You can ask the user to input e.g 2,3,
then you get "2,3". You then can split it to a list using start.split(',')
Absolutely not recommanded for obvious security risk, but you can use eval.
start = eval(input('Enter you start location.\nE.g. Enter "[2,5]" for x-coordinate 2 and y-coordinate 5.'))
A prefered way is by using split, but in this case ask the user to enter coordinate separated by a coma.
start = input('Enter you start location.\nE.g. Enter "2,5" for x-coordinate 2 and y-coordinate 5.')
start = start.split(",")
Edit as recommanded by #soyapencil comments
inp_str = input('Enter you start location.\nE.g. Enter "[2,5]" for x-coordinate 2 and y-coordinate 5.')
start = [int(i) for i in iter(eval(inp_str,{}))]

How to keep increasing variable number in loop inpython [duplicate]

This question already has answers here:
How do I create variable variables?
(17 answers)
Closed 4 months ago.
I need to create a code where the user can input a certain number of courses, and then it will take the gpa of them, but how can I change the variable name in the loop?
I have this so far
number_courses= float(input ("Insert the number of courses here:"))
while number_courses>0:
mark_1= input("Insert the letter grade for the first course here: ")
if mark_1=="A+" :
mark_1=4.0
number_courses= number_courses-1
If I want to change the variable name of mark_one to something different each time I go through the loop, what is the simplest way I can do this? And also is it possible to change it in my input statement to ask for first, second, third... as I go through the loop? I have tried searching on google, but none of the answers I can understand as their code is far behind my level or they didn't seem to answer what I needed either. Thanks.
You want to use a list or something similar to gather the input values:
number_courses=input("Insert the number of courses here: ")
marks = []
while number_courses>0:
mark = input("Insert the letter grade for the first course here: ")
if mark == "A+":
mark = 4.0
marks.append(mark)
number_courses -= 1
print marks
Use a dictionary:
number_courses= float(input ("Insert the number of courses here:"))
marks = {'A+':4, 'A':3.5, 'B+':3}
total_marks = 0
while number_courses:
mark_1= input("Insert the letter grade for the first course here: ")
if mark_1 in marks:
total_marks += marks[mark_1] #either sum them, or append them to a list
number_courses -= 1 #decrease this only if `mark_1` was found in `marks` dict

Categories