Tulis fungsi data_type yang mengambil argumen dan mencetak tipe data argumen itu. Jadi jika kita memberikan string sebagai input maka akan dikatakan bahwa input kita adalah string dan sama jika kita memberikan integer atau float. Saya tidak tahu apa yang saya lakukan salah jika ada yang bisa memberi saya penjelasan, saya akan sangat menghargainya! Semoga saya jelas dengan pertanyaan itu.

def data_type(x,y):
    for i in x,y:
        if i == type(str):
            print "str"
        elif i == type(int):
            print "int"
        else:
            if i == type(float):
                print "float"

data_type(1,"string")
0
Unix 18 Maret 2017, 02:22

2 jawaban

Jawaban Terbaik

Anda berpikir terlalu bahasa sehari-hari. i == type(str) terbaca samar-samar seperti "i bertipe string" tetapi sebenarnya tidak berarti demikian.

Anda dapat mengetahui apa itu type(str) dengan memasukkannya ke dalam juru bahasa Anda. Ini akan memberi tahu Anda bahwa str bertipe type, yang masuk akal karena str adalah tipe.

Jadi misalnya, "hello" == type(str) sama dengan "hello" == type. Ini tidak masuk akal -- string "halo" jelas tidak sama dengan konsep type, sehingga dievaluasi menjadi False.

Yang sebenarnya ingin Anda tanyakan adalah apakah type dari "halo" sama dengan jenis str. Yang dapat Anda periksa sebagai berikut: type(i) == str. Penyesuaian serupa untuk sisa kode Anda akan membuatnya berfungsi.

-1
Denziloe 17 Maret 2017, 23:34

Implementasi fungsi Anda yang lebih sederhana:

def print_types(*args):
    for arg in args:
        print(type(arg).__name__)

Beberapa catatan tentang ini:

Sintaks *args memungkinkan fungsi untuk mengambil banyak argumen posisi, mereka akan "dikemas" ke dalam args (yang akan tersedia untuk fungsi sebagai Tuple). type(x) akan mengembalikan tipe x, yang memiliki atribut __name__.

Perhatikan bahwa untuk kelas "gaya lama" (dalam python2, kelas yang tidak mewarisi dari object), ini sedikit salah dan Anda harus menyesuaikannya:

>>> class C: pass
... 
>>> type(C())
<type 'instance'>
>>> type(C()).__name__
# Not what we want
'instance'

Jika Anda juga ingin menangani objek gaya lama:

def print_types(*args):
    for arg in args:
        try:
            print(arg.__class__.__name__)
        except AttributeError:
            print(type(arg).__name__)

Demonstrasi cepat

>>> class C: pass
... 
>>> class D(object): pass
... 
>>> print_types(C, C(), D, D(), 'foo', 2)
classobj
C
type
D
str
int

Di python3 di mana tidak ada konsep "kelas gaya lama" Anda akan mendapatkan yang berikut:

>>> print_types(C, C(), D, D(), 'foo', 2)
type
C
type
D
str
int
0
Anthony Sottile 18 Maret 2017, 00:03