Асновы Python (функцыя)

я пачынаю праграмаванне з Python Tutorial, але я затрымаўся на гэтай праблеме ,:

задача:

  1. define a function, "distance_from_zero", with one parameter.
  2. have that function do the following:
    1. Check the type of the input it receives.
    2. If the type is int or float, the function should return the absolute value of the function input.
    3. If the type is any other type, the function should return "Not an integer or float!"

Мой адказ (гэта не працуе ...):

def distance_from_zero(d):
    if type(d) == int or float:
        return abs(d)
    else:
        return "Not an integer or float!"

я не ведаю, што я раблю няправільна ... Дзякуй

0
Я выправіў водступ, як я думаю, што гэта проста праблема фарматавання.
дададзена аўтар Mene, крыніца
наконт абзацаў? І калі тып (d) == INT або паплавок: выглядае дзіўна, вы павінны паспрабаваць , калі тып (d) у (Int, паплавок): або калі isinstance ( д, (цэлае, з якая плавае кропкай)):
дададзена аўтар oleg, крыніца

7 адказы

Праверка тыпу павінна быць

if isinstance(d, int) or isinstance(d, float):

якія могуць быць скарочаныя

if isinstance(d, (int, float))

Які код тэставанне

(type(d) == int) or float

ці, у словах: "альбо тып кода <> в роўна Int , або паплаўка праўдзіва". Па тэхнічных прычынах, усё гэта выраз заўсёды дакладна. Лагічныя выразы ў мовах праграмавання павінны быць паказаны трохі больш дакладна, чым на натуральнай мове.

5
дададзена
выдатны адказ і тлумачэнне. і дзякуй за прадстаўленне isinstance
дададзена аўтар Manu S, крыніца

Вы павінны выкарыстоўваць isinstance тут, а не тыпу :

def distance_from_zero(d):
    if isinstance(d, (int, float)):
        return abs(d)
    else:
        return "Not an integer or float!"

калі тып (d) == INT або паплавок заўсёды будзе True , як гэта ацэньваецца як флоат і гэта True значэнне:

>>> bool(float)
True

дапамогу па isinstance :

>>> print isinstance.__doc__
isinstance(object, class-or-type-or-tuple) -> bool

Return whether an object is an instance of a class or of a subclass thereof.
With a type as second argument, return whether that is the object's type.
The form using a tuple, isinstance(x, (A, B, ...)), is a shortcut for
isinstance(x, A) or isinstance(x, B) or ... (etc.).

Related : How to compare type of an object in Python?

4
дададзена
Не маглі б вы дадаць спасылку на чаму isinstance лепш (тып) ?
дададзена аўтар Mene, крыніца
Дзякуй за ваш час, каб адказаць, і для isinstance док.
дададзена аўтар Manu S, крыніца

Вы не можаце выкарыстоўваць гэты від «натуральнага мовы на аснове лагічнай канкатэнацыі». Тое, што я маю на ўвазе, што вам трэба выкласці частцы вашых лагічных умоў у відавочным выглядзе.

if type(d) == int or type(d) == float

Такім чынам, у вас ёсць два параўнання, якія стаяць за сябе: , калі тып (d) == INT , а таксама тыпу (d) == паплавок . Вынікі гэтага могуць быць аб'яднаны з кодам <> або -оператора.

1
дададзена
Вялікі дзякуй, за адказ і парады.
дададзена аўтар Manu S, крыніца

У праграмаванні, калі заявы не працуюць, як яны робяць на зразумелай мове. Калі вы хочаце сказаць нешта накшталт Гэты фрукт яблык ці апельсін , вам трэба запраграмаваць яго як

if type(fruit) == Apple or type(fruit) == Orange

Больш канкрэтна вашай праблемы, вы хочаце выкарыстоўваць isinstance() замест код> тып <() , як isinstance() будзе правільна ўлічваць падкласаў. См гэты адказ для атрымання больш падрабязнай інфармацыі.

Такім чынам, вы павінны скончыць з чымсьці накшталт

def distance_from_zero(d):
    if isinstance(d, int) or isinstance(d, float):
        return abs(d)
    else:
        return "Not an integer or float!"
0
дададзена
Дзякуй за ваш час, каб адказаць, і для isinstance альтэрнатыўных
дададзена аўтар Manu S, крыніца

Вось правільны код:

def distance_from_zero(d):
        if type(d) in (int, float):
                return abs(d)
        else:
                return "Not an integer or float!"

print distance_from_zero(3)
print distance_from_zero(-5.4)
print distance_from_zero("abc")

выхад:

3
5.4
Not an integer or float!

Звярніце ўвагу на абзац, у Python з'яўляецца вельмі важным у параўнанні з іншымі мовамі.

0
дададзена
Дзякуй за ваш адказ, і для у Альтэрнатыва
дададзена аўтар Manu S, крыніца

Function Details def distance_from_zero(d): if isinstance(d,(int,float)): return abs(d) else: return "Not an integer or float"

выклік функцыі

print (distance_from_zero(5))

Выхад: 5

print (distance_from_zero('5'))

Выснову: Ці не цэлае або з якая плавае кропкай

0
дададзена

Памылка, якую вы робіце выкарыстоўвае занадта шмат ангельскіх shortforms.

if type(d) == int or float:

Гэта азначае праверку, калі тып INT або калі паплавок дакладна ... які не тое, што вы хочаце.

if type(d) == int or type(d) == float:

Гэта дасць патрабаваны вынік.

0
дададзена