2016-01-24 38 views
-4

最近我一直在努力蟒蛇行...我想讓它只能在同一行,沒有「;」 (分號)...分號替代在Python

a=raw_input("Enter: ");print(sum(([i for i in [[ord(i.lower())-96 for i in a.replace(' ','')]] if len(i)>=10][0])) if len(a) >= 10 else 0) 

所以就像我說的,我想更換的就是...的raw_input( 「輸入:」);打印... <在這裏的分號.. 我想從線做同樣的事情,但沒有分號..

有什麼建議?

+3

你想要的代碼行,怎麼辦?爲什麼一條線? –

+0

因爲我想看看到蟒蛇可以達到:),除了它的好,如果你喜歡超級不可讀的,未調試的,單行挑戰自己:) –

+3

,你應該嘗試的Perl,[它在更好的方式即](https://en.wikipedia.org/wiki/Just_another_Perl_hacker)。 –

回答

0

賦值是一個語句,但你可以使用Lambda做結合

print((lambda a:sum(([i for i in [[ord(i.lower())-96 for i in a.replace(' ','')]] if len(i)>=10][0])) if len(a) >= 10 else 0)(raw_input("Enter: "))) 

的想法是解決它...而不是

a = 21; print a*2 

您使用

print((lambda a : a*2)(21)) 
+0

謝謝! ,像魅力一樣工作! –

1

您可以直接在這裏使用exec功能。我已經成功地做到了:

>>> exec("a=raw_input()\nprint(sum(([i for i in [[ord(i.lower())-96 for i in a.replace(' ','')]] if len(i)>=10][0])) if len(a) >= 10 else 0)") 
10 
0 

我做什麼,我取代分號以換行符並通過了整個腳本作爲一個字符串exec功能。而已。還有其他一些複雜而棘手的方法,但這個方法很直接。

+0

without exec()function .. :) –

+0

@pythonlover然後,你應該編輯你的問題來表明這一點。 –

0

不幸的是,拉姆達也不EXEC變化固定在程序中的錯誤:

有3輸入的情況下,1)具有少於10個字符,「ABC」的字符串,輸出0;一個具有10個或更多字符的字符串「abcdefghij」,在空格被移除之後被求和(即用A = 1等);與後空間少於10個字符的字符串被刪除,「ABCD FGHIJ」,應該輸出一個0,但是,由於寫入時,代碼符與索引錯誤。

儘管這是有是代碼來檢查這個特定的情況下:

[i for i in [[ord(i.lower())-96 for i in a.replace(' ','')]] if len(i)>=10][0] 

不幸的是,如果字符串是更換後太短,你的索引列表爲空[] [0]這將導致錯誤。而且,lambda變化使得程序比原始的更長。

這裏是拉姆達的解決方案,既修復了指數錯誤,也比原來的解決方案更短的改寫:

print((lambda a:sum(*([i for i in[[ord(x)%32 for x in a if x!=' ']]if len(i)>9]or[[0]]))if len(a)>9else 0)(raw_input("Enter: "))) 

我一直是在Python 2和原來一樣,儘管我的強烈願望,升級這個關鍵代碼到Python 3 ...

+0

是的! ,但大多數設備和服務器都沒有python3,所以這會給我造成一個問題..但是,謝謝你提高我的線.. :) –

+0

@pythonlover聽起來像你誤會了;這個答案*不使用Python3。另外,爲什麼你想要一個玩具腳本是可移植的而不需要安裝Python3?你實際上並不希望使用混淆的單行程序進行服務器維護或其他任何真正的目的,對嗎? –