python3 交替列印字串 leetcode

2021-10-03 01:17:14 字數 2082 閱讀 5244

交替列印之類的問題,一般通過乙個主線程判斷其他執行緒的進入條件,通過訊號量實現即可。

此題中,通過num主線程,來判斷其他執行緒的進入條件。每個執行緒執行時,其他執行緒是被阻塞的。

import threading

class

fizzbuzz

:def

__init__

(self, n:

int)

: self.n = n

self.fizz1 = threading.semaphore(0)

self.buzz1 = threading.semaphore(0)

self.fizzbuzz1 = threading.semaphore(0)

self.num = threading.semaphore(1)

# printfizz() outputs "fizz"

deffizz

(self, printfizz:

'callable[, none]')-

>

none

:for i in

range(1

, self.n+1)

:if(i %3==

0)and(i %5!=

0): self.fizz1.acquire(

) printfizz(

) self.num.release(

)# printbuzz() outputs "buzz"

defbuzz

(self, printbuzz:

'callable[, none]')-

>

none

:for i in

range(1

, self.n+1)

:if(i %3!=

0)and(i %5==

0): self.buzz1.acquire(

) printbuzz(

) self.num.release(

)# printfizzbuzz() outputs "fizzbuzz"

deffizzbuzz

(self, printfizzbuzz:

'callable[, none]')-

>

none

:for i in

range(1

, self.n+1)

:if(i %3==

0)and(i %5==

0): self.fizzbuzz1.acquire(

) printfizzbuzz(

) self.num.release(

)# printnumber(x) outputs "x", where x is an integer.

defnumber

(self, printnumber:

'callable[[int], none]')-

>

none

:for i in

range(1

, self.n+1)

: self.num.acquire()if

(i %3==

0)and(i %5!=

0): self.fizz1.release(

)elif

(i %3!=

0)and(i %5==

0): self.buzz1.release(

)elif

(i %3==

0)and(i %5==

0): self.fizzbuzz1.release(

)else

: printnumber(i)

self.num.release(

)

四個執行緒交替列印字串

於leetcode1195 編寫乙個可以從 1 到 n 輸出代表這個數字的字串的程式,但是 如果這個數字可以被 3 整除,輸出 fizz 如果這個數字可以被 5 整除,輸出 buzz 如果這個數字可以同時被 3 和 5 整除,輸出 fizzbuzz 例如,當 n 15,輸出 1,2,fizz,4,b...

DbgPrint列印字串

1 直接列印字串。dbgprint hello world 2 空結尾的字串,你可以用普通得c 語法表示字串常量 char variable string hello world dbgprint s variable string 3 空結尾的寬字串 wchar 型別 wchar string w...

Scala列印字串

1 字串,通過 號連線 2 printf用法 字串,通過 傳值。3 字串模板 通過 獲取變數值 列印字串 val username zhangdan val userage 20println 使用者名稱 username 使用者年齡 userage scala中簡化了關於json的表達 print...