Пытаюсь сделать свою командную строку, но она не обрабатывает команды
import os
import random
def alert(a):
print(f"---{a}")
def randnum(frm, to):
num = random.randint(frm, to)
alert(num)
while True:
Запрос = input(">>> ")
Запрос_аргументы = Запрос.split(" ")
if Запрос_аргументы[0] is "randnum":
randnum(int(Запрос_аргументы[1]), int(Запрос_аргументы[2]))
else:
alert("Такой команды нет, либо вы ввели ее неправильно!")
Я проверил все что можно, здесь все идеально. Но когда я ввожу эту самую команду "randnum", то она выдает мне else. Помогите пожалуйста!
Ответы (1 шт):
У вас ошибка в выборе оператора сравнения.
Операторы is и == в Python выполняют похожие функции, но работают немного по-разному.
== проверяет, равны ли значения двух операндов. В данном контексте — переменных, занимающих разные ячейки памяти. Этот оператор можно использовать для сравнения практически любых объектов: строк, списков, словарей и кортежей.
is() проверяет, являются ли два операнда одним и тем же объектом, то есть указывают ли они на один и тот же объект в памяти. Что для данного примера не подходит.
import os
import random
def alert(a):
print(f"---{a}")
def randnum(frm, to):
num = random.randint(frm, to)
alert(num)
while True:
Запрос = input(">>> ")
Запрос_аргументы = Запрос.split(" ")
if Запрос_аргументы[0] == "randnum": # Вот тут меняем is на ==
randnum(int(Запрос_аргументы[1]), int(Запрос_аргументы[2]))
else:
alert("Такой команды нет, либо вы ввели ее неправильно!")
Так же вам стоит добавить дополнительные проверки для Запрос_аргументы[1] и [2], что бы в случае их отсутствия программа не сыпалась.
Как еще один вариант, вместо == можно использовать оператор in для проверки вхождения строки в список строк. Вот как это может выглядеть в коде:
if Запрос_аргументы[0] in ["randnum"]: