如何在不使用變量的情況下查找下面的字符串的長度?在字符串中使用len()
string = "This is a sentence and it has %d characters" % len(string)
print string
這一個不起作用。什麼是正確的編碼方式?
如何在不使用變量的情況下查找下面的字符串的長度?在字符串中使用len()
string = "This is a sentence and it has %d characters" % len(string)
print string
這一個不起作用。什麼是正確的編碼方式?
你不能把字符串的長度,直到你分配的東西給它,這樣做的做置換前,然後找出該結果將是簡單的數學有多長:
POWERS_OF_TEN = {10**n for n in range(7)} # handle strings over 10M chars long
string = "This is a sentence and it has %d characters"
length = len(string) - len('%d') + len("%d" % len(string))
correction = len(string)+1 in POWERS_OF_TEN
string %= length+correction
print(string) # This is a sentence and it has 43 characters
的計算上述正確處理情況的結果的長度比原來的字符串與它"%d"
的長度不同。
這是通過下面的測試代碼,其示出了原始字符串及其長度所示,接着將得到的字符串和用於不同尺寸—輸入其兩個實際和計算出的長度,你可以看到,後兩者的值總是匹配包括在加入一個字符的特殊情況做出的結果字符串長兩個角色:
for i in range(0, 10+1):
string = (''.join(chr(ord('A')+(d-1)%26) if d else ''
for d in range(0, i+1))+ "%d")
length = len(string) - len('%d') + len("%d" % len(string))
correction = len(string)+1 in POWERS_OF_TEN
string2 = string % (length+correction)
print('{!r}, len: {} -> {!r}, length actual: {} vs computed: {}'.format(
string, len(string), string2, len(string2), length))
輸出:
'%d', len: 2 -> '1', length actual: 1 vs computed: 1
'A%d', len: 3 -> 'A2', length actual: 2 vs computed: 2
'AB%d', len: 4 -> 'AB3', length actual: 3 vs computed: 3
'ABC%d', len: 5 -> 'ABC4', length actual: 4 vs computed: 4
'ABCD%d', len: 6 -> 'ABCD5', length actual: 5 vs computed: 5
'ABCDE%d', len: 7 -> 'ABCDE6', length actual: 6 vs computed: 6
'ABCDEF%d', len: 8 -> 'ABCDEF7', length actual: 7 vs computed: 7
'ABCDEFG%d', len: 9 -> 'ABCDEFG9', length actual: 8 vs computed: 8
'ABCDEFGH%d', len: 10 -> 'ABCDEFGH10', length actual: 10 vs computed: 10
'ABCDEFGHI%d', len: 11 -> 'ABCDEFGHI11', length actual: 11 vs computed: 11
'ABCDEFGHIJ%d', len: 12 -> 'ABCDEFGHIJ12', length actual: 12 vs computed: 12
硬編碼了答案:
string = "This is a sentence and it has 43 characters"
對於一個更一般的情況下,可以使用迭代近似:
base = "This sentence has %d characters"
n = 1
while len(base % n) != n:
n = len(base % n)
string = base % n
你的代碼試圖獲取不存在的字符串的長度然而。這是行不通的。使用不同的輸入,甚至可能有多種方式來填寫空白:
string = "chars: %d"
9或10?誰知道。
在你的句子找你想分配給它的任何值之前評估串lenght
string = "This is a sentence and it has %d characters" % len(string)
你應該考慮它有可能做到這一點,即:
string = "%d chars.."
可以擴大平等地
string = "9 chars.."
並致:
string = "10 chars.."
實際上這不起作用,因爲字符串在賦值之前被引用。 除此之外,這將永遠不會按設計工作,因爲在轉換意義上,您正在創建遞歸。你試圖得到一個字符串的長度取決於字符串本身長度的長度(咦?) 爲了解決這樣的問題,人們可以(!)解決iterativelly:
l =42
while True:
s = "This is a sentence and it has %d characters" % l
if len(s)==l:
break
l = sample_new_length()
通過選擇適當的採樣函數,可以解決這個問題。
這基本上是一個常數,你說的方式。
如果它是部分變量,您只需要一個常數,它反映了不會改變的部分,例如, len("This sentence has")
+ len("characters")
。
在發佈這樣的字符串之前,可以簡單地評估變量部分。此時,添加了常數部分的len(string)
將產生正確的答案。
有時,答案並不需要(多)代碼:-)
*如何*「沒有[它]工作」? – user2864740
爲什麼不能設置一個變量? len(字符串)將在string =「This is ...」之前被處理,所以沒有結果可以被髮出 – linpingta
這是理解編程的不好的方法... – thavan