[英]python String interpolation vs another method
我最初的python程序使用字符串插值來獲取用戶在0-9999之間輸入的數字(例如2928),然后將其各個數字相加(2 + 9 + 2 + 8 = 21),然后將數字除以直到最終成為一個數字屏幕上顯示的數字(在這種情況下為3)。 代碼如下所示:
現在,我需要找出一種不使用字符串插值的方法(將整數轉換為字符串,然后拆分字符串,將其重新轉換為整數,然后求和)。 我對python相當陌生,因此可以使用非常簡單的命令(最復雜的是while循環),有人可以幫助我/為我提供一些想法嗎?
* ps,我想關於yearintyear是多少有些含糊。 “ year”是我上面沒有寫的命令,但是它的代碼使用戶輸入0-9999之間的數字。 我將其變量名稱更改為“ yearint”,因為我是python的新手,並且希望使它們具有描述性,以便我回想起它們。 因此,基本上year / yearint是用戶輸入的輸入。
將模數乘以9,並進行一些調整以考慮9的倍數。
>>> (123 - 1) % 9 + 1
6
def sumnum(num):
if num < 10:
return num
return sumnum((num % 10) + sumnum(num/10))
sumnum(1234)
因為遞歸。 這就是為什么。
在Python中,您可以循環輸入一個字符串值,然后從該字符串中獲取連續的字符。
for ch in "1234":
print (ch)
因此,這是對字符串的數字值求和的最佳方法:
sum(int(ch) for ch in s)
在這里,我們使用具有“生成器表達式”的功能調用sum()函數,該生成器表達式一次獲取一個字符並將其轉換為整數值。 請注意,以這種方式進行操作時,字符串的長度無關緊要。
我在手機上輸入,因此我將使用“ y”代替“ yearString”。
if len(y) == 4:
x = int(y[3]) + int([2]) + int(y[1]) + int([0])
y = str(x)
if len(y) == 3:
x = int([2]) + int(y[1]) + int([0])
y = str(x)
if len(y) == 2:
x = int(y[1]) + int([0])
y = str(x)
answer = int(y)
看看如果總和有多個數字,后面的if語句將如何處理它。 現在,讓我們使用純數學編寫類似的代碼:
x = int(yearString)
d3 = x // 1000
x %= 1000
d2 = x // 100
x %= 100
d1 = x // 10
d0 = x % 10
answer = d3 + d2 + d1 + d0
編輯:既然我已經考慮過,我想我看到了最好的方式讓你做到這一點。 我不會為此寫完整的代碼。
如果使用模數運算符減10,則會拉出底部的數字。 然后,如果您使用整數除以10,則會刪除低位數字。 在while循環中執行此操作,並繼續執行直到所有數字都顯示完為止。 最后一次除以10后,該數字將為零。創建一個執行此操作的函數,然后從while循環中調用它,直到總和小於10(為一位數字)。
編輯:好的,我想我也可以編寫完整的代碼:
y = int(yearString)
x = 0 # we will accumulate the sum in x
while y != 0:
x += y % 10 # add one digit
y //= 10 # discard one digit
if y == 0 and x > 10:
# We have pulled out all the digits from y, but x has
# multiple digits. Start over so we can sum the digits
# from x.
y = x
x = 0
answer = x
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.