Tạo một lớp Nhiệt độ trong Python

Giả sử bạn được giao nhiệm vụ phát triển ứng dụng chuyển đổi nhiệt độ (như bạn có thể đã hoàn thành trong nhiệm vụ trước). Bạn có thể muốn chuyển đổi nhiệt độ từ một đơn vị đo lường này sang nhiều đơn vị đo lường khác. Một kịch bản cơ bản, được gọi là `kelvin_to_celsius. py`, chỉ có thể được sử dụng để thực hiện một tác vụ đó. Nhưng nếu chúng ta muốn mở rộng tập lệnh này, hãy gọi nó là `Temperature_converter. py`, và sử dụng nó để chuyển đổi Kelvin sang Fahrenheit (theo công thức `F = (K − 273. 15) * 9/5 + 32`)?

Để làm được điều đó, chúng ta cần tạo các hàm trong Python. Cho đến bây giờ, tất cả mã bạn đã viết sẽ chạy theo thứ tự khi chạy tập lệnh của bạn. Các hàm là các khối mã trong Python chỉ chạy nếu chúng được gọi rõ ràng. Hơn nữa, các hàm có thể có các tham số (dữ liệu để truyền tới một hàm, đầu vào) và có thể trả về dữ liệu (đầu ra) do đó

Hàm là giải pháp hoàn hảo cho nhiệm vụ này. Chúng sẽ cho phép bạn tạo hai khối mã mà bạn có thể gọi riêng. một hàm có tên `kelvin_to_celsius(nhiệt độ)` và một hàm khác có tên `kelvin_to_fahrenheit(nhiệt độ)`. Cả hai chức năng này đều có một tham số (hoặc dữ liệu đầu vào) được gọi là `nhiệt độ`. Mã trong hàm sẽ chuyển đổi nhiệt độ này và sau đó hàm sẽ trả về kết quả này. Giờ đây, người dùng có thể gọi các chức năng này một cách riêng biệt, tùy thuộc vào chuyển đổi mà họ cần

Các hàm không chỉ là một giải pháp hoàn hảo cho nhiệm vụ này, chúng còn là một phần thiết yếu của hầu hết các chương trình Python. Các chức năng giúp chia các tập lệnh thành các khối nhỏ hơn và theo mô-đun, cho phép bạn sử dụng lại mã (các lập trình viên gọi đây là DRY. Đừng lặp lại chính mình). Đặc biệt là khi các dự án Python của bạn phát triển, các hàm sẽ giúp quản lý và tổ chức chúng

Đối với chương trình mới của bạn, được gọi là `Temperature_converter. py`, bạn sẽ triển khai hai chức năng này trong Python và yêu cầu người dùng nhập liệu. Bạn yêu cầu người dùng nhập thông tin nếu `__name__ == "__main__". ` khối ở cuối tập lệnh của bạn, nơi bạn sẽ kiểm tra xem đầu vào có phải là một số không và sau đó in kết quả (đầu tiên là độ C, sau đó là độ F) của cả hai hàm

Chỉ định giá trị nhiệt độ trong một thang đo và bạn có sẵn giá trị đó ở các thang đo khác dưới dạng thuộc tính tương ứng. Kelvin, Celsius, Fahrenheit và Rankine được hỗ trợ (thuộc tính k, c, f, r)

Trăn, 30 dòng

Tạo một lớp Nhiệt độ trong Python
Sao chép vào clipboard

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

class Temperature(object):
    equations = {'c': (1.0, 0.0, -273.15), 'f': (1.8, -273.15, 32.0),
                 'r': (1.8, 0.0, 0.0)}

    def __init__(self, k=0.0, **kwargs):
        self.k = k
        for k in kwargs:
            if k in ('c', 'f', 'r'):
                setattr(self, k, kwargs[k])
                break

    def __getattr__(self, name):
        if name in self.equations:
            eq = self.equations[name]
            return (self.k + eq[1]) * eq[0] + eq[2]
        else:
            return object.__getattribute__(self, name)

    def __setattr__(self, name, value):
        if name in self.equations:
            eq = self.equations[name]
            self.k = (value - eq[2]) / eq[0] - eq[1]
        else:
            object.__setattr__(self, name, value)

    def __str__(self):
        return "%g K" % self.k

    def __repr__(self):
        return "Temperature(%g)" % self.k

Điều này được thúc đẩy bởi một công thức khác liên quan đến nhiệt độ. Tôi đã thấy một lớp tương tự trên các đoạn mã SourceForge, nhưng dịch vụ hiện có vẻ đã bị hỏng, vì vậy tôi đã vá lỗi này

ai đó có thể chỉ cho tôi một số mã để chuyển đổi nhiệt độ rankine thành kelvin không? . vậy 0R = -459. 67F, đây là những gì tôi có

chuyển sang kelvin

def __init__(self, value=0):
        Fah=value-459.69
        Cel=(Fah-32)*5/9.0
        value=Cel-273.15
        Temperature.__init__(self, value)

chuyển đổi trở lại rankine

def __str__(self):
        Cel=self.value+273.15
        Fah=Cel*1.8+32
        self.value=Fah+459.69
        return Temperature.__str__(self, 'R')

Đối với bất kỳ ai thắc mắc, đây là một nhiệm vụ mà tôi phải lưu trữ nhiệt độ bằng cách sử dụng giá trị cơ sở (tôi đã quyết định cơ sở sẽ tính bằng độ kelvin) trong một lớp có tên là "Nhiệt độ ()"
Tôi có các lớp con cho kelvin, celsius, fahrenheit và rankine. Tôi phải có khả năng lưu trữ tất cả nhiệt độ theo đơn vị kelvin tương đương và sau đó có thể in chúng ra ở các giá trị gốc (chẳng hạn như độ C hoặc độ F). vì vậy nếu tôi đã làm

a=TempK(100)
print a

nó sẽ in
Nhiệt độ là = 100K

nếu tôi làm

b=TempC()
print b

nó sẽ nói
Nhiệt độ là = 0C

và nếu tôi làm

b.set(a)
print a

nó được cho là đặt (TempC()) thành độ kelvin tương đương với b là (TempK()) và sau đó in nó ra bằng độ c. mà sẽ làm điều này
Nhiệt độ là = -173. 15C

Tôi có fahrenheit, celsius và kelvin đều hoạt động, dường như tôi không thể lấy rankine để chuyển đổi chính xác

con trăn

0 0

Chia sẻ

  • 3 Cộng tác viên
  • 5 Trả lời
  • 1K Lượt xem
  • 1 tuần Khoảng thời gian thảo luận
  • Bài đăng mới nhất Bài đăng mới nhất bởi jrcagle

Câu trả lời được đề xuất

Đã trả lời bởi jrcagle 77 trong một

Tôi khuyên bạn nên sắp xếp lại lớp học của mình một chút, nếu bạn có quyền tự do làm như vậy

class Temperature(object):
     def __init__(self, temp):

     def toCelcius(self):
   
     def toRankine(self):
 
     def toFahrenheit(self):

Bằng cách đó, tất cả nhiệt độ của bạn có thể được lưu trữ dưới dạng các đối tượng cùng lớp và bạn có thể truy cập vào…

Đã trả lời bởi woooee 814 trong một

một người nào đó chỉ cho tôi một số mã để chuyển đổi nhiệt độ rankine thành kelvin? . vậy 0R = -459. 67F, đây là những gì tôi có

Vậy rankine sẽ là -459. 67 cách tôi đọc những gì bạn đã nói

________số 8_______

Tất cả 5 câu trả lời

Tạo một lớp Nhiệt độ trong Python

jrcagle 77 Thực tế là một người đăng chính

14 năm trước

Tôi khuyên bạn nên sắp xếp lại lớp học của mình một chút, nếu bạn có quyền tự do làm như vậy

class Temperature(object):
     def __init__(self, temp):

     def toCelcius(self):
   
     def toRankine(self):
 
     def toFahrenheit(self):

Bằng cách đó, tất cả nhiệt độ của bạn có thể được lưu trữ dưới dạng các đối tượng cùng loại và bạn có thể truy cập giá trị theo bất kỳ đơn vị nào bạn muốn

Bạn có thể thêm các phương pháp khác để chuyển đổi từ Celcius, từRankine và từ Fahrenheit nếu bạn muốn

Dù sao, vào chủ đề

Your Kelvin <--> Celcius conversions are backwards in both code snippets. The first should read:

def __init__(self, value=0):
        Fah=value-459.69
        Cel=(Fah-32)*5/9.0
        value=Cel+273.15  ## <<<<
        Temperature.__init__(self, value)

va thu hai,

def __str__(self):
        Cel=self.value+273.15  ## <<<
        Fah=Cel*1.8+32
        self.value=Fah+459.69
        return Temperature.__str__(self, 'R')

Đây là một bài tập đại số thú vị. bạn có thể giảm cả hai đoạn mã này thành một công thức duy nhất (vì mục đích hiệu quả) không?

jeff

0 0

Chia sẻ

Tạo một lớp Nhiệt độ trong Python

bf2loser 0 Áp phích dành cho người mới

14 năm trước

được rồi, tôi sẽ thử cái này và xem nó hoạt động như thế nào. Tôi đã thực sự hy vọng rằng tôi có thể làm tất cả chúng như một lớp để nó đơn giản như bạn đang nói, nhưng thật không may, tôi đang tìm hiểu về kế thừa lớp nên điều đó nằm ngoài câu hỏi. (và uhh, không, tôi không nghĩ mình có thể giảm bớt điều này nếu tôi thử lol

0 0

Chia sẻ

Tạo một lớp Nhiệt độ trong Python

woooee 814 Gần thành Maven đăng bài

14 năm trước

một người nào đó chỉ cho tôi một số mã để chuyển đổi nhiệt độ rankine thành kelvin? . vậy 0R = -459. 67F, đây là những gì tôi có

Vậy rankine sẽ là -459. 67 cách tôi đọc những gì bạn đã nói

def __str__(self):
        Cel=self.value+273.15
        Fah=Cel*1.8+32
        self.value=Fah+459.69
        return Temperature.__str__(self, 'R')
0

0 0

Chia sẻ

Tạo một lớp Nhiệt độ trong Python

bf2loser 0 Áp phích dành cho người mới

14 năm trước

Được rồi, tôi có tất cả hoạt động ngoại trừ số không trên fahrenheit và rankine của tôi, đây là kết quả của tôi

>>> a=TempF(0)
>>> in một
Nhiệt độ là = 1. 06581410364e-014F
>>> b=TempR(0)
>>> in b
Nhiệt độ là = -5. 68434188608e-014R

những gì với tất cả những con số dư thừa và những thứ?

def __str__(self):
        Cel=self.value+273.15
        Fah=Cel*1.8+32
        self.value=Fah+459.69
        return Temperature.__str__(self, 'R')
1

0 0

Chia sẻ

Tạo một lớp Nhiệt độ trong Python

jrcagle 77 Thực tế là một người đăng chính

14 năm trước

Bạn đang gặp phải sự thiếu chính xác của số học máy tính -- nó xảy ra với bất kỳ ngôn ngữ nào và là kết quả tổng hợp của số học cơ số 2 VÀ việc không thể viết các số thập phân lặp lại với một lượng bộ nhớ hữu hạn (hoặc thời gian). )

Cách để làm đẹp nó là như thế này

def __str__(self):
        Cel=self.value+273.15
        Fah=Cel*1.8+32
        self.value=Fah+459.69
        return Temperature.__str__(self, 'R')
2

Điều này nội suy một số dấu phẩy động với 0 số 0 đứng đầu và 1 dấu thập phân. Nó sẽ có tác dụng làm tròn giá trị của bạn về 0 gần nhất. 1