如何在不使用;和exec函式的情況下僅在一行中創建變數
并對該變數執行操作
又在一行中
例如
input_string = str(input())
array = []
for i in range(len(input_string)):
if (ord(input_string[i]) - 97) % 2 == 0:
array.append(input_string[i])
else:
array.append(input_string[i].upper())
array.sort(reverse=True)
answer = ' '.join(array)
print(answer)
我做的解決方案
input_string = str(input());print(' '.join(reversed(sorted([input_string[i] if ((ord(input_string[i]) - 97) % 2 == 0) else input_string[i].upper() for i in range(len(input_string))]))))
但如果你小心
我;在分配變數后立即使用。但我不想 !!
我可以不使用;或不使用嗎?
uj5u.com熱心網友回復:
除非您的程式有更多需要的值input_string(在這種情況下,您為什么要嘗試將這個特定的部分放在一行上?),您可以通過首先不將其分配給變數來輕松避免該問題,而只是input()直接在需要的地方使用回傳值。
>>> print(*(sorted((s if ord(s) % 2 else s.upper() for s in input()), reverse=True)))
abcdefg
g e c a F D B
請注意,您的原始代碼包含許多可以簡化和/或更“Pythonic”的運算式;例如:
str(input())
應該只是:
input()
和:
for i in range(len(input_string)):
...input_string[i]...
應該:
for s in input_string:
...s... # now you don't need input_string inside the loop!
或類似的,您可以利用“真實性”(以及減去奇數總是將其值模2完全反轉的事實)來改變這個:
if (ord(s) - 97) % 2 == 0:
array.append(s)
else:
array.append(s.upper())
更簡潔:
if ord(s) % 2:
array.append(s)
else:
array.append(s.upper())
然后當然可以通過將整個回圈轉換為生成器運算式來壓縮整個回圈,正如您已經發現的那樣。
uj5u.com熱心網友回復:
好像沒有辦法。基于(復合陳述句)文章,您必須使用縮進或分號。仍然如果您堅持使用其他東西,您可以定義一個特殊符號,然后在運行代碼之前,semicolon ;再次替換該符號。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/404875.html
標籤:
