2015-04-02 4 views
-2

Привет, ребята, проезжающие через некоторый код python, и я наткнулся на эту строку (если строка оператора). После того, как я проверю тип 's' после утверждения, он все еще 'str type'. Как int (s [0])% 2 == 0) влияет на s '. Сначала он срезает' s, а затем преобразовывает полученное значение в int type?. Соответствующая часть код:Каков правильный тип 's'

values = [] 
for i in range(1000, 3001): 
    s = str(i) 
    if (int(s[0])%2==0): 
     #print type(s) #type str 
     values.append(s) 
print ",".join(values) 
+1

Почему был изменен тип 's', если вы не изменили' s' ??? –

+1

Просто потому, что вы написали 'int (s [0])', не означает, что 's' теперь является int или какой-либо его частью. Это строка, так как вы набросили ее на 's = str (i)'. – royhowie

ответ

2

Когда вы пишете int(x) он принимает все значения x и превратить его в integer. Он не меняет тип переменной x.

Это называется Кастинг, и вы можете получить больше информации here

Если не включать операцию литья там, то это приведет к ошибке, как вы пытаетесь сделать модуль операцию на строковое значение, будет хотение быть незаконной операцией.

Итак, вы берете значение, которое имеет [[0], преобразует/отличает его в целое число, а затем выполняет операцию модуля.

+0

Спасибо за ссылку – user2983686

+0

У Python нет машинных приемов: вы не просто рассматриваете 'x' как целое число, вы создаете совершенно новый объект, используя значение' x' как значение нового объекта. – chepner

+0

@chepner Кастинг - это общий термин, используемый в программировании, и я использовал его. Конечно, я могу перейти на операции уровня системы, которые выполняются здесь, но не видел необходимости в этом. –

0

Ваш код примет число, например 1782, и преобразует его в строку, чтобы вы могли взять первый символ из числа. Таким образом, мы получим "1" из вышеупомянутого номера. Затем он преобразуется в целое число, так что он может вычислить модуль % по номеру, возвращая 1, если число нечетное, и 0, если оно четное. Таким образом, if num == 0 или в псевдокоде if num is even, мы продолжим.

Фактически, при этом код будет вводить оператор if, если первая цифра номера i равна.

0

Если вы не выбрали int (s [0]), вы не сможете проверить, является ли первый символ в строке s четным (что является тем, что int (s [0])% 2 == 0 является делать). Поэтому попробуйте: снимите int, и вы получите ошибку типа.

Смежные вопросы