簡體   English   中英

python字符串插值與另一種方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM