2012-01-29 89 views
11

Tôi đang cố tạo một chương trình đơn giản cho bạn biết số may mắn của bạn theo số học. Tôi tiếp tục nhận được lỗi này:LoạiError: đối tượng 'int' không thể ghi số

File "number.py", line 12, in <module> 
    sumln = (int(sumall[0])+int(sumall[1])) 
TypeError: 'int' object is not subscriptable 

kịch bản của tôi là:

birthday = raw_input("When is your birthday(mm/dd/yyyy)? ") 
summ = (int(birthday[0])+int(birthday[1])) 
sumd = (int(birthday[3])+int(birthday[4])) 
sumy= (int(birthday[6])+int(birthday[7])+int(birthday[8])+int(birthday[9])) 
sumall = summ + sumd + sumy 
print "The sum of your numbers is", sumall 
sumln = (int(sumall[0])+int(sumall[1])) 
print "Your lucky number is", sumln` 
+0

Giá trị được lưu trữ trong 'sumall' là một số nguyên (kết quả của tổng của 3 số nguyên khác) .Tuy nhiên, một vài dòng xuống, bạn cố gắng để subscript số nguyên do đó lỗi. (!) –

+3

Bạn cũng có thể muốn sử dụng 'birthday.split ('/')' để tách ngày, tháng và năm. –

Trả lời

2

Nếu bạn muốn tổng hợp các chữ số của một số, một trong những cách để làm điều đó là sử dụng sum() + một biểu thức máy phát điện:

sum(int(i) for i in str(155)) 

tôi sửa đổi một chút mã của bạn sử dụng sum(), có thể bạn muốn chụp nhìn vào nó:

birthday = raw_input("When is your birthday(mm/dd/yyyy)? ") 
summ = sum(int(i) for i in birthday[0:2]) 
sumd = sum(int(i) for i in birthday[3:5]) 
sumy = sum(int(i) for i in birthday[6:10]) 
sumall = summ + sumd + sumy 
print "The sum of your numbers is", sumall 
sumln = sum(int(c) for c in str(sumall))) 
print "Your lucky number is", sumln 
6

Lỗi này là chính xác những gì nó nói nó là; bạn đang cố gắng để lấy sumall [0] khi sumall là một int và điều đó không có ý nghĩa gì cả. Bạn tin rằng sumall nên là gì?

0

Bạn không thể làm một cái gì đó như thế: (int(sumall[0])+int(sumall[1]))

Đó là bởi vì sumall là một int và không phải là một danh sách hoặc dict.

Vì vậy, summ + sumd sẽ bạn con số may mắn

3
sumall = summ + sumd + sumy 

bạn sumall là một số nguyên. Nếu bạn muốn các ký tự riêng lẻ từ nó, chuyển nó thành một chuỗi đầu tiên.

1

Hãy thử điều này thay vì:

sumall = summ + sumd + sumy 
print "The sum of your numbers is", sumall 
sumall = str(sumall) # add this line 
sumln = (int(sumall[0])+int(sumall[1])) 
print "Your lucky number is", sumln 

sumall là một con số, và bạn không thể truy cập vào chữ số của nó bằng cách sử dụng ký hiệu subscript (sumall[0], sumall[1]). Để làm việc đó, bạn cần phải chuyển nó trở lại thành chuỗi.

0

Chỉ cần rõ ràng, tất cả các câu trả lời đều đúng, nhưng lý do đằng sau chúng không được giải thích rất rõ.

Biến số sumall chưa phải là chuỗi. Parentheticals sẽ không chuyển đổi thành một chuỗi (ví dụ: summ = (int(birthday[0])+int(birthday[1])) vẫn trả về một số nguyên. Có vẻ như bạn có nhiều khả năng muốn nhập str((int(sumall[0])+int(sumall[1]))), nhưng đã quên. Lý do hàm str() sửa mọi thứ là vì nó chuyển đổi bất kỳ thứ gì trong đó tương thích với chuỗi.

Các vấn đề liên quan