Есть несколько моментов, кроме только ответа:
a) input () Python по умолчанию возвращает строку, вам не нужно конвертировать с помощью преобразования строки.
[111 ] б) Есть лучший способ прочитать файл в Python, используя ключевое слово - «с».
c) Вы проверяете цикл после проверки условия с той же переменной - 'x'. Кажется неправильным!
d) Чтобы ответить на вопрос: функция strip возвращает None, и вы пытаетесь повторить ее, поэтому ошибка. Вместо этого вы можете напрямую заменить код следующим образом:
answer = "2"
if answer == "2":
f = open("users.txt", "r")
x = input("Please enter a valid username: ")
for line in f:
if (x) in (line.strip()):
for i in range(0,5):
print('Hi',x)
С Expression
, самый простой путь с выражением преобразования:
class Foo {
public int Value { get; set; }
}
class Bar {
public int Value { get; set; }
}
static class Program {
static void Main() {
Expression<Func<Foo, bool>> predicate =
x => x.Value % 2 == 0;
Expression<Func<Bar, Foo>> convert =
bar => new Foo { Value = bar.Value };
var param = Expression.Parameter(typeof(Bar), "bar");
var body = Expression.Invoke(predicate,
Expression.Invoke(convert, param));
var lambda = Expression.Lambda<Func<Bar, bool>>(body, param);
// test with LINQ-to-Objects for simplicity
var func = lambda.Compile();
bool withOdd = func(new Bar { Value = 7 }),
withEven = func(new Bar { Value = 12 });
}
}
Обратите внимание однако, что это будет поддерживаться по-другому различными поставщиками. EF не мог бы понравиться он, например, даже если LINQ-SQL делает.
Другая опция состоит в том, чтобы восстановить дерево выражений полностью, с помощью отражения для нахождения членов-корреспондентов. Намного более сложный.
Нет никакого неявного способа сделать перевод. Необходимо перенести существующего делегата в лямбде, которая создает новый тип из типа аргумента:
var translatedPredicate = x => originalPredicate(OtherTypeFromSomeType(x))
Где OtherTypeFromSomeType
создает OtherType
экземпляр от SomeType
аргумент.