Làm cách nào để chuyển đổi int âm thành một chữ số riêng lẻ trong mảng?
x = -3987
mảng = [-3,9,8,7]
Khi tôi cố gắng làm điều này, tôi gặp lỗi
Giá trịError. chữ không hợp lệ cho int[] với cơ số 10. '-'
x = [int[i] cho i trong str[x]]
vì vậy đây là mã của tôi
- đầu vào = mở['DATA1. txt', 'r']
- đầu ra = mở['OUT1. txt', 'w']
- số = đầu vào. đường đọc []
- cho x trong phạm vi[1]
- đặt = số[x]
- a = float[set[6]]
- b = float[set[4]]
- c = float[set[2]]
- d = float[set[0]]
- r = [a - b]**2 + [c - d]**2
- câu trả lời = vòng[r * 3. 14169,3]
- đầu ra. writelines['%s\n' % câu trả lời]
- đầu ra. đóng lại[]
Vấn đề của tôi là gì nếu tôi thay đổi 1. 312 thành âm 1. 312 nó báo lỗi và cho tôi
- Truy nguyên [cuộc gọi gần đây nhất]
- Tệp "vòng kết nối. py", dòng 6, trong
- a = float[set[6]]
- Giá trịError. chuỗi trống cho float[]
26 Nov '07 #1
1
vì vậy đây là mã của tôiKhông sử dụng set làm tên biến vì bạn sẽ che dấu hàm set[] tích hợp sẵn của Python. Hãy gọi nó là mục. mục là phần tử đầu tiên trong danh sách một phần tử. Bạn đang cố áp dụng float[] cho dấu trừ vì bạn đang cắt chuỗi "-1. 312 2 3 4". Bạn nên tách chuỗi, sau đó xử lý bốn số trong danh sách kết quảvà đây là dữ liệu1. txt có
- đầu vào = mở['DATA1. txt', 'r']
- đầu ra = mở['OUT1. txt', 'w']
- số = đầu vào. đường đọc []
- cho x trong phạm vi[1]
- đặt = số[x]
- a = float[set[6]]
- b = float[set[4]]
- c = float[set[2]]
- d = float[set[0]]
- r = [a - b]**2 + [c - d]**2
- câu trả lời = vòng[r * 3. 14169,3]
- đầu ra. writelines['%s\n' % câu trả lời]
- đầu ra. đóng lại[]
Vấn đề của tôi là gì nếu tôi thay đổi 1. 312 thành âm 1. 312 nó báo lỗi và cho tôiIt seem to happen to both negative integer and float numbers.
- Truy nguyên [cuộc gọi gần đây nhất]
- Tệp "vòng kết nối. py", dòng 6, trong
- a = float[set[6]]
- Giá trịError. chuỗi trống cho float[]
- đầu vào = mở ['dữ liệu. txt', 'r']
- đầu ra = mở['đầu ra. txt', 'w']
- numberList = đầu vào. đường đọc []
- cho mục trong danh sách số
- mục = mục. tách ra[]
- a = float[items[3]]
- b = float[items[2]]
- c = float[items[1]]
- d = float[items[0]]
- r = [a - b]**2 + [c - d]**2
- câu trả lời = vòng[r * 3. 14169,3]
- đầu ra. writelines['%s\n' % câu trả lời]
- đầu ra. đóng lại[]
27 Nov '07 #2
Đăng trả lời của bạn
Đăng nhập để đăng câu trả lời của bạn hoặc Đăng ký một tài khoản miễn phí
Đôi khi, trong khi làm việc với chuỗi dữ liệu Python, chúng ta có thể gặp sự cố trong đó chúng ta cần tách các số nguyên dương và âm trong một chuỗi. Điều này có thể xảy ra ở nhiều miền bao gồm xử lý dữ liệu. Hãy thảo luận về cách nhất định mà chúng ta có thể giải quyết vấn đề này
Xin lỗi vì bản dịch không tốt, tiếng Anh của tôi + google dịch không tốt lắm [nó bằng tiếng Do Thái]
def pad_zeros[binary_as_str, length]:
subtraction = length - len[binary_as_str]
return "0" * subtraction + binary_as_str
def binary_addition[binary_as_str1, binary_as_str2]:
counter , sm_in_string= 0, ""
if len[binary_as_str1] < len[binary_as_str2]:
binary_as_str1 = pad_zeros[binary_as_str1, len[binary_as_str2]]
elif len[binary_as_str2] < len[binary_as_str1]:
binary_as_str2 = pad_zeros[binary_as_str2, len[binary_as_str1]]
for i in range[len[binary_as_str1] - 1, - 1, - 1]:
if binary_as_str1[i] == "1":
counter += 1
if binary_as_str2[i] == "1":
counter += 1
sm_in_string = str[counter % 2] + sm_in_string
if counter >= 2:
counter = 1
else:
counter = 0
if counter % 2 == 1:
return "1" + sm_in_string
else:
return sm_in_string
def round_to_zero[binary_as_str]:
counter = 0
second_counter = 0
for i in range[8, len[binary_as_str] + 1]:
if len[binary_as_str] < 8:
return binary_as_str
else:
if i % 8 == 0: # 8
counter += 8
else: # 9, 10, 11
counter += 1
second_counter += 1 # 1, 2, 3
rounded = counter + [8 - second_counter] # 11
return rounded
def decimal_to_binary[decimal_num]:
binary = "" # It will increase as the loop continues, will increase by "0" or "1".
counter = decimal_num # The decimal number will be decreased with each run.
while counter != 0: # If it is equal to zero it means the transformation has ended.
if counter % 2 == 0:
counter = counter // 2 # Floor division, e.g: 29.5 goes to 29.
binary = "0" + binary
else:
counter = counter // 2 # Floor division, e.g: 29.5 goes to 29.
binary = "1" + binary
if decimal_num == 0:
binary = "0"
return binary # Returns the binary in string after all the process
def twos_compliment[num_dec]:
str1 = ""
if num_dec > 0:
binary_in_string = pad_zeros[decimal_to_binary[num_dec], round_to_zero[decimal_to_binary[num_dec]]] # 1100100
for i in range[len[binary_in_string]]: # 7-1=6
if binary_in_string[i] == "0":
str1 = str1 + "1"
else:
str1 = str1 + "0"
str1 = binary_addition[str1, "1"]
else:
decimal = decimal_to_binary[num_dec * [-1]]
length = round_to_zero[decimal_to_binary[num_dec * [-1]]]
return pad_zeros[decimal, length]
return str1
print[twos_compliment[-128]] # 10000000 - PROBLEM!!
print[twos_compliment[255]] # 1111111100000001
print[twos_compliment[64]] # 11000000
#My Tests:
print[twos_compliment[100]] # 10011100
print[twos_compliment[45]] # 11010011
print[twos_compliment[-45]] # 00101101
print[twos_compliment[-168]] # 0000 0000 1010 1000
print[twos_compliment[-256]] # 0000000100000000
print[twos_compliment[2500]] # 1111011000111100
print[twos_compliment[-127]] # 01111111
Để thực hiện phần bù hai, chúng ta bắt đầu với phần bù hai
Trong phần bù đơn vị, sự khác biệt giữa số dương và số âm là tất cả các bit được đảo lộn. Điều này chỉ hoạt động nếu chúng ta có một số bit cố định
Vì vậy, nếu chúng ta có tám bit, thì số 107 là
01101011 # decimal 107 in binary
và âm 107 lật tất cả các bit
10010100 # decimal -107 in binary ones-complement
Vì vậy, để làm những cái bổ sung, bạn cần phải
Quyết định xem bạn đang sử dụng bao nhiêu bit. Bạn cần phải làm điều này đầu tiên
Nếu số của bạn bằng 0, thì hệ nhị phân đều là số 0
Nếu số dương, hãy tính toán các bit theo cách thông thường. Bit đầu tiên sẽ bằng 0, nếu không thì số của bạn nằm ngoài phạm vi
Nếu số âm, hãy tìm ra các bit cho phiên bản dương, sau đó lật các bit
Vì vậy, để tính -107 bằng cách sử dụng tám bit, hãy bắt đầu bằng cách tính 107 ở dạng nhị phân, cần bảy bit 1101011
, đệm nó thành tám bit 01101011
, sau đó đổi số 0 thành số 1 và số 1 thành số 0 cho kết quả 10010100
Để thực hiện phần bù hai, chúng tôi thực hiện chính xác các bước tương tự, ngoại trừ đối với các giá trị âm, chúng tôi thêm 1 vào cuối
Vì vậy, để tìm ra -107 bằng cách sử dụng tám bit
Bỏ qua âm và chuyển đổi 107 thành nhị phân.
1101011
Nếu nó sử dụng nhiều hơn bảy bit, số của bạn nằm ngoài phạm vi
Pad đến tám bit.
01101011
Lật các bit để lấy phần bù.
10010100
Và bước bổ sung là thêm một.
10010101
Đừng quên mang theo khi thực hiện phép cộng. Đây là một ví dụ khác. chuyển đổi -13104 thành hai phần bổ sung bằng 16 bit