亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

有關Python問題的詳細解說

發布時間:2021-10-20 11:46:22 來源:億速云 閱讀:93 作者:iii 欄目:編程語言

這篇文章主要講解了“有關Python問題的詳細解說”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“有關Python問題的詳細解說”吧!

問題1:誰先贏?微軟

艾米和布拉德輪流滾動一個漂亮的六邊形模具。誰先擲出" 6"贏得比賽。艾米首先滾動。艾米獲勝的機率是多少?

(1) 思路

這是一個核心的模擬問題,沒有比模擬大量過程并檢查Amy獲勝的可能性更好的方法了。

艾米滾第一。如果結果為6,則游戲結束,艾米獲勝。否則,布拉德(Brad)翻牌,如果是6,則贏得比賽。如果不是,則轉回艾米(Amy)。重復該過程,直到有人以6結束游戲。

在這里,關鍵是要了解邏輯流程:誰贏了,在什么情況下贏了。如果艾米得到6分,布拉德必須投擲嗎?沒有。

(2) 解題

import numpy as np  def who_won(die, size):          A_count = 0 # initialize A_count          B_count = 0 # initialize B_count          for i in range(size): # create an iteration                   A_6 = np.random.choice(die)  # roll the fair dice and choose a random value from 0 to 6                  if A_6 == 6:       # if A rolls a 6, then A_count adds 1.                           A_count+=1     # a side-note for Python beginners: the full expression is "A_countA_count = A_count+1."                  else:              # if the above if condition does not fullfill                          B_6 = np.random.choice(die)  # then, it's B's turn to roll the dice, which is a random choice from 0 to 6.                          if B_6 == 6:   # if B rolls a B, B_count adds 1.                                  B_count+=1                      return A_count/(A_count+B_count)   # return the total number of cases that A won divided by the combined number of A and B wonaka. the result is the probability that Amy wins.

檢查第11行:A_6是Amy的數據分布,如果她的數據為6,則計數為+1。否則,布拉德可以擲骰子。

在最后(第25行),最終結果應該是Amy獲勝的次數除以Amy和Brad獲勝的總數。一個常見的錯誤是將A_count除以仿真總數。這是不正確的,因為當Amy和Brad都未能擲出6時,會有迭代。

讓我們測試一下上述算法。

np.random.seed(123)  die = [1,2,3,4,5,6]  size = 10000  who_won(die,size) view raw

0.531271015467384

事實證明,艾米(Amy)在布拉德(Brad)之前就開始滾動贏得這場比賽。艾米(Amy)在10,000次模擬中獲勝的概率為53%。

有關Python問題的詳細解說

> Photo by john vicente on Unsplash

問題2:每個主要公司的最大數量為69

-給定一個僅由數字6和9組成的正整數num。-返回最多可更改一個數字可得到的最大數字(6變為9,而9變為6)。https://leetcode.com/problems/maximum-69-number/

(1) 思路

給定一個正整數,只有一種方法可以增大值,即將" 6"變成" 9",而不是相反。另外,我們必須更改最左邊的6;否則,它不是最大數量。例如,我們必須將"  6996"更改為" 9996",而不是" 6999"。

我想出了這個問題的幾種變體:您可以更改一次,也可以全部更改為6。

(2) 解決方法1:替換一次

# replace once def max_69_once(num):     return int(str(num).replace('6','9',1))  # test case num = 966666669 max_69_once(num)

996666669

在第3行中,我們將整數轉換為字符串,然后將第一個" 6"替換為" 9";使用int()將其返回為整數。

(3) 解決方案2:全部替換

def max_69_all(num):     k = len(str(num))     return int(str(num).replace('6','9',k))  # test case num = 966666669 max_69_all(num)

999999999

對于第二種情況,我們不必指定k,因為replace()方法默認會更改所有合適的值。我出于教學目的指定了k值。這個問題的另一個變體是替換前兩個或三個"  6"以使數字最大。

有關Python問題的詳細解說

> Photo by Alessandro Capuzzi on Unsplash

問題3:有效的完美正方形。Facebook

-給定正整數num,編寫一個函數,如果num是一個完美的平方則返回True;否則返回False。-后續操作:請勿使用任何內置庫函數(例如sqrt)。

https://leetcode.com/problems/valid-perfect-square/

(1) 思路

這非常簡單:檢查正整數是否具有理想的平方根,如果有正整數,則返回True,這可以分兩步完成。

  • 找到平方根。

  • 檢查它是否是完美的平方根。

棘手的部分是我們必須使用內置庫(例如,數學,Numpy)來計算平方根,這在LeetCode上是一個簡單的問題。如果我們不能使用這些庫,那么它將成為更具挑戰性和反復性的問題,這是LeetCode的一個中等水平的問題。

(2) 解決方案1:內置庫

import math   def valid_perfect_square(num):     return int(math.sqrt(num))**2==num  # the int() method only returns the integer part and leaves out the decimal part.                                         # For perfect squares, there should be no decimal part. The equation should thus hold.  # test case  valid_perfect_square(16)

該算法輕松通過了測試案例。應當指出,我們需要使用int()方法僅獲取平方根的整數部分,而忽略任何小數部分。對于完美的正方形,它不會有任何差異,因此等式成立。對于非完美的平方,方程將不成立并返回False。

(特別感謝韓琦發現錯誤!)

解決方案2:沒有內置庫和二進制搜索

# 1 find the squre root of num # 2 check if it is a perfect square number  # solution: no built-in library & binary search def valid_perfect_square(num):     if num < 2:          return True     left, right = 2, num//2       # create two pointers: left and right      while left<=right:            # while loop to constantly update left and right          x = left + (right-left)//2# take a wild guess and treat x as the starting point         xx_squared = x*x           # calculate the squared value of x         if x_squared == num:      # use the following 'if-else' statement to constantly update x_squared.             return True           # if there are the same, return True         if x_squared <num:        # if x_squared is smaller than num, left increases by 1             left= x+1          else:                     # if x_squared is bigger, right decreases by 1             right= x-1     return False                  # the while loop should continue looping until left and right converge and no common value obtained     # test case valid_perfect_square(16)

如果不允許使用任何庫,則采用二進制搜索。LeetCode包含一個詳細的解釋(在此處),我也對此主題發表了另一篇文章(在這里)。簡而言之,我們創建左右兩個指針,并將這兩個數字的平均值與原始數字進行比較:如果小于該數字,則增加該值;如果更大,我們減少它;或者,如果它們匹配,則返回True。

這些條件將在while循環中自動檢查。

#問題4:階乘尾隨零。彭博社

給定整數n,返回n中的尾隨零!

后續行動:您能否編寫一種適用于對數時間復雜度的解決方案?

https://leetcode.com/problems/factorial-trailing-zeroes/

(1) 思路

這個問題有兩個步驟:

  • 計算n階乘n!

  • 計算尾隨零的數量

對于第一步,我們使用while循環迭代遍歷n個階乘并停止循環直到1。對于第二步,事情變得有些棘手。

該問題要求尾隨零而不是總數零。這是個很大的差異。8!是40,320,它有2個零,但只有1個尾隨零。我們在計算時必須格外小心。我提出了兩種解決方案。

(2) 解決方案1:向后讀取字符串

# 1 calculate n! # 2 calculate the number of trailing zeros  def factorial_zeros(n):     product = n     while n > 1 :         # iteratively calculate the product         product *= (n-1)         n-=1              count = 0           for i in str(product)[::-1]:  # calculate the number of trailing zeros         if i == '0':             count+=1         else:             break     return count  factorial_zeros(20)

計算產品的第一部分是不言而喻的。對于第二部分,我們使用str()方法將乘積轉換為字符串,然后向后讀取:如果數字為0,則將count加1;否則為0。否則,我們將打破循環。

break命令在這里至關重要。如前所述,上述函數無需中斷命令即可計算零的總數。

(3) 解決方案2:while循環

def factorial_zeros(n):     product = n     while n > 1 :          # step 1: iteratively calculate the product          product *= (n-1)         n-=1     count = 0           while product%10 == 0:   # step 2: calculate the number of trailing zeros         productproduct = product/10         count+=1              return count

第一部分與解決方案1相同,唯一的區別是我們使用while循環來計算尾隨數字:對于乘積除以10的乘積,最后一位必須為0。因此,我們使用while循環不斷更新while循環,直到條件不成立為止。

順便說一句,解決方案2是我最喜歡的計算零的方法。

有關Python問題的詳細解說

> Photo by Jamie Fenn on Unsplash

問題5:完美數字,亞馬遜

  • 理想數字是一個正整數,它等于其正因數之和,但不包括數字本身。

  • 整數x的除數是可以將x均勻除的整數。

  • 給定整數n,如果n是完美數則返回true,否則返回false。

  • https://leetcode.com/problems/perfect-number/

(1) 思路

這個問題可以分為三個步驟:

  • 找出正因數

  • 計算總和

  • 決定:完美與否

第2步和第3步是不言而喻的,最多不超過一層。但是,棘手的部分是找到正除數。為此,我們可以采用野蠻力方法,并在從1到整數的整個序列中進行迭代。

理論上,它應該適用于一個小整數,但是如果我們運行大數,它將超過時間限制。時間效率不高。

(2) 解決方案1:暴力

#1. find the positive divisors #2. calculate the sum  #3. perfect or not   def perfect_number(num):     divisors = []     for i in range(1,num):         if num%i==0:             divisors.append(i)     if sum(divisors)==num:         return True     else:         return False          # test case 1 perfect_number(2)

此方法不適用于較大的值。您的面試官可能會要求更有效的解決方案。

(3) 解決方案2:sqrt(n)

# solution 2: sqrt(n)  def perfect_number(num):          if num<=1:         return False          divisors = set([1])          for i in range(2,int(num**0.5)+1):   # from 2 to num**0.5         if num%i==0:             divisors.add(i)             divisors.add(num//i)      return sum(divisors)==num

要找到其除數,我們不必檢查最大為整數的值。例如,要找到100的除數,我們不必檢查從1到100的數字。相反,我們只需要檢查直到100的平方根即10,并且所有其他可用值都已經為包括在內。

這是一種最佳算法,可為我們節省大量時間。

總結

  • 在進行了數十次"實踐"編碼之后,最大的收獲就是理解問題并將問題分為多個可操作的組件。

  • 在這些可行的部分中,總會有一個步驟使求職者絆倒。諸如"不能使用內置函數/庫"之類的限制。

  • 關鍵是逐步編寫自定義函數,并嘗試避免在練習例程中盡可能多地使用內置函數。

感謝各位的閱讀,以上就是“有關Python問題的詳細解說”的內容了,經過本文的學習后,相信大家對有關Python問題的詳細解說這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

含山县| 丹巴县| 巴楚县| 平阳县| 沙雅县| 仁怀市| 夹江县| 临沂市| 凤阳县| 安西县| 靖远县| 德昌县| 长兴县| 井研县| 寻甸| 桃源县| 山阴县| 耒阳市| 且末县| 开化县| 阳春市| 清涧县| 花莲县| 扎兰屯市| 新泰市| 大埔县| 株洲县| 鹤山市| 古蔺县| 洪湖市| 周宁县| 临海市| 大同市| 建水县| 利津县| 如皋市| 中卫市| 汶川县| 永吉县| 中西区| 太和县|