2012-01-21 31 views
5
def RandomString (length,distribution): 
    string = "" 
    for t in distribution: 
     ((t[1])/length) * t[1] += string 
    return shuffle (string) 

Điều này trả về lỗi cú pháp như được mô tả trong tiêu đề. Trong ví dụ này, distribution là một danh sách các hàng, mỗi tuple chứa một bức thư, và phân phối của nó, với tất cả các bản phân phối từ danh sách bổ sung lên đến 100, ví dụ:lỗi cú pháp: không thể gán cho toán tử

[("a",50),("b",20),("c",30)] 

length là chiều dài của chuỗi mà bạn muốn.

Trả lời

9

Python khó chịu vì bạn đang cố chỉ định một giá trị cho một thứ không thể gán giá trị.

((t[1])/length) * t[1] += string 

Khi bạn sử dụng toán tử gán, bạn chỉ định giá trị của biến ở bên phải biến hoặc phần tử bên trái. Trong trường hợp của bạn, không có biến hoặc phần tử ở bên trái mà thay vào đó là giá trị được giải thích: bạn đang cố chỉ định giá trị cho một thứ không phải là "vùng chứa".

Dựa trên những gì bạn đã viết, bạn chỉ hiểu lầm cách hoạt động của toán tử này. Chỉ cần chuyển đổi các toán hạng của bạn, như vậy.

string += str(((t[1])/length) * t[1]) 

Lưu ý rằng tôi đã quấn giá trị được gán trong str để chuyển đổi nó thành một str để nó tương thích với các string biến nó đang được giao nhiệm vụ. (Không thể thêm số và chuỗi cùng nhau.)

+0

Điều đó mang lại cho tôi một lỗi kiểu TypeError: Không thể chuyển đổi đối tượng 'float' thành str hoàn toàn Bất kỳ ý tưởng nào? – TheFoxx

+0

Có. Nhưng tất cả phụ thuộc vào những gì bạn muốn 'chuỗi' trông giống như. Vui lòng giải thích về giá trị của 'chuỗi' sẽ dựa trên đầu vào ví dụ bạn đã cung cấp. Tôi đã sửa đổi câu trả lời của tôi với một đoán như những gì bạn đang tìm kiếm. – cheeken

-3

gì làm bạn nghĩ rằng đây là nghĩa vụ phải được: ((t[1])/length) * t[1] += string

Python không thể phân tích này, đó là một lỗi cú pháp.

+0

Vâng thực sự của nó có nghĩa là để được điều này, tôi chỉ relised ((t [1]/10)/Về cơ bản nó lấy số tiền cho mỗi chữ cái, tìm ra bao nhiêu lần bức thư cần phải có trong chuỗi ngẫu nhiên mà nó tạo ra, và sau đó thêm nhiều chữ cái vào chuỗi rỗng, có tên là – TheFoxx

+0

@ user1048244: Nó không liên quan gì nó cho - như được viết, nó không hợp lệ về mặt cú pháp. – Marcin

0

Thay vì ((t[1])/length) * t[1] += string, bạn nên sử dụng string += ((t[1])/length) * t[1]. (Các vấn đề cú pháp khác - int is not iterable - sẽ là bài tập của bạn để tìm ra.)

+0

Tôi chỉ thử điều đó và nó cho tôi biết TypeError: Không thể chuyển đổi đối tượng 'float' thành str hoàn toàn – TheFoxx

+0

GỢI Ý: Bạn không thể sử dụng 'distribution' theo nghĩa đó trong câu lệnh' for' của Python. Có lẽ một 'phạm vi' của phân phối của bạn sẽ phù hợp ...? – Makoto

1

Vâng, như lỗi nói, bạn có biểu thức (((t[1])/length) * t[1]) ở phía bên trái của bài tập, thay vì tên biến. Bạn có biểu thức đó, và sau đó bạn nói với Python để thêm string vào nó (luôn luôn là "") và gán nó cho ... ở đâu? ((t[1])/length) * t[1] không phải là tên biến, do đó bạn không thể lưu kết quả vào đó.

Ý của bạn là string += ((t[1])/length) * t[1]? Điều đó sẽ có ý nghĩa hơn. Tất nhiên, bạn vẫn đang cố gắng thêm một số vào một chuỗi hoặc nhân với một chuỗi ... một trong số đó có thể là s có thể là t[0].

+0

Có nó nên t [0], mã của tôi không phải là bình thường này đầy đủ các lỗi, ive chỉ cần retyped nó khoảng 10 lần cố gắng để con số này của chúng tôi .. – TheFoxx

-4

trong python chỉ làm việc

a=4 
b=3 

i=a+b 

mà tôi là nhà điều hành mới

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